在 openwrt 中,我已启用配置lan
转发。我的局域网是.当某些电脑 ping 其他网络 IP(例如:192.168.1.15)时,tcpdump 会在 wan 中获取一些本地数据包,这会导致 wan 关闭。 (我的WAN是3G调制解调器)。wan
masq
192.168.100.0/24
openwrt防火墙配置:
config defaults
option syn_flood '1'
option input 'DROP'
option output 'DROP'
option forward 'DROP'
config zone
option name 'lan'
list network 'lan'
option input 'ACCEPT'
option forward 'DROP'
option output 'ACCEPT'
config zone
option name 'cellular'
list network 'cellular'
option input 'DROP'
option forward 'DROP'
option output 'ACCEPT'
option masq '1'
option mtu_fix '1'
config forwarding
option src 'lan'
option dest 'cellular'
当电脑在局域网中执行时:
ping -I 192.168.1.15 114.114.114.114
我可以在 ppp 中捕获一些无效数据包
tcpdump -i 3g-cellular -s 0 -w a.pcap
iptables -t nat -L -v
:
Chain POSTROUTING (policy ACCEPT 119 packets, 7439 bytes)
pkts bytes target prot opt in out source destination
337 24011 zone_wan_postrouting all -- any 3g-cellular anywhere anywhere /* !fw3 */
Chain zone_wan_postrouting
pkts bytes target prot opt in out source destination
337 24011 MASQUERADE all -- any any anywhere anywhere /* !fw3 */
答案1
换句话说,openwrt防火墙似乎只对来自自己局域网的数据包进行NAT。所以该iptables
规则可能对来源有额外的限制。
您可以通过检查iptables
当前防火墙配置生成的所有规则(等等iptables -S
)来验证这一点
作为解决方法,您可以将iptables
NAT 规则直接修改为不使用源过滤器的变体。
我不知道如何更改 openwrt 防火墙配置,以便它生成iptables
您想要的规则。也许 OpenWRT 社区会知道。
编辑
zone_wan_postrouting
现有 OpenWRT 防火墙配置中并非所有数据包最终都会到达 的情况示例:
# iptables -S -t nat
...
-A POSTROUTING -j delegate_postrouting
-A delegate_postrouting -m comment --comment "user chain for postrouting" -j postrouting_rule
-A delegate_postrouting -o br-wan -j zone_wan_postrouting
-A delegate_postrouting -o br-client -j zone_client_postrouting
-A delegate_postrouting -o local-node -j zone_local_node_postrouting
...
-A zone_wan_postrouting -m comment --comment "user chain for postrouting" -j postrouting_wan_rule
-A zone_wan_postrouting -j MASQUERADE
...
正如您所看到的,链POSTROUTING
跳转 ( -j
) 到delegate_postrouting
,在那里它检查数据包是否具有 的传出接口br-wan
,在这种情况下它会跳转到zone_wan_postrouting
,在那里它无条件地伪装该数据包。其他出接口(br-client
, local-node
)转发到不同的链。
所以条件是的出接口br-wan
。很容易添加其他条件,例如某些源或目标范围:
-A delegate_postrouting -o br-wan -s 192.168.100.0/24 -j zone_wan_postrouting
或者甚至更复杂的数据包标记、协议、端口和许多其他内容。
所以实际上没有看着你所有的 iptables 规则,我们都不会知道。也许确实所有数据包都是这样走的,而问题出在其他地方。也许还有一个没有出现在 中的额外条件iptables -L
。也许不会。