网络地址转换NAT

NAT(Network Address Translation,网络地址转换)是1994年提出的。当在专用网内部的一些主机本来已经分配到了本地IP地址(即仅在本专用网内使用的专用地址),但现在又想和因特网上的主机通信(并不需要加密)时,可使用NAT方法。 这种方法需要在专用网连接到因特网的路由器上安装NAT软件。装有NAT软件的路由器叫做NAT路由器,它至少有一个有效的外部全球IP地址。这样,所有使用本地地址的主机在和外界通信时,都要在NAT路由器上将其本地地址转换成全球IP地址,才能和因特网连接。

NAT 原理:出去时,私有地址转换为公有地址,回包时,公有地址转换为私有地址。缓解IP v4不够用的问题。

功能:NAT不仅能解决IP地址不足的问题,而且还能够有效地避免来自网络外部的攻击,隐藏并保护网络内部的计算机。 1.宽带分享:这是 NAT 主机的最大功能。 2.安全防护:NAT 之内的 PC 联机到 Internet 上面时,他所显示的 IP 是 NAT 主机的公共 IP,所以 Client 端的 PC 当然就具有一定程度的安全了,外界在进行 portscan(端口扫描) 的时候,就侦测不到源Client 端的 PC 。

实现的三种方式: 即静态转换Static Nat、动态转换Dynamic Nat和端口地址转换 Port Address Tra Nslation,PAT

优缺点: 优点: 1.节省公有合法IP地址。 2.处理地址重叠。 3.增强灵活性。 4.安全性更可靠。 缺点: 1.延迟增大。 2.配量和维护的复杂性。 3.不支持某些应用,可以通过静态的NAT来避免。

衍生,私网IP包括那些 RFC 1918 为私有网络预留出了三个IP 地址块,如下: A 类:10.0.0.0~10.255.255.255 B 类:172.16.0.0~172.31.255.255 C 类:192.168.0.0~192.168.255.255 上述三个范围内的地址不会在因特网上被分配,因此可以不必向ISP 或注册中心申请而在公司或企业内部自由使用。 虽然NAT可以借助于某些代理服务器来实现,但考虑到运算成本和网络性能,很多时候都是在路由器上来实现的。

NAT实现的三种方式简介和配置。 1.静态转换: 静态NAT,是建立内部本地地址和内部全局地址的一对一永久映射。当外部网络需要通过固定的全局可路由地址访问内部主机,静态NAT就显得十分重要。 (1). 静态Nat配置

Pc的配置 VPCS[1]> ip 192.168.10.2 192.168.10.1 ###内网主机 Checking for duplicate address... PC1 : 192.168.10.2 255.255.255.0 gateway 192.168.10.1 VPCS[2]> ip 192.168.20.2 192.168.20.1 ###外网主机 Checking for duplicate address... PC2 : 192.168.20.2 255.255.255.0 gateway 192.168.20.1

R1的配置(内网路由器) R1(config)#int f0/0 ### 给内网端口配IP R1(config-if)#ip add 192.168.10.1 255.255.255.0 R1(config-if)#no shut R1(config-if)#int f0/1 ###给外网端口配ip R1(config-if)#ip add 192.168.11.2 255.255.255.0 R1(config-if)#no shut

R2的配置 (外网路由器) ###给各个端口配IP R2(config)#int f0/0 R2(config-if)#ip add 192.168.11.1 255.255.255.0 R2(config-if)#no shut R2(config-if)#int f0/1 R2(config-if)#ip add 192.168.20.1 255.255.255.0 R2(config-if)#no shut

建立静态NAT关系语法,一对一的关系 R1上的配置 R1(config)#int f0/1 R1(config-if)#ip nat outside ###定义端口状态,outside 外部端口 R1(config-if)#int f0/0 R1(config-if)#ip nat inside ###定义端口状态,inside 内部端口 R1(config-if)#exit R1(config)#ip nat inside source static 192.168.10.2 192.168.11.2 ###建立映射关系

R1(config)#ip route 0.0.0.0 0.0.0.0 192.168.11.1 ###设置静态路由,不然访问时无法返回

测试:在pc1上测试,可以直接访问外网。 VPCS[1]> ping 192.168.20.2 -t 192.168.20.2 icmp_seq=1 ttl=62 time=105.467 ms 192.168.20.2 icmp_seq=2 ttl=62 time=70.864 ms 192.168.20.2 icmp_seq=3 ttl=62 time=57.642 ms 192.168.20.2 icmp_seq=4 ttl=62 time=30.919 ms 192.168.20.2 icmp_seq=5 ttl=62 time=43.880 ms 192.168.20.2 icmp_seq=6 ttl=62 time=74.532 ms 192.168.20.2 icmp_seq=7 ttl=62 time=77.786 ms 192.168.20.2 icmp_seq=8 ttl=62 time=67.817 ms 192.168.20.2 icmp_seq=9 ttl=62 time=46.807 ms 192.168.20.2 icmp_seq=10 ttl=62 time=39.863 ms 192.168.20.2 icmp_seq=11 ttl=62 time=84.772 ms 192.168.20.2 icmp_seq=12 ttl=62 time=67.640 ms 192.168.20.2 icmp_seq=13 ttl=62 time=39.802 ms 192.168.20.2 icmp_seq=14 ttl=62 time=51.859 ms

