NAT

9 Aug

NAT(Network Address Translation网络地址翻译)将内部网络私有地址翻译成Internet上合法的IP地址。NAT可以节省IP地址资源(主要节省IPv4地址)。还可以将内部网络的IP地址隐藏起来不被外界发现,有效地确保内部网络的安全(但网络内主机比较多时,安全性方面更推荐防火墙,因为用NAT路由占用的CPU资源比较多)。还可以为内部网络提供一致性的编址方案。

NAT术语:

内部本地Inside Local:私有IP,不能直接用于互联网,如10.0.0.1

内部全局Inside Global:经由NAT路由器将内部本地IP地址转换成互联网上的合法地址,如172.2.2.2

外部全局Outside Global:外部网络中的主机的IP地址,通常来自全局可路由的地址空间,如22.2.2.2。多数情况下该地址与外部全局地址相同。

外部本地Outside Local:内部网络中看到Internet上外部主机的IP,如22.2.2.2

NAT路由器一边连接内网,一边连接外网的话,两边就分别是Inside/Outside。Inside这边的是local地址。Outside这边的是Global地址。从Inside进来到Outside出去,是先路由再做NAT转换。从Outside进来到Inside出去,是先做NAT转换再路由。

NAT类型:

静态NAT:手动建立内部IP到外部IP的映射。例如企业内部设备(如企业内部E-mail服务器或FTP服务器等)需要被外部访问时

动态NAT:将一个内部IP转成一组外部IP池中的一个IP地址。当PC有一个向外的连接请求时,从地址池中取出一个IP,当连接断开时将IP重新放回池中。但外部用户不能访问内部特定地址。例如企业内部共用多个公网IP供员工访问外网

超载NAT:动态NAT的一种特殊形式,也称为PAT,NAPT,或端口复用NAT。用不同端口号将多个内部IP转成一个外部IP。例如整个企业共用一个公网IP时。局域网共享上网。超载NAT对于节省IP地址是最为有效的。

(可以这样理解映射关系:静态1对1,动态多对多,超载多对1)

配置静态NAT:

20160210175256817

PC要去访问外部Server。配置一条静态NAT,使得PC访问外网时,PC的IP地址(3.3.3.1)不直接暴露给外网,而是经由NAT转换成 12.1.1.1去访问外网。同样外网想访问PC时,外网只知道12.1.1.1这个IP地址,经NAT转换成内网PC的IP地址后,才能访问PC。

20160210180717464

配置好静态NAT的1对1映射关系后,查看NAT映射表项:

20160210181710592

NAT路由器上打开debug,让PC去ping 2.2.2.2 source 3.3.3.1,观察NAT转换过程:

20160210181507951

反过来,外部Server去ping 12.1.1.1 source 2.2.2.2访问PC,NAT转换过程是上面的逆过程:

20160210181917968

配置动态NAT:

拓扑图上就一台PC,假设有多台PC连接NAT路由器访问外网,可以在NAT路由器上配一个地址池,范围是12.1.1.16-12.1.1.31。Inside端多台PC访问外网时,由NAT路由器从地址池中分配一个IP供PC使用:

20160210184322790

假设有4台PC分别去访问外网:ping 2.2.2.2 source 3.3.0.1 / 3.3.1.1 / 3.3.2.1 / 3.3.3.1。打开NAT路由器的debug,观察地址分配及地址转换过程:

20160210185007761

可以看到不同的PC(不同的源IP地址)被从地址池中分配了不同的公网IP地址。查看动态NAT的转换列表:

20160210185244168

被动态分配的外网IP地址是有timeout时间的,超时地址将回到地址池。

20160210185610560

最后,如果动态NAT地址池中没有足够的地址,会出现提示NAT转换失败,并丢弃数据包。

配置超载NAT / PAT / NAPT / 端口复用NAT:

是一种特殊的动态NAT,地址池中只有一个地址,靠端口号来区分源地址:

20160210193300390

假设有2台PC分别去访问外网:ping 2.2.2.2 source 3.3.0.1 / 3.3.1.1。打开NAT路由器的debug,观察地址分配及地址转换过程:

20160210193631045

发现2台PC的IP地址都被转换成同一个外网IP地址12.1.1.16。查看NAT表项,发现转换的地址都一样的,但端口号不同:

20160210194333565

Leave a Reply

Your email address will not be published. Required fields are marked *