我的表和链iptables
规则如下:nat
POSTROUTING
Chain POSTROUTING (policy ACCEPT)
target prot opt source destination
LOG all -- anywhere anywhere LOG level warning prefix " packet-pre-snat"
MASQUERADE all -- anywhere anywhere
LOG all -- anywhere anywhere LOG level warning prefix " packet-post-snat"
我在主机之间发送 HTTP 请求,然后查看日志,我只看到一个条目:
Mar 15 08:41:55 vpn-instance5 kernel: [ 385.657182] packet-pre-snatIN= OUT=ens5 SRC=10.132.0.2 DST=10.0.0.24 LEN=60 TOS=0x00 PREC=0x00 TTL=61 ID=40 DF PROTO=TCP SPT=53896 DPT=443 WINDOW=65320 RES=0x00 SYN URGP=0
为什么我只看到一篇文章?
- 我期望至少有一些条目(因为有许多数据包交换来建立 TCP 连接。
- 我看到 pre-snet 日志条目。为什么我看不到 post-snat 条目(iptables 中的第三条规则)
答案1
您没有看到 post-snat 条目,因为第三条规则永远不会触发,因为 MASQUERADE 是终止目标,而 LOG 是非终止目标。
当 pre-snat LOG 规则被激活时,iptables 继续处理链中的规则,转到 MASQUERADE 规则,而当 MASQUERADE 规则被激活时,iptables 停止处理链中的规则,因此其下的 post-snat LOG 规则永远不会收到任何数据包由它处理,因此它不会记录任何内容。
终止目标:终止目标执行一个操作,终止链内的评估并将控制返回到 netfilter 挂钩,如果还有剩余,则转到下一个链。
非终止目标:非终止目标执行操作并在链内继续评估。