mhjdg 发表于 2011-12-16 18:56:05

RouterOS中为什么是SNAT,而不是masquerade

最近在学习iptables,才明白这一点,以下文字复制自官方指南。
=============================================================================
MASQUERADE(伪装)操作。如果我们不知道连接Internet的IP,首选的方法就是使用MASQUERADE,而不是DNAT或SNAT。换句话说,就是如果我们使用PPP或SLIP等连入Internet,由DHCP或其他服务分配IP,使用这个比SNAT好。因为MASQUERADE 不需要预先知道连接Internet的IP,虽然对于计算机来说MASQUERADE要比NAT的负载稍微高一点。
MASQUERADE的作用和SNAT完全一样,只是计算机的负荷稍微多一点。因为对每个匹配的包,MASQUERADE都要查找可用的IP地址,而不象SNAT用的IP地址是配置好的。当然,这也有好处,就是我们可以使用通过PPP、 PPPOE、SLIP等拨号得到的地址,这些地址可是由ISP的DHCP随机分配的。

MASQUERADE是被专门设计用于那些动态获取IP地址的连接的,比如,拨号上网、DHCP连接等。如果你有固定的IP地址,还是用SNAT target吧。
即使你有静态的IP,也可以使用MASQUERADE,而不用SNAT 。不过,这不是被赞成的,因为它会带来额外的开销,而且以后还可能引起矛盾,比如它也许会影响你的脚本,使它们不能用。

==================================================================================
参考:http://www.frozentux.net/iptables-tutorial/cn/iptables-tutorial-cn-1.1.19.html

我明白了,接下来,我该如何更改我的RouterOS呢?
很简单,你应该这样:add chain=srcnat action=src-nat to-addresses=203.171.226.229 out-interface=Public
命令中的解释如下:
Public:外网接口网卡名称
203.171.226.229:公网IP

您可能会产生的疑问:我已经改成SNAT,但是并没有发现性能提升,或者说网速更快?
如上面提到的那样“对每个匹配的包,MASQUERADE都要查找可用的IP地址”,我想,可能因为我们的软路由的处理器(CPU)完全能应付这个操作过程,也就是说,处理器很快就完成了这个
“查找可用的IP地址”的工作,所以我们并没有体验到带来的进步。但是,请再仔细阅读上面的解释,我相信,你能说服自己不再使用masquerade。另外,本人再给你一个采用SNAT的理由:
至少,我们没有发现SNAT后网速变得更慢吧。

我还有疑问?请加群:88815325

seignior 发表于 2011-12-16 19:19:43

木有特定需求并且配置满足的话,其实基本没差别....................反复测试后的结果

host2318 发表于 2011-12-16 20:16:27

seignior 发表于 2011-12-16 19:19 static/image/common/back.gif
木有特定需求并且配置满足的话,其实基本没差别....................反复测试后的结果

serv-u在ROS后面。
Snat日志内可以看到来自公网的IP地址
伪装看不到公网IP,只能看到ROS的LAN口IP。

seignior 发表于 2011-12-16 20:25:27

所以俺大写“木有特定需求”和“配置满足”啊,事情总不会是绝对的,在一个环境下完美解决的方案,到了另外一个环境可能就要变成误人害国,不能一概而论。

seignior 发表于 2011-12-16 20:26:54

seignior 发表于 2011-12-16 20:25 static/image/common/back.gif
所以俺大写“木有特定需求”和“配置满足”啊,事情总不会是绝对的,在一个环境下完美解决的方案,到了另外 ...

所以俺一直很反感那些标注“完美”、“绝对”、“官方”之类的脚本

viruslin 发表于 2011-12-16 21:01:40

我的isp提供的是动态的地址,所以只能用MASQUERADE了
页: [1]
查看完整版本: RouterOS中为什么是SNAT,而不是masquerade