需求:
1: 想要查看经过某个链时的数据包信息,用来排查数据包为什么没按照自己的期望转发。
iptables -I FORWARD -j LOG -s 172.17.0.2 --log-prefix="Before filter FORWARD: "
解释: 在forward链之中增加log行为的记录,把来源ip是172.17.0.2 的数据包打印在内核之中。
内核信息的查看:dmesg | grep SRC=172.17.0.2
2: 查看iptables 之中某个表之中的所有的规则
iptables -t 表名 -nvL --line-number
3: iptables 删除某条规则
iptables -D 链的名字 链的规则号
4: iptables 查看某个表下的某个链下的规则列表
iptables -t 表名 -L 链名 -nv
5: 使用tcpdump 监控某个网卡,发现并没有数据经过,想知道是否是 FORWARD链的规则,将数据包丢弃了。
iptables -L FORWARD -nv
显示 FORWARD链的信息,头部的DROP会显示丢弃的包的数目
FORWARD链信息
6: iptables 的snat 规则的下半部分dnat 在何时生效?
当数据回来后,经过 iptables的 PREOUTING 链规则,然后执行dnat 转换,然后进行路由选择。
验证方式:启动某个容器,在容器内ping 外网地址,宿主机在iptables 的 PREOUTING链之中增加log规则,
可以发现,在经过PREOUTING链之后,dst ip 并未变化。
7: iptables 增加 tcp 协议目标端口匹配,并打印日志
iptables -t raw -I PREROUTING -d 172.16.217.154 --protocol tcp --sport 8000 -j LOG --log-prefix="ddd "
8: iptables 如何查看模块的帮助文档
iptables -m 模块名 --help
9: 在nat表的 PREROUTING 增加log 打印动作,访问 阿里云机器内网ip 不会打印,访问阿里云机器外网ip 会打印日志,这是什么原因?是nat表有什么特殊嘛
iptables -t nat -I PREROUTING -p tcp --dport 8899 -j LOG --log-prefix="prefix"
curl 127.0.0.1:8899
curl 外网ip:8899
回答:
对于nat表而言,只有连接的第一个数据包会流经 nat表,例如tcp建立连接的第一个SYN 包。
所以nat表之中的规则,也就只是会应用在连接的第一个数据包上,而这个连接的后续数据包,则不会
流经这个表。
对于阿里云的机器的访问外网得出的结果,可以在网卡上进行抓包,得出背后的原因。
抓包命令:tcpdump -n -i eth0 'src 公网ip or dst 公网ip'