一、普通NAT过程:
采用网络地址转换的方法,可以在使用较少合法IP地址的情况下,让多台主机同时接入Internet。这样在现在依然使用IPv4的情况下,节省大量的宝贵地址。同时,因为在外部网络看来,内部机器时不可见的,这样就为网络增加了一定的安全性。
当发生NAT的时候,主机的数据(IP/端口号/MAC)要替换成网关主机的IP/端口号/MAC。并建立形如下面的一张表------NAT表 ,源IP地址和端口号存储在映射表中,它专门用来跟踪所有的进入和外出包。
当携带有目的端口号的数据报到达网关主机时,网关主机查NAT表,网关就知道需要把数据包转发给内部主机10.41.221.6,而不是10.41.221.7。
NAT好象是工作在网络层和传输层两层,因为在NAT过程中既涉及了IP地址也涉及了端口号,而且NAT打破了网络的独立性 ,因为在网络设计之初就是使网络的层与层之间相互独立,而NAT打破了这种和谐!
一般的资料都认为NAT替换端口号时是随机选择的端口号,但是,实际实验中没有捕捉到一个跟原主机不同的端口,好像始终是一致的,也许我捕捉的时间短,没抓到。有个MVP和CCNA认为MAC没有被替换,实验表明MAC被替换了,MAC是由来完成基本连接用的。
默认情况下,NAT 路由器转换 IP 地址和 TCP/UDP 端口。如果 IP 地址和端口信息只存在于 IP 和 TCP/UDP 标头中,则应用程序协议可以得到正确的转换。
有些程序和协议(如 FTP)将 IP 或 TCP/UDP 端口信息存储在它们自己的标头中。为让这些协议或程序能够通过 NAT 路由器工作,必须有一个打开数据包以转换包含在有效负载中的地址或端口信息的方法。做到这一点需要使用 NAT 编辑器。
Windows 2000 Server 有用于下列协议的 NAT 编辑器:
FTP
ICMP
PPTP
Windows 2000 Server 中不包括用于下列协议的 NAT 编辑器:
SNMP
LDAP
IPSec
Microsoft COM
RPC
H.323
连接的设备可以全面的支持Internet协议,例如超文本传输协议Hypertext Transfer Protocol,简称HTTP)、简单邮件传输协议(Simple Mail Transfer Protocol,简称SMTP)、Internet控制报文协议(Internet Control Message Protocol,简称ICMP)、文件传输协议(File Transfer Protocol,简称FTP)、和点到点隧道协议(Point-to-Point Tunneling Protocol,简称PPTP)。那些不能通过NAT与系统配合的协议,可以使用插件来辅助工作。
NAT 与 IPSec 不兼容
如果在两个终结点之间有任何网络地址转换 (NAT),则 IPSec 不起作用。IPSec 将终结点地址作为有效负载的一部分嵌入。在将数据包发送到电缆上之前进行数据包校验和计算时,IPSec 也使用源地址。NAT 可更改出站数据包的源地址,目标在计算自己的校验和时使用头中的地址。如果数据包中携带的用初始来源计算的校验和与用目标计算的校验和不符,则目标可丢弃这些数据包。不能将 IPSec 用于任何类型的 NAT 设备。
关于DNS代理服务
DNS代理
通过为网络客户端提供DNS服务器的地址,DHCP服务器自动进行Windows CE名字解析。因为一般的家用网络没有DHCP服务器,网关设备在不进行Internet连接的情况下,可以充当DNS服务器。在许多情况下,Internet和公司DNS服务器的地址直到有连接的时候才知道。在这种情况下,可以使用AutoDial建立连接。一旦建立了连接,网关将所有的名字解析请求转发到适当的DNS服务器。如果DNS解析失败,代理将试图使用配置中的下一个DNS服务器。
当网络上有DNS服务器时,DNS代理仍然是有用的。一般情况下,现有的DNS 服务器被配置成把所有的Internet名字解析请求转发到带有静态Internet地址的DNS服务器。如果DNS服务器改变了地址,这个操作将会失败。也可以把现有的DNS服务器配置成将所有的名字解析请求转发到DNS代理,它可以动态的处理任务。如果代理没有找到客户端请求中指定的DNS服务器的IP地址,它将试图使用配置中的下一个服务器。
二、奇妙的实验
ADSL---NAT(2000)----PC
NAT外网IP:219.154.214.150
NAT内网IP:10.41.221.2 255.255.255.0
PC:10.41.222.6 255.255.255.0 DG10.41.221.2
如果直接用这样的设置,PC不能上网,不能PING10.41.221.2
但是,我用SNIFFER抓包发现,当PC请求时,NAT还是做了转发,而且得到了应答。发现了有趣的事:这个应答被转发,目的地址换成了10.41.222.6,是在外网卡上捕捉到的。
忽然突发奇想:如果这个报文被PC得到是不是就可以建立连接呢?继续做实验,把网络结构改一下:
ADSL----HUB----NAT、PC、
NAT(2000)和PC都接HUB,其中NAT的内部和外部网卡都接HUB,这里注意,我没有捆绑TCP/IP中的NETBIOS。
在PC上继续试图上网,不行,有点丧气,不过,仔细分析报文,发现问题出在:目的MAC不一致导致的!精神头又来了,立即修改PC的MAC为局端的MAC,重新启动计算机,用浏览器打开网页没有任何问题,上MSN也没有问题,有意思吧。此时PING10.41.221.2不能得到回应,这个好理解。
显然发送报文走网关经过NAT后可以得到回音,而回应的报文再次被发送出去的时时候,同时被PC接受,通讯就建立了。
有点没想通的是:如果不设置PC的网关,居然MSN依然在线,可以正常使用,而此时网页却无法打开了,显然MSN使用了独特的通讯方式。