SNAT 和 Masquerade 之间的区别

SNAT 和 Masquerade 之间的区别

我很困惑 SNAT 和 Masquerade 之间的实际区别是什么?

如果我想在本地网络上共享互联网连接,我应该选择 SNAT 还是 Masquerade?

答案1

目标SNAT要求您为其提供一个 IP 地址以应用于所有传出数据包。目标MASQUERADE允许您为其提供一个接口,该接口上的任何地址都是应用于所有传出数据包的地址。此外,使用 时SNAT,内核的连接跟踪会在接口关闭和恢复时跟踪所有连接;对于目标来说情况并非如此MASQUERADE

好的文档包括Netfilter 网站上的 HOWTOiptables手册页

答案2

SNAT并在链内的表MASQUERADE中执行相同的源 NAT 操作。natPOSTROUTING

差异

  • 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

相关内容