iptables中SNAT端口转换与指向同一本地IP的DNAT规则的处理优先级问询
iptables中SNAT端口转换与指向同一本地IP的DNAT规则的处理优先级问询
嘿,这个问题问到点子上了!咱们先把核心逻辑给你掰明白——连接跟踪(conntrack)的优先级远高于你手动加的DNAT规则,所以完全不用担心冲突。
先回到你的场景复盘下:
当LAN侧的192.168.51.2发起对1.1.1.1的请求时,路由器通过MASQUERADE规则完成SNAT转换的同时,会自动在连接跟踪表里生成一条会话记录,清清楚楚记下:
- 原始源:
192.168.51.2:40960 - 转换后源:
4.3.2.1:50961 - 目标:
1.1.1.1:80
这条记录是双向绑定的,会跟踪整个会话的来回流量。
等1.1.1.1的响应包回到路由器的eth0接口时,iptables会先检查连接跟踪表,一眼就认出这是之前那个出站会话的反向流量,直接按照记录把目标地址/端口转回192.168.51.2:40960,根本不会去碰你加的那条PREROUTING DNAT规则。
那你加的那条DNAT规则什么时候会生效?只有当外网主动发起的、没有对应conntrack会话的新流量进来时,才会触发它——比如有人从公网访问4.3.2.1的某个端口,这时候路由器找不到对应的会话记录,才会执行DNAT把流量转到192.168.51.2上。
如果你想验证这个逻辑,可以在路由器上跑conntrack -L命令,就能看到当前所有的连接跟踪条目,那个LAN设备发起的会话记录会明明白白显示出来,一看就懂。
备注:内容来源于stack exchange,提问作者Ning Yu Fisher
相关产品推荐
相关产品推荐

