老规矩先上图。

拓扑

考古笔记13:NAT应用场景_端口复用

作业前分析

        上图拓扑和前面一个章节的实验拓扑基本一致,前面的章节我们使用NAT技术实现内网到Internet(模拟的)的访问;在本实验中我们使用默认路由的形式来实现两边公司的PC对Internet的访问;

        注意: 在本环境中我们模拟了一种情形,两边公司的网络规划地址段一致(IP地址重叠);这种情况在实际的环境中是有很大概率出现的。

IP地址重叠是指两个要互连的位置都使用相同的IP地址方案的情况。这种情况很常见;在公司合并或收购时经常发生。如果没有特别的支持,这两个位置将无法彼此连接并建立会话。重叠的 IP 地址可能是分配给其他公司的公用地址、分配给其他公司的专用地址,也可能是 RFC 1918 所定义的专用地址范围中的一个。 

专用 IP 地址不可路由,需要进行 NAT 转换才能与外界连接。解决方案包括拦截从外部到内部的域名系统 (DNS) 名称查询响应、设置外部地址转换,以及在将 DNS 响应转发到内部主机之前修复该响应。NAT 设备的两端都需要一个 DNS 服务器,以满足用户在两个网络之间进行连接的需求。

         Tips:我这里给出口路由器分配的公网IP段是30,只有2个Host地址;这种情况能做NAT吗?大家可以思考下。

        在动手配置前,我们先厘清操作思路:

         1.首先我们在两边的交换机SW1和SW2上配置好上行端口的IP以及vlan设定。

         2.交换机SW1和SW2上配置默认路由下一跳是对应出口路由器的f0/0端口IP地址。

         3.在3个路由其上配置好端口IP

         ——其中R2代表ISP内部网络,放在ISP的机房,作为企业网络管理人员无需关心

         ——R1和R3绝大多数放在各接入企业的机房,但管理权限归ISP所有,只是连接企业内部的端口需要企业的IT管理员提供内网的IP地址(当然也有可能这个地址也是ISP提供的公网IP);由ISP配置接入的路由器中。

         4.在R1/R2/R3上起路由协议(ISP一般起动态路由协议,我们实验环境起静态页可以):

        保证至少R1 f0/1 <---------> R3 f0/1互相连通。

         5.配置到这里唯一的问题就是:

考古笔记13:NAT应用场景_PAT_02

对于图中不通的红线部分;

根本原因是对应的目标设备上没有到源地址的路由;ICMP的回包回不去。

对于接入点POP的路由器上(R1/R3)可以通过指定静态路由(内网网段)的方式解决。

对于ISP的路由器(R3)肯定不能以任何形式出现内网网段的路由来解决;那么就需要在POP的路由器上为源地址的发出的数据包或者发给源地址的数据包进行NAT转换。

例如:当PC-1发出的包经过R1的f0/1端口将包的源地址由192.168.10.10修改为10.10.10.1


至此,大家应该已经可以看到路由器端(也就是逻辑上的ISP维护端)已全部打通;

       但是,这个时候我们会发下另一个问题:

       PC1或者PC3(PC2因为在R1上未配置到192.168.20.2/24网段的路由与PC1和PC3不同,这里暂不讨论);最多只能访问到接入路由器的出口分别是R1的f0/1和R3的f0/1。

       实际上我们再现实的企业网中在内网(PC1和PC3所在的网络)机器是可以ping通ISP的路由的(部分);要实现这一点,我们有2中方法:

       1.在R2(代表ISP内部所有路由器)上增加到企业内网所有网段(PC1-PC3所在的192.168.10.0/24、192.168.20.0/24)的路由条目。

       2.在ISP接入出口(R2)上对内网网段做NAT。

       显然,方法1在现实环境中实现起来根本不现实;且涉及到2家不同的企业极有可能使用的是相同的内网网段那么在ISP路由中就无法完成内网网段的路由表的维护(除非全球的企业内网都使用独一无二不重复的网段,那这样IPv4设计的ABC类地址将失去意义,且IPv4地址不足的问题也就没办法解决);

此时,NAT技术的就可以解决这样的状况。

       接下来,我们就按照不在R2上增加内网路由的形式实现PC1到R2甚至PC3的通讯。

       我们从实际出发,首先需要保证PC-1和PC-3能正常访问internet(R2);这里我们就需要用到NAT中的动态NAT或者端口复用技术(主要是因为实际环

境中内网设备众多),NAT技术的区别前文已经提到:

       Ø静态NAT:唯一的私有IP------映射------唯一的公网IP(映射关系确定,永久保存)
      Ø动态NAT:多个私有IP------映射------多个公网IP(映射关系不确定,向外访问时建立映射关系)
       Ø端口复用:局域网中多个或全部私有IP------映射------1个公网IP(映射关系不确定,向外访问时建立    映射关系)

动手作业

考古笔记13:NAT应用场景_NAT_03


