SNAT、DNAT、MASQUERADE都是NAT
MASQUERADE是SNAT的特例
所谓DNAT,是指从网卡发送数据包时,通过变更数据包中的目的地IP来访问a,但由于网关正在进行DNAT,所以将访问a的所有数据包的目的地IP都变更为b时,执行
这是因为路由是按照目的地地址选择的,DNAT是在PREROUTING链上进行的,而SNAT是在发送分组时进行的,因此在POSTROUTING链上进行
SNAT是指,当从网卡发送分组时,将分组中的发送源地址部分置换为指定的IP,从而接收端识别为将分组的发送源置换后的IP的主机
MASQUERADE用发送数据的网卡上的IP替换源IP,因此如果IP不是固定的(如拨号或通过dhcp分配IP ),则必须使用MASQUERADE
通过NAT转换将服务暴露到公共网络后,内部网无法通过公共地址访问。 在这种情况下为MASQUERADE
-family:Arial; font-size:14px; line-height:26px”>
MASQUERADE,地址伪装,算是snat中的一种特例,可以实现自动化的snat。
在iptables中有着和SNAT相近的效果,但也有一些区别,但使用SNAT的时候,出口ip的地址范围可以是一个,也可以是多个,例如:
如下命令表示把所有10.8.0.0网段的数据包SNAT成192.168.5.3的ip然后发出去,
iptables-t nat -A POSTROUTING -s 10.8.0.0/255.255.255.0 -o eth0 -j SNAT –to-source192.168.5.3
如下命令表示把所有10.8.0.0网段的数据包SNAT成192.168.5.3/192.168.5.4/192.168.5.5等几个ip然后发出去
iptables-t nat -A POSTROUTING -s 10.8.0.0/255.255.255.0 -o eth0 -j SNAT –to-source192.168.5.3-192.168.5.5
这就是SNAT的使用方法,即可以NAT成一个地址,也可以NAT成多个地址,但是,对于SNAT,不管是几个地址,必须明确的指定要SNAT的ip,假如当前系统用的是ADSL动态拨号方式,那么每次拨号,出口ip192.168.5.3都会改变,而且改变的幅度很大,不一定是192.168.5.3到192.168.5.5范围内的地址,这个时候如果按照现在的方式来配置iptables就会出现问题了,因为每次拨号后,服务器地址都会变化,而iptables规则内的ip是不会随着自动变化的,每次地址变化后都必须手工修改一次iptables,把规则里边的固定ip改成新的ip,这样是非常不好用的。
MASQUERADE就是针对这种场景而设计的,他的作用是,从服务器的网卡上,自动获取当前ip地址来做NAT。
比如下边的命令:
iptables-t nat -A POSTROUTING -s 10.8.0.0/255.255.255.0 -o eth0 -j MASQUERADE
如此配置的话,不用指定SNAT的目标ip了,不管现在eth0的出口获得了怎样的动态ip,MASQUERADE会自动读取eth0现在的ip地址然后做SNAT出去,这样就实现了很好的动态SNAT地址转换。
#RouterOS NAT配置
DNAT:
IP –> Firewall –> NAT –> Add New –>
Enabled True
Chain dstnat
Dst. Address 182.40.111.37
Dst. Port 8080
Action dst-nat
To Addresses 192.168.19.121
To Ports 8080
–> Apply
MASQUERADE:
IP –> Firewall –> NAT –> Add New –>
General:
Enabled True
Chain srcnat
Src. Address 192.168.0.0/16
Protocol tcp
Action:
masquerade
–> Apply