iptables与docker网桥问题分析

1、计数器归零 + 差值对比

【说明】:不加任何规则,只看哪条规则的命中数涨了,哪条 REJECT/DROP 的 pkts 从 0 变成非 0,就是它的问题

#归零全表计数器
iptables -Z

#复现(在容器里发一次请求)
docker exec <ID> curl -s -m 3 http://IP:8443/nodes

#查看所有链里 DROP/REJECT 的命中数
iptables -L -n -v | grep -E ‘Chain|DROP|REJECT’

.

2、加上LOG 规则

【说明】:LOG 只表示”包到了这条链”,不表示”被哪条规则杀的”,所以要配合1中的计数器一起看

#插入–limit 防止日志刷爆
iptables -I INPUT 1 -p tcp –dport 8443 -j LOG \ –log-prefix “TRACE8443: ” -m limit –limit 5/min

#复现(在容器里发一次请求)
docker exec <ID> curl -s -m 3 http://IP:8443/nodes

#看日志
dmesg -T | grep TRACE8443

#删除LOG(规则描述必须和插入时完全一致)
iptables -D INPUT -p tcp –dport 8443 -j LOG –log-prefix “TRACE8443: ” -m limit –limit 5/min

#日志样例及解析
“N=docker_gwbridge OUT= PHYSIN=veth16114e8 SRC=172.17.0.19 DST=10.20.26.8 DPT=8443 SYN“

IN=docker_gwbridge:包从这个网桥进来的 → 所以它被划到哪个 firewalld zone 决定了命运

OUT= 为空 + 出现在 INPUT 链 → 说明目标地址是本机地址,走 INPUT 不走 FORWARD

SRC=172.17.0.19:容器 IP,不是 lo

.

3.raw 表 TRACE

【说明】:可以跟踪”包经过了哪张表、哪条链、第几条规则、最终判决是什么”的完整路径

modprobe nf_log_ipv4
sysctl -w net.netfilter.nf_log.2=nf_log_ipv4

iptables -t raw -I PREROUTING -p tcp –dport 8443 -j TRACE
iptables -t raw -I OUTPUT -p tcp –dport 8443 -j TRACE

dmesg -w # 另开窗口,然后复现

日志:TRACE: filter:INPUT:rule:7 … / TRACE: filter:IN_public:policy:…

.

.

.

Comments

No comments yet. Why don’t you start the discussion?

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注