查看NAT统计信息 R1#sh ip nat translations Pro Inside global Inside local Outside local Outside global icmp 192.168.11.2:27739 192.168.10.2:27739 192.168.20.2:27739 192.168.20.2:27739 icmp 192.168.11.2:27995 192.168.10.2:27995 192.168.20.2:27995 192.168.20.2:27995 icmp 192.168.11.2:28507 192.168.10.2:28507 192.168.20.2:28507 192.168.20.2:28507

(2)NAT端口映射 端口映射运用到udp和tcp协议 TCP端口及应用 端口 协议 说明 21 FTP FTP服务器所开放的控制端口 23 TELNET 用于运程登录,可以远程控制和管理目标计算机 25 SMTP SMTP服务器开放的端口,用于发送邮件 80 HTTP web,超文本chuans。

               UDP常用的一些端口

端口 协议 说明 69 TFTP 简单文件传输协议 111 RPC 运程过程调用 123 NTP 网络时间协议

这边我们就不重新作图就用上面,其配置都一样,就映射关系命令不同,将其映射命令改成下面的即可 端口映射的命令如下: R1(config)#ip nat inside source static tcp 192.168.10.2 80 192.168.11.2 8080 extendable 如果是tcp协议就加tcp,如果是用到udp协议,中间就用udp。 这样就将192.168.10.2的80端口转换成192.168.11.2的8080端口,在外网访问,192.168.11.2的8080端口时就会映射到192.168.10.2的80 端口。

2.动态NAT(多对多) 是指将内部网络的私有IP地址转换为公用IP地址时,IP地址是不确定的,是随机的,所有被授权访问上Internet的私有IP地址可随机转换为任何指定的合法IP地址。也就是说,只要指定哪些内部地址可以进行转换,以及用哪些合法地址作为外部地址时,就可以进行动态转换。动态转换可以使用多个合法外部地址集。当ISP提供的合法IP地址略少于网络内部的计算机数量时。可以采用动态转换的方式。 下面以实验方式来说配置方法 动态NAT配置,通过动态NAT模式,内网pc能够访问外网pc3

Sw1交互机的配置 sw1(config)#no ip routing R1的配置 R1(config)#int f0/0 ###内部端口配置IP R1(config-if)#ip add 192.168.10.1 255.255.255.0 R1(config-if)#no shut R1(config-if)#int f0/1 ###外部端口配置IP R1(config-if)#ip add 192.168.11.2 255.255.255.0 R1(config-if)#no shut R1(config-if)#int f0/0 R1(config-if)#ip nat inside ###定义内部端口 R1(config-if)#int f0/1 R1(config-if)#ip nat outside ###定义外部端口 R1(config)#ip route 0.0.0.0 0.0.0.0 192.168.11.1 配置默认路由 R2的配置 ###外网路由器配置IP R2(config)#int f0/0 R2(config-if)#ip add 192.168.11.1 255.255.255.0 R2(config-if)#no shut R2(config-if)#int f0/1 R2(config-if)#ip add 192.168.30.1 255.255.255.0 R2(config-if)#no shut 三个pc配置IP VPCS[1]> ip 192.168.10.2 192.168.10.1 ###内网pc配置ip Checking for duplicate address... PC1 : 192.168.10.2 255.255.255.0 gateway 192.168.10.1

VPCS[1]> 2 VPCS[2]> ip 192.168.10.3 192.168.10.1 Checking for duplicate address... PC2 : 192.168.10.3 255.255.255.0 gateway 192.168.10.1

VPCS[2]> 3
VPCS[3]> ip 192.168.30.2 192.168.30.1 ###外网pc配置IP Checking for duplicate address... PC3 : 192.168.30.2 255.255.255.0 gateway 192.168.30.1

动态NAT配置,在R1上设置 定义内部网络中允许访问外部网络的ACL控制列表 R1(config)#access-list 1 permit 192.168.10.0 0.0.0.255 ###需要访问的内部网段,后面接的时反子网掩码,1为序列号 设置地址池 R1(config)#ip nat pool test0 192.168.11.10 192.168.11.30 netmask 255.255.255.0
###test0表示地址池名称,表示地址池的IP网段间范围,后面是子网掩码 实现网络地址转换 R1(config)#ip nat inside source list 1 pool test0