我们在R1上为PC1所在网段指定静态路由:

R1#conf t
Enter configuration commands, one per line.  End with CNTL/Z.
R1(config)#ip route 192.168.10.0 255.255.255.0 f0/0
R1(config)#end
*Mar  1 03:50:55.703: %SYS-5-CONFIG_I: Configured from console by console
R1#wr
Building configuration...
[OK]
R1#show ip route
Codes: C - connected, S - static, R - RIP, M - mobile, B - BGP
       D - EIGRP, EX - EIGRP external, O - OSPF, IA - OSPF inter area
       N1 - OSPF NSSA external type 1, N2 - OSPF NSSA external type 2
       E1 - OSPF external type 1, E2 - OSPF external type 2
       i - IS-IS, su - IS-IS summary, L1 - IS-IS level-1, L2 - IS-IS level-2
       ia - IS-IS inter area, * - candidate default, U - per-user static route
       o - ODR, P - periodic downloaded static route

Gateway of last resort is not set

     20.0.0.0/30 is subnetted, 1 subnets
S       20.10.10.0 is directly connected, FastEthernet0/1
S    192.168.10.0/24 is directly connected, FastEthernet0/0
     10.0.0.0/30 is subnetted, 1 subnets
C       10.10.10.0 is directly connected, FastEthernet0/1
     192.168.100.0/30 is subnetted, 1 subnets
C       192.168.100.0 is directly connected, FastEthernet0/0
R1#


图示当前的状况

考古笔记13:NAT应用场景_端口复用_04

我们在R1上为PC2所在网段指定静态路由:

R1#conf t
Enter configuration commands, one per line.  End with CNTL/Z.
R1(config)#ip route 192.168.20.0 255.255.255.0 192.168.100.2
R1(config)#end
R1#wr
Building configuration...

*Mar  1 00:22:39.843: %SYS-5-CONFIG_I: Configured from console by console[OK]
R1#show ip route
Codes: C - connected, S - static, R - RIP, M - mobile, B - BGP
       D - EIGRP, EX - EIGRP external, O - OSPF, IA - OSPF inter area
       N1 - OSPF NSSA external type 1, N2 - OSPF NSSA external type 2
       E1 - OSPF external type 1, E2 - OSPF external type 2
       i - IS-IS, su - IS-IS summary, L1 - IS-IS level-1, L2 - IS-IS level-2
       ia - IS-IS inter area, * - candidate default, U - per-user static route
       o - ODR, P - periodic downloaded static route

Gateway of last resort is not set

     20.0.0.0/30 is subnetted, 1 subnets
S       20.10.10.0 is directly connected, FastEthernet0/1
S    192.168.10.0/24 is directly connected, FastEthernet0/0
S    192.168.20.0/24 [1/0] via 192.168.100.2
     10.0.0.0/30 is subnetted, 1 subnets
C       10.10.10.0 is directly connected, FastEthernet0/1
     192.168.100.0/30 is subnetted, 1 subnets
C       192.168.100.0 is directly connected, FastEthernet0/0
R1#


继续用图解释当前的状况

考古笔记13:NAT应用场景_应用场景_05

进入NAT解决问题的阶段

我们在R1上为PC2做下静态NAT:(行不通,静态NAT不是一对一转换;不能多内网地址转换为同一个公网IP)

R1#conf t
Enter configuration commands, one per line.  End with CNTL/Z.
R1(config)#ip nat inside source static 192.168.20.10 10.10.10.1
% similar static entry (192.168.10.10 -> 10.10.10.1) already exists
R1(config)#

明显看到设备上也不允许这样配置。

换个思路我们做动态NAT:(多对一或者多对多):

1.在配置前我们先把前面配置的静态NAT删除掉:

R1(config)#no ip nat inside source static 192.168.10.10 10.10.10.1
R1(config)#end
R1#wr
Building configuration...
[OK]

*Mar  1 00:51:45.407: %SYS-5-CONFIG_I: Configured from console by consoleR1#
R1#
R1#show ip nat translations

R1#

2.定义访问控制列表,内部本地地址范围

R1#conf t
Enter configuration commands, one per line.  End with CNTL/Z.
R1(config)#access-list 1 permit 192.168.0.0 0.0.255.255
R1(config)#access-list 1 deny 192.168.100.0 0.0.0.3
R1(config)#access-list 1 deny any
R1(config)#

3.定义内部全局地址池(因为我的环境中只有一个地址可用所以开始和结束IP写的是相同的)

R1(config)#ip nat pool test 10.10.10.1 10.10.10.1 netmask 255.255.255.252

4.建立映射关系(在inside端将原地址在List 1中的IP转换为Pool test的IP)

R1(config)#ip nat inside source list 1 pool test

5.区分inside和outside

R1(config)#inter f0/0
R1(config-if)#ip nat inside       #定义内部网络接口 
R1(config-if)#exit
R1(config)#inter f0/1
R1(config-if)#ip nat outside       #定义外部网络接口 
R1(config-if)#end
R1#


