LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 776|回复: 0

NAT的一个思考 --关于iptables

[复制链接]
发表于 2006-9-26 15:21:53 | 显示全部楼层 |阅读模式
.在学习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随机分配的。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表