如果我的服务器上有两个 NIC,那么
iptables -t nat -A POSTROUTING -j MASQUERADE
和
iptables -t nat -A POSTROUTING -j MASQUERADE --source 192.168.0.0/24
?
当--source
未指定时,iptables 默认使用什么?
答案1
它是任意地址 0.0.0.0。如果你运行iptables -t nat -L -v -n
,你会看到类似这样的内容:
Chain POSTROUTING (policy ACCEPT 0 packets, 0 bytes)
pkts bytes target prot opt in out source destination
15 923 MASQUERADE all -- * * 0.0.0.0/0 0.0.0.0/0
答案2
系统将遵循常规规则将源地址定义为“最接近”目的地的机器本地地址。实际上,这通常意味着源将是到目的地下一跳的路由的正常源地址。这通常是分配给 NAT 后数据包发出的接口的 IP 地址。
答案3
使用 MASQUERADE 的目的是将源地址修改为其传出接口的地址;如果传出接口具有静态 IP,请使用 SNAT,不要使用 MASQUERADE;它会导致每当接口关闭时所有连接都被忘记,并且本质上适用于具有变化 IP 的任何接口。
如果你想筛选根据数据包的实际来源,你应该-s x.x.x.x/xx
在-j MASQUERADE