6.别忘了保存配置

R1#write
Building configuration...
[OK]
R1#

7.查看NAT转换表(在动态NAT中,只有在实际产生数据包的情况下才会开始转换,因此在首次访问前转换表是空的)

R1#show ip nat translations
R1#


验证下当前状况

考古笔记13:NAT应用场景_PAT_06


考古笔记13:NAT应用场景_NAT_07

8.我们尝试用PC2测试访问R2和R3

考古笔记13:NAT应用场景_端口复用_08


这样大家应该可以很明显的看到

——静态NAT

——动态NAT

分别应对的场景和局限性。

目前状况

考古笔记13:NAT应用场景_应用场景_09

这样问题还是没有得到彻底解决:

尝试使用端口复用

实际上就是在动态NAT的命令后面加个overload参数

 Overload:它的意思为过载,正因为配置了overload,才能实现接口复用。

##也被称之为PAT

1.检查当前的NAT配置

R1#show run | include ip nat
 ip nat inside
 ip nat outside
ip nat pool test 10.10.10.1 10.10.10.1 netmask 255.255.255.252
ip nat inside source list 1 pool test
R1#show run | include test
ip nat pool test 10.10.10.1 10.10.10.1 netmask 255.255.255.252
ip nat inside source list 1 pool test
R1#

2.尝试修改动态NAT配置为端口复用(PAT)

R1(config)#ip nat inside source list 1 pool test overload
%Dynamic mapping in use, cannot change
R1(config)#

直接修改会被告知:动态NAT正在使用中无法改变

3.先删除原来的配置

R1(config)#ip nat inside source list 1 ?
  interface  Specify interface for global address
  pool       Name pool of global addresses


#我们这里还是按照池的方式查看帮助;overload参数可以理解为复用。
R1(config)#ip nat inside source list 1 pool test ?
  mapping-id  Associate a mapping id to this mapping
  oer         Use with vtemplate only.  On new translation, if OER BR is UP,
              OER will select IP from outgoing Interface.  All packets matching
              translation are forwarded over Interface for duration of
              translation.
  overload    Overload an address translation
  reversible  Allow out->in traffic
  vrf         Specify vrf
  <cr>

R1(config)#no ip nat inside source list 1 pool test
#直接删除会被告知:动态NAT正在使用中无法删除。
Dynamic mapping in use, do you want to delete all entries? [no]:
%Error: Dynamic mapping in use, cannot remove
R1(config)#end
R1#
*Mar  1 03:07:41.547: %SYS-5-CONFIG_I: Configured from console by console
R1#clear ip nat translation *   #清空转换表后可以正常删除。
R1#conf t
Enter configuration commands, one per line.  End with CNTL/Z.
R1(config)#no ip nat inside source list 1 pool test
R1(config)#
R1(config)#ip nat inside source list 1 pool test overload    #这里也可以写成:R1(config)#ip nat inside source list interface f0/1 overload
R1(config)#end

4.配置好端口复用(PAT);原来设置过的inside和outside端口因为没有修改我这里就不再重新设定了

5.记得保存设定

R1#wr
Building configuration...
[OK]
R1#

6.确认NAT配置

R1#show run | include ip nat
 ip nat inside
 ip nat outside
ip nat pool test 10.10.10.1 10.10.10.1 netmask 255.255.255.252
ip nat inside source list 1 pool test overload
R1#show run | include access-list
access-list 1 permit 192.168.0.0 0.0.255.255
access-list 1 deny   192.168.100.0 0.0.0.3
access-list 1 deny   any
R1#

7.查看NAT转换表

R1#show ip nat translations


验证下当前状况

考古笔记13:NAT应用场景_PAT_10

继续用拓扑描述当前状况

考古笔记13:NAT应用场景_PAT_11

总个小节

这样大家应该可以很明显的看到

——静态NAT

——动态NAT

分别应对的场景和局限性。以及动态NAT+端口复用的用途。

接下来,我们考虑另外一个场景:

右边的PC4换成一台服务器Server001需要通过internet访问;用技术场景来描述就是:

需要在R1上telnet 访问Server001.

我们该如何实现呢;因为服务器是服务方,所以这个映射出来的地址至少应该是静态的(否则作为Client端如何确定要访问的目标呢);因此只有:

——静态NAT

可以满足需求;但静态NAT的缺点是明显的,当我的公网IP不够时(例如我有多台类似Server001的服务器),该怎么办?

——静态NAT+端口复用

这里的端口复用可不是仅仅加个overload参数就搞定的事了。

静态NAT+端口复用的配置需要事先准备:

——服务器内网地址和端口号

——被映射的目标公网IP地址和端口号(可以跟服务器使用的端口号不同)

具体的配置可以参考前面的 “网络地址转换NAT(3)-设定环节”部分。


好了,今天就考古到这里吧。