测试: VPCS[1]> ping 192.168.30.2 192.168.30.2 icmp_seq=1 timeout 192.168.30.2 icmp_seq=2 ttl=62 time=102.470 ms 192.168.30.2 icmp_seq=3 ttl=62 time=82.810 ms 192.168.30.2 icmp_seq=4 ttl=62 time=72.518 ms 192.168.30.2 icmp_seq=5 ttl=62 time=56.579 ms

VPCS[1]> 2 VPCS[2]> ping 192.168.30.2 192.168.30.2 icmp_seq=1 timeout 192.168.30.2 icmp_seq=2 ttl=62 time=52.858 ms 192.168.30.2 icmp_seq=3 ttl=62 time=44.620 ms 192.168.30.2 icmp_seq=4 ttl=62 time=44.615 ms 192.168.30.2 icmp_seq=5 ttl=62 time=62.830 ms

R1#sh ip nat translations 查看映射关系表 Pro Inside global Inside local Outside local Outside global --- 192.168.11.10 192.168.10.2 --- --- icmp 192.168.11.11:34234 192.168.10.3:34234 192.168.30.2:34234 192.168.30.2:34234 icmp 192.168.11.11:34746 192.168.10.3:34746 192.168.30.2:34746 192.168.30.2:34746 icmp 192.168.11.11:35002 192.168.10.3:35002 192.168.30.2:35002 192.168.30.2:35002

3.端口多路复用(Port address Translation,PAT) (多对1) 是指改变外出数据包的源端口并进行端口转换,即端口地址转换(PAT,Port Address Translation).采用端口多路复用方式。内部网络的所有主机均可共享一个合法外部IP地址实现对Internet的访问,从而可以最大限度地节约IP地址资源。同时,又可隐藏网络内部的所有主机,有效避免来自internet的攻击。因此,目前网络中应用最多的就是端口多路复用方式。(说白了就是外部映射的地址可以反复使用)

配置如下: (1)使用外部全局地址 我们还用上面的图,基本配置一样的。只是NAT配置有点不同。 PAT的配置在R1上操作。 R1(config)#int f0/0 ###定义内部端口 R1(config-if)#ip nat inside R1(config-if)#int f0/1 ###定义外部端口 R1(config-if)#ip nat outside R1(config-if)#exit R1(config)#access-list 1 permit 192.168.10.0 0.0.0.255 ###设置允许访问外部网络的ACL R1(config)#ip nat pool test0 192.168.11.2 192.168.11.2 netmask 255.255.255.0 ###定义合法的IP地址池,这边我们只用一个IP地址。 R1(config)#ip nat inside source list 1 pool test0 overload ###加个overload,复用,意思是各个内部IP都可以用地址池里的IP

测试 VPCS[1]> ping 192.168.30.2 192.168.30.2 icmp_seq=1 timeout 192.168.30.2 icmp_seq=2 timeout 192.168.30.2 icmp_seq=3 ttl=62 time=140.374 ms 192.168.30.2 icmp_seq=4 ttl=62 time=156.359 ms 192.168.30.2 icmp_seq=5 ttl=62 time=109.123 ms

VPCS[1]> 2 VPCS[2]> ping 192.168.30.2 192.168.30.2 icmp_seq=1 ttl=62 time=94.067 ms 192.168.30.2 icmp_seq=2 ttl=62 time=78.242 ms 192.168.30.2 icmp_seq=3 ttl=62 time=109.294 ms 192.168.30.2 icmp_seq=4 ttl=62 time=124.984 ms 192.168.30.2 icmp_seq=5 ttl=62 time=78.103 ms

(3)复用路由器外部接口地址 基本配置一样,NAT配置不一样。 R1(config)#access-list 1 permit 192.168.10.0 0.0.0.255 ###定义访问控制列表 R1(config)#ip nat inside source list 1 interface FastEthernet 0/1 overload ###这边 interface FastEthernet 0/1 是指定外部端口反复使用 测试: PCS[2]> ping 192.168.30.2 192.168.30.2 icmp_seq=1 timeout 192.168.30.2 icmp_seq=2 ttl=62 time=109.401 ms 192.168.30.2 icmp_seq=3 ttl=62 time=93.569 ms 192.168.30.2 icmp_seq=4 ttl=62 time=78.084 ms 192.168.30.2 icmp_seq=5 ttl=62 time=93.945 ms

总结:NAT的模式,PAT最常用,其可以最大节省IP地址。在做实验时,定义内部和外部端口一定要看仔细了,不要弄反了,静态路由也不要忘了设了,不然数据内出去,回不来,访问外网也会失败的。