|
.在学习iptables时,我遇到一个问题,很多资料在解释NAT时,一般把SNAT,DNAT分开讲。
如果我们想把一个私有局域网络(ip网络地址192.168.x.x/24这样的地址),通过NAT实现都能上网(当然,有一个公网ip,也仅有一个公网ip,就是NAT服务器的ip地址),实现SNAT很容易做到:
/sbin/iptables -t nat -A POSTROUTING -o eth1 -s 192.168.1.0/24 -j MASQUERADE
或者:/sbin/iptables -t nat -A POSTROUTING -o eth0 -j SNAT --to-source xx.xx.xx.xx
也就是局域网内往外发送数据包很容易,改变源ip成为公网ip就好了,
问题在于,外网发送给内网的数据包如何区分呢?并且内网可能有好几台机子,包括防火墙本身,如何知道数据包是发送给哪台机子的?
有这样一个解释:
SNAT改变包的源地址,这在极大程度上可以隐藏你的本地网络或者DMZ等。一个很好的例子是我们知道防火墙的外部地址,但必须用这个地址替换本地网络地址。有了这个操作,防火墙就能自动地对包做SNAT和De-SNAT(就是反向的SNAT),以使LAN能连接到Internet。
怎么理解?
==========================================
nat 表
此表仅用于NAT,也就是转换包的源或目标地址。注意,就象我们前面说过的,只有流的第一个包会被这个链匹配,其后的包会自动被做相同的处理。实际的操作分为以下几类:
*
DNAT
*
SNAT
*
MASQUERADE
DNAT操作主要用在这样一种情况,你有一个合法的IP地址,要把对防火墙的访问重定向到其他的机子上(比如DMZ)。也就是说,我们改变的是目的地址,以使包能重路由到某台主机。
SNAT改变包的源地址,这在极大程度上可以隐藏你的本地网络或者DMZ等。一个很好的例子是我们知道防火墙的外部地址,但必须用这个地址替换本地网络地址。有了这个操作,防火墙就能自动地对包做SNAT和De-SNAT(就是反向的SNAT),以使LAN能连接到Internet。如果使用类似 192.168.0.0/24这样的地址,是不会从Internet得到任何回应的。因为IANA定义这些网络(还有其他的)为私有的,只能用于LAN内部。
MASQUERADE的作用和MASQUERADE完全一样,只是计算机的负荷稍微多一点。因为对每个匹配的包,MASQUERADE都要查找可用的IP地址,而不象SNAT用的IP地址是配置好的。当然,这也有好处,就是我们可以使用通过PPP、 PPPOE、SLIP等拨号得到的地址,这些地址可是由ISP的DHCP随机分配的。 |
|