You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

关于Tomato路由器iptables规则的解析与迁移疑问

关于Tomato路由器iptables规则的解析与迁移疑问

嗨,我来帮你逐一拆解这些从Tomato路由器导出的iptables规则,验证你的理解是否正确,同时把你搞不懂的部分讲明白~

一、*mangle表规则解析

*mangle
-I PREROUTING -i vlan2 -j DSCP --set-dscp 0
-I FORWARD -p tcp --tcp-flags SYN,RST SYN -j TCPMSS --clamp-mss-to-pmtu
COMMIT
  • 你的理解:第一条是重写DSCP位,不知道作用 → 完全正确,这条的作用是清空外网接口(vlan2) incoming数据包的DSCP标记。DSCP是用来做QoS(流量优先级)的,外网过来的包可能带有运营商或上游设备的DSCP标记,如果直接带进内网,会干扰你自己配置的内网QoS策略,清零后就能让内网的QoS规则完全生效。
  • 第二条规则你完全不懂 → 这是TCP网络中非常实用的MSS调整规则:
    不同网络的MTU(最大传输单元)可能不一样(比如外网PPPoE链路MTU通常是1492,而内网是1500),如果内网主机发起TCP连接时的MSS(最大分段大小)值超过了外网链路的MTU,数据包会被迫分片,甚至直接丢包导致连接失败。这条规则会自动把SYN包的MSS值 clamp(限制)到路径MTU减去IP+TCP头的大小(通常是40字节),确保数据包不用分片就能正常传输,避免跨MTU网络的连接问题。

二、*nat表规则解析

*nat
-A PREROUTING -d 67.162.98.230 -j WANPREROUTING
-A PREROUTING -i vlan2 -d 192.168.1.1/255.255.255.0 -j DROP
-A WANPREROUTING -p icmp -j DNAT --to-destination 192.168.1.1
-A WANPREROUTING -p tcp  --dport 4662 -j DNAT --to-destination 192.168.1.12:4662
...(其他端口转发规则省略)
-A POSTROUTING  -o vlan2 -j MASQUERADE
-A POSTROUTING -o br0 -s 192.168.1.1/255.255.255.0 -d 192.168.1.1/255.255.255.0 -j SNAT --to-source 192.168.1.1
COMMIT
  • 你的理解基本都对:
    • 第2-3行:把指向公网IP的流量跳转到WANPREROUTING链,同时丢弃外网接口进来的、目的是内网网段的数据包(防止外网恶意扫描内网IP);
    • 后续的WANPREROUTING规则就是典型的端口转发(DNAT),把外网特定端口的流量转发到内网对应设备;
    • MASQUERADE就是动态SNAT,替内网设备做地址转换,让它们能通过公网IP访问外网,这是路由器NAT的核心规则。
  • 你疑惑的最后一条规则:
    这条是处理内网同网段设备之间通过路由器转发流量的场景(比如有些内网设备默认把所有流量都发往网关,即使访问同网段设备也不走直接链路)。它会把这类数据包的源IP改成路由器的内网IP(192.168.1.1),这样被访问的内网设备看到的请求源是路由器,而非发起设备的IP。Tomato加这条主要是为了兼容一些特殊内网应用,或者避免同网段转发时的ARP/路由异常。

三、*filter表规则解析

*filter
1  -A INPUT -m state --state INVALID -j DROP
2  -A INPUT -i lo -j ACCEPT
3  -A INPUT -i br0 -j ACCEPT
4  -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT

5  -A FORWARD -i br0 -o br0 -j ACCEPT
6  -A FORWARD -m state --state INVALID -j DROP
7  -A FORWARD -m state --state RELATED,ESTABLISHED -j ACCEPT

12 -A FORWARD -i vlan2 -j wanin
13 -A FORWARD -i br0 -j ACCEPT
14 -A wanin  -p tcp -m tcp -d 192.168.1.12 --dport 4662 -j ACCEPT
...(其他wanin规则省略)
  • 你的1-4行理解正确:丢弃无效状态的入站包,放行回环接口、内网接口的所有入站包,以及已建立/相关连接的回应包。
  • 5-7行的解析:
    • 第5行-A FORWARD -i br0 -o br0 -j ACCEPT:br0是Tomato的内网桥接接口(通常包含有线LAN和无线WiFi),这条是允许同一个桥接接口内的数据包转发,也就是内网设备之间的通信(比如有线电脑和无线手机互传文件),保证内网互通不受限。
    • 第6-7行和INPUT链逻辑一致:丢弃无效的转发包,放行已建立/相关连接的转发包(比如内网设备访问外网后的回应包)。
  • 12-18行的解析:
    • 你的理解没错,12行把外网接口进来的转发包跳转到wanin链,14-18行则是放行那些已经做了DNAT的端口流量(因为nat表做了地址转换后,filter表需要允许这些流量才能真正到达内网设备);
    • 第13行-A FORWARD -i br0 -j ACCEPT:这条是允许所有从内网接口进来的转发流量,也就是内网设备主动访问外网的请求全部放行,这是路由器默认的“内网出外网不受限”规则。

整体来看,你的大部分理解都是正确的,这些规则是Tomato路由器的标准防火墙+NAT配置,迁移到Linux路由器上基本可以直接用,只需要根据你的实际网卡名称(比如把vlan2/br0换成你的外网/内网接口名)调整即可~

备注:内容来源于stack exchange,提问作者Cattus

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.20 07:49:34