SNAT和假面舞会之间的区别


38

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

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

Answers:


41

SNAT目标需要你给它适用于所有外发数据包的IP地址。该MASQUERADE目标可以让你给它的接口,不管地址是接口上是适用于所有的外发数据包的地址。此外,使用时SNAT,内核的连接跟踪将在断开接口并重新启动接口时跟踪所有连接。MASQUERADE目标并非如此。

好的文档包括Netfilter站点iptables手册页HOWTO


2
我在了解SNAT的好处时遇到了麻烦。接口关闭时内核是否跟踪连接为何无关紧要?关于MASQUERADE,netfilter文档说: “但更重要的是,如果链接断开,则将忘记连接(无论如何现在都丢失了),这意味着在使用新IP地址恢复连接时出现的故障更少。” 听起来很合理(尽管有什么小问题?)现在看一下SNAT,跟踪丢失的连接有什么好处?为什么不每次都使用MASQUERADE?
卡尔·G

1
@CarlG,我猜想当来自LAN节点的新传出连接使用与来自同一LAN节点的断开传出连接相同的源端口号时,永久跟踪-j SNAT(与的回收跟踪相反)会出现故障-j MASQUERADE。在那种情况下,我可以想象来自旧的传出连接的传入数据包被发送到该节点,从而混淆了其TCP堆栈。至于-j SNAT的好处,如果NAT框配置了相同的外部IP地址,并且内核不断从旧连接转发数据包而不是用RST答复,该怎么办?
eel ghEEz

例如,如果您有多个IP地址分配给传出接口,并且希望NAT源是其中的一个,则SNAT很有用。
pgoetz

19

基本上SNATMASQUERADE在POSTROUTING链中的nat表中执行与源NAT相同的操作。

差异性

  • MASQUERADE不需要,--to-source因为它可以用于动态分配的IP

  • SNAT 仅适用于静态IP,这就是为什么它具有 --to-source

  • MASQUERADESNAT因为每次MASQUERADE目标都被数据包击中,目标都必须检查要使用的IP地址,所以它具有额外的开销,并且速度较慢。

注意:一个典型的用例MASQUERADE:VPC中的AWS EC2实例,它在VPC CIDR中具有专用IP(例如10.10.1.0/24)-例如10.10.1.100,它也具有公用IP,以便与之通信通过私有IP 1:1 NAT的Internet(假定它在公共子网中)。实例重启后,公用IP可能会更改(如果不是EIP),MASQUERADE在这种情况下,这是一个更好的选择。

重要提示:仍然可以将MASQUERADE目标与静态IP结合使用,只是要注意额外的开销。

参考文献

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.