如何使 iptables NAT 所有数据包(除那些目标地址来自 192.168.254.0/24 子网的数据包之外)?
答案1
如果我理解正确的话,使用带否定的选项应该相当容易-d
。例如,像这样的规则:
$ iptables -A POSTROUTING ! -d 192.168.254.0/24 -j SNAT --to-source new_source_ip
当然,您可以根据需要更改规则。这将更改发往除指定子网之外的任何目的地的所有数据包的源 IP。
答案2
在我看来,按照以下顺序执行 iptables 命令是可行的:
1. iptables -t nat -A POSTROUTING -s 192.168.254.0/24 -o eth0 -j RETURN
2. iptables -t nat -A POSTROUTING -s 0.0.0.0/0 -o eth0 -j MASQUERADE
规则 1 将匹配您的网络,并且不会对其进行伪装。规则 2 将伪装所有网络,但通常不建议使用 0.0.0.0 通配符(我甚至不确定它是否会起作用)。您应该有选择地添加所有要伪装的网络,其余网络将不会被伪装。