我很困惑 SNAT 和 Masquerade 之间的实际区别是什么?
如果我想在本地网络上共享互联网连接,我应该选择 SNAT 还是 Masquerade?
答案1
目标SNAT
要求您为其提供一个 IP 地址以应用于所有传出数据包。目标MASQUERADE
允许您为其提供一个接口,该接口上的任何地址都是应用于所有传出数据包的地址。此外,使用 时SNAT
,内核的连接跟踪会在接口关闭和恢复时跟踪所有连接;对于目标来说情况并非如此MASQUERADE
。
好的文档包括Netfilter 网站上的 HOWTO和iptables
手册页。
答案2
SNAT
并在链内的表MASQUERADE
中执行相同的源 NAT 操作。nat
POSTROUTING
差异
MASQUERADE
做不是需要--to-source
,因为它是为了与动态分配的 IP 一起使用而设计的SNAT
作品仅有的使用静态IP,这就是为什么它需要--to-source
MASQUERADE
会产生额外的开销并且速度较慢,SNAT
因为每次MASQUERADE
目标被数据包命中时,它都必须检查要使用的 IP 地址。
笔记MASQUERADE
: VPC 中的 AWS EC2 实例的典型用例,它在 VPC CIDR 内有一个私有 IP(例如10.10.1.0/24
) -10.10.1.100
例如,它还有一个与之关联的公共 IP,以便与 Internet 通信(假设它是在公有子网中),私有 IP 通过它执行 1:1 NAT(AWS 网络基础设施魔法)。公共 IP 可能会在实例电源周期后发生变化 - 停止然后启动(如果不是 EIP),MASQUERADE
在此用例中是更好的选择。
重要提示:仍然可以使用MASQUERADE
具有静态 IP 的目标,只是要注意额外的开销。
参考
答案3
简短回答:使用 SNAT
说明:我刚刚尝试删除我的 raspbian 路由器上的伪装规则(它通过 eth0 与另一个路由器通信,其中接口 IP 地址为 192.168.8.2 并且是静态的),并且互联网共享继续工作。我尝试过的命令是:-
iptables -t nat -D POSTROUTING -o eth0 -j MASQUERADE
iptables -t nat -A POSTROUTING -o eth0 -j SNAT --to-source 192.168.8.2