Ⅰ IPTABLES中SNAT和MASQUERADE的区别

MASQUERADE和SNAT都是用于将内网地址出局时转变为外部地址的方式,但MASQ本质上还是SNAT,只不过特殊一点。
网络出口为动态分配IP时,MASQ是唯一的选择,它先判断当前系统的默认网关,再根据默认网关找到本机对应的出口IP地址,再做SNAT出局。所以理论上来讲,使用MASQ的时候,iptables可以不指定-o的参数。
网络出口为固定IP时,MASQ和SNAT都是可选项,但是推荐使用SNAT。
SNAT不像MASQ管那么多,它比MASQ傻,管理员的意思就是它的意思,它不做判断只做处理。而且,SNAT的时候,iptables要加上-o的参数,否则无论向内网还是外网访问,源地址都是POSTROUTING链里SNAT后面那个地址,不熟悉iptables的人会很崩溃。MASQ和SNAT是没有缓存的,每一个数据包的到达、转换、送出都要靠CPU处理,所以,当出口是固定IP的时候,使用SNAT,既不用考虑出口地址的变化,也不用考虑出口的方向,自然也就更加高效。
所以,MASQ是智能型的SNAT,看起来高级一点,但高级一点也就代表它是多吃多占型的,不是什么时候都适用的。