CCNP路由实验之十五 NAT(网络地址转换)

时间:2022-04-23 10:50:39


CCNP路由实验之十五 NAT(网络地址转换)

众所周知,要让自己的电脑连上Internet,必须要到运营商(ISP)申请一个上网账号,依据此账号申请自己的宽频业务(拨号上网、商业固定IP等等),当你完毕申请后。就能够通过拨号拿到一个全域唯一的公网IP,又或者直接是一个商业宽频的固定IP。(注意,事实上ISP是把公网IP租给用户的。当用户不租时他们能够租给其它电脑,以提高公网IP使用率)然后用户通过这个在Internet网络上可被路由的合法IP地址,与Internet上其它的用户或服务进行通信,事实上这个公网IP就是实现你能够找到别人,别人也能够找到你的目的。相当于你的网络身份证。

显然,一个公网IP仅仅有一台主机能上网。可是全球这么多计算机要上互联网,就要一机一个公网IP,此时就会导致IPv4地址空间的短缺,同一时候对于家庭和小型办公室来讲申请多个公网IP地址的代价是非常高的。也是不现实的。

而长远的解决方法是添加地址空间,也就提出了IPv6方案。可是在IPv6开发和普及期间的过渡方法就是NAT 即网络地址转换,也叫做网络掩蔽或者IP掩蔽。NAT是作为一种解决IPv4地址短缺以避免保留IP地址困难的方案而流行起来的。

在这个IPv4与IPv6长期共存的时期。NAT成为了一种广泛应用的技术。

NAT是在IP封包通过路由器防火墙时重写源IP地址或目的IP地址的技术,这样的技术使得在私有网络中有多台主机但仅仅通过一个或几个公网IP地址訪问因特网成为可能。

提示:在平时我们自己组建的局域网中都是使用私有IP地址进行彼此通信的,比如

A类:10.0.0.0-10.255.255.255(长度相当于1个A类IP地址)

B类:172.16.0.0-172.31.255.255(长度相当于16个连续的B类IP地址)

C类:192.168.0.0-192.168.255.255(长度相当于256个连续的C类IP地址)

这些地址是不会被互联网分配使用的,因此它们在互联网上也从来不会被路由的。同一时候我们能够不必向ISP 或注冊中心申请而在公司或企业内部*使用,尽管这些私有IP地址它们不能直接和互联网连接,但他们却能帮我们组建自己的内部网络,在内部局域网中将这些地址当作公用IP地址一样使用与局域网内部的其它主机设备进行通信。

NAT转换方法

  1. Full cone NAT又叫全然锥形 NAT。一旦一个内部地址(iAddr:port1)映射到外部地址(eAddr:port2),全部发自iAddr:port1的包都经由eAddr:port2向外发送。

    随意外部主机都能通过给eAddr:port2发包到达iAddr:port1。事实上静态一对一NAT就是Full cone NAT,它的穿透性最好

  2. Address-Restricted cone NAT又叫限制锥形 NAT,它受IP限制。即仅仅接收以前发送到对端的IP地址来的数据包。一旦一个内部地址(iAddr:port1)映射到外部地址(eAddr:port2)。全部发自iAddr:port1的包都经由eAddr:port2向外发送。随意外部主机(hostAddr:any)都能通过给eAddr:port2发包到达iAddr:port1的前提是:iAddr:port1之前发送过包到hostAddr:any."any"也就是说port不受限制。事实上动态地址转换就是限制锥形 NAT

  3. Port-Restricted cone NAT相似受限制锥形NAT(Restricted cone NAT),可是还有port限制。一旦一个内部地址(iAddr:port1)映射到外部地址(eAddr:port2),全部发自iAddr:port1的包都经由eAddr:port2向外发送。一个外部主机(hostAddr:port3)能够发包到达iAddr:port1的前提是:iAddr:port1之前发送过包到hostAddr:port3.事实上就是port多路复用NAT

  4. Symmetric NAT(对称NAT)每一个来自同样内部IP与port的请求到一个特定目的地的IP地址和port,映射到一个独特的外部来源的IP地址和port。同一个内部主机发出一个信息包到不同的目的端,不同的映射使用外部主机收到了一封包从一个内部主机能够送一封包回来

事实上锥形NAT就是指:仅仅要是从同一个内部地址和port出来的包。无论目的地址是否同样,NAT 都将它转换成同一个外部地址和port。

NAT的原理

  1. 私有内部网络的client端将IP的网关个)就可以实现私有地址网络内全部计算机与Internet的通信需求。

    NAT将自己主动改动IP报文的源IP地址和目的IP地址。Ip地址校验则在NAT处理过程中自己主动完毕。有些应用程序将源IP地址嵌入到IP报文的数据部分中,所以还须要同一时候对报文的数据部分进行改动。以匹配IP头中已经改动过的源IP地址。

    否则,在报文数据部分嵌入IP地址的应用程序就不能正常工作。

    NAT功能

    1. NAT不仅能攻克了lP地址不足的问题,并且还能够有效地避免来自网络外部的攻击,隐藏并保护网络内部的计算机。

    2. 宽带分享:这是 NAT 主机的最大功能。

    3. 安全防护:NAT 之内的 PC 联机到 Internet 上面时。他所显示的 IP 是 NAT 主机的公共 IP,所以 Client 端的 PC 当然就具有一定程度的安全了,外界在进行 portscan(port扫描)种类型:
      1>从inside到outside时转换源地址
      2>从inside到outside时转换目标地址
      3>从outside到inside时转换源地址
      4>从outside到inside时转换目标地址
      当中1和4互相隐含,2和3互相隐含

      实验一、静态一对一的NAT

      CCNP路由实验之十五 NAT(网络地址转换)

      PC配置:

      PC#conf t

      PC(config)#no ip routing

      PC(config)#ip default-gateway 192.168.0.1

      PC(config)#int fa0/0

      PC(config-if)#ip add 192.168.0.100 255.255.255.0

      PC(config-if)#no sh

      PC(config-if)#exit

      Server配置:

      Server#conf t

      Server(config)#no ip routing

      Server(config)#ip default-gateway 192.168.0.1

      Server(config)#int fa0/0

      Server(config-if)#ip add 192.168.0.80 255.255.255.0

      Server(config-if)#no sh

      Server(config-if)#exit

      Internet配置:

      Internet#conf t

      Internet(config)#int fa0/0

      Internet(config-if)#ip add 202.100.100.100 255.255.255.0

      Internet(config-if)#no sh

      Internet(config-if)#exit

      R1配置:

      R1#conf t

      R1(config-if)#ip add 192.168.0.1 255.255.255.0

      R1(config-if)#ip nat inside //指定连接内部网络的内部接口,并启用NAT

      R1(config-if)#no sh

      R1(config-if)#exit

      R1(config)#int fa0/1

      R1(config-if)#ip add 202.100.100.1 255.255.255.0

      R1(config-if)#ip nat outside //指定连接外部网络的外部接口。并启用NAT

      R1(config-if)#no sh

      R1(config-if)#exit

      R1(config)#ip nat inside source static 192.168.0.80202.100.100.80//指定内部源地址192.168.0.80静态一对一转换为202.100.100.80。

      当然能够设置转换为外部接口的IP:202.100.100.1,可是这样外部网络訪问202.100.100.1的时候就全部转向訪问Server了。假设内部网络不要求上网或没有其它服务时能够这样做。否则会影响内部网络的使用。

      所以不推荐

      測试检查:

      PC#ping 202.100.100.100 //PC没有转换

      Type escape sequence to abort.

      Sending 5, 100-byte ICMP Echos to 202.100.100.100,timeout is 2 seconds:

      .....

      Success rate is 0 percent (0/5)

      Server#ping 202.100.100.100 //Server直接訪问外部Internet

      Type escape sequence to abort.

      Sending 5, 100-byte ICMP Echos to 202.100.100.100,timeout is 2 seconds:

      .!!!!

      Success rate is 80 percent (4/5), round-trip min/avg/max= 28/70/124 ms

      Internet#ping 202.100.100.80 //Internet直接通过公网IP訪问内部Server

      Type escape sequence to abort.

      Sending 5, 100-byte ICMP Echos to 202.100.100.80, timeoutis 2 seconds:

      !!!!!

      Success rate is 100 percent (5/5), round-trip min/avg/max= 28/77/152 ms

      PC#ping 202.100.100.80 //PC能够通过公网IP訪问内部server

      Type escape sequence to abort.

      Sending 5, 100-byte ICMP Echos to 202.100.100.80, timeoutis 2 seconds:

      !!!!!

      Success rate is 100 percent (5/5), round-trip min/avg/max= 8/39/140 ms

      R1#debug ip nat  //在R1调试转换信息,对于ICMP包,NAT通过更改ICMP的ID,来实现多对少的映射

      IP NAT debugging is on

      *Mar  100:12:25.683: NAT*: s=192.168.0.80->202.100.100.80, d=202.100.100.100 [0]

      *Mar  100:12:26.655: NAT*: s=192.168.0.80->202.100.100.80, d=202.100.100.100 [1]

      *Mar  100:12:26.751: NAT*: s=202.100.100.100, d=202.100.100.80->192.168.0.80 [1]

      *Mar  100:12:26.815: NAT*: s=192.168.0.80->202.100.100.80, d=202.100.100.100 [2]

      R1#sh ip nat translations //查看转换状态

      Pro Inside global     Inside local       Outsidelocal      Outside global

      icmp 202.100.100.80:1 192.168.0.80:1    202.100.100.100:1 202.100.100.100:1

      --- 202.100.100.80    192.168.0.80       ---                ---

       

      实验二、动态NAT

      CCNP路由实验之十五 NAT(网络地址转换)

      PC1配置:

      PC1#conf t

      PC1(config)#no ip routing

      PC1(config)#ip default-gateway 192.168.0.1

      PC1(config)#int fa0/0

      PC1(config-if)#ip add 192.168.0.100 255.255.255.0

      PC1(config-if)#no sh

      PC1(config-if)#exit

      PC2配置:

      PC2#conf t

      PC2(config)#no ip routing

      PC2(config)#ip default-gateway 192.168.0.1

      PC2(config)#int fa0/0

      PC2(config-if)#ip add 192.168.0.101 255.255.255.0

      PC2(config-if)#no sh

      PC2(config-if)#exit

      PC3配置:

      PC3#conf t

      PC3(config)#no ip routing

      PC3(config)#ip default-gateway 192.168.0.1

      PC3(config)#int fa0/0

      PC3(config-if)#ip add 192.168.0.50 255.255.255.0

      PC3(config-if)#no sh

      PC3(config-if)#exit

      Internet配置:

      Internet#conf t

      Internet(config)#int fa0/0

      Internet(config-if)#ip add 202.100.100.100 255.255.255.0

      Internet(config-if)#no sh

      Internet(config-if)#exit

      R1配置:

      R1#conf t

      R1(config)#int fa0/0

      R1(config-if)#ip add 192.168.0.1 255.255.255.0

      R1(config-if)#ip nat inside

      R1(config-if)#no sh

      R1(config-if)#exit

      R1(config)#int fa0/1

      R1(config-if)#ip add 202.100.100.1 255.255.255.0

      R1(config-if)#ip nat outside

      R1(config-if)#no sh

      R1(config-if)#exit

      R1(config)#ip access-list standard nat//定义能够进行转换的内部地址范围

      R1(config-std-nacl)#10 permit 192.168.0.0 0.0.0.255

      R1(config-std-nacl)#20 deny any

      R1(config-std-nacl)#exit

      R1(config)#ip nat pool global-pool 202.100.100.2202.100.100.3 netmask 255.255.255.0//创建仅仅有两个公网IP的地址池。

      R1(config)#ip nat inside source list nat pool global-pool//创建动态转换将符合ACL的内部地址随机转换成公网IP地址池中的一个。动态NAT是暂时映射关系。过一段时间没实用就会删除映射关系,释放公网IP。

      注意公网IP地址池有几个IP,那么同一时间仅仅能有几台电脑能够上网,其它电脑要上网必须等暂时映射关系结束才干使用被释放的公网IP再进行转换

      R1(config)#ip nat translation timeout 10 //配置动态NAT的超时时间为10s,默觉得24小时,即空暇10s没实用。就删除暂时映射关系。

      方便測试

      检查測试:

      PC1#ping 202.100.100.100 //PC1是第一个转换的,从公网IP池中能够取得一个公网进行转换,能够上网

      Type escape sequence to abort.

      Sending 5, 100-byte ICMP Echos to 202.100.100.100,timeout is 2 seconds:

      ..!!!

      Success rate is 60 percent (3/5), round-trip min/avg/max= 28/96/172 ms

      PC2#ping 202.100.100.100 //PC2是第二个转换的,从公网IP池中能够取得第二个公网进行转换,能够上网

      Type escape sequence to abort.

      Sending 5, 100-byte ICMP Echos to 202.100.100.100,timeout is 2 seconds:

      .!!!!

      Success rate is 80 percent (4/5), round-trip min/avg/max= 28/90/148 ms

      PC3#ping 202.100.100.100 r 100 //PC3由于公网IP池中地址耗尽,要等到其它内部用户的NAT暂时映射关系结束。才干使用被释放出来的公网IP进行上网。

      Type escape sequence to abort.

      Sending 50, 100-byte ICMP Echos to 202.100.100.100,timeout is 2 seconds:

      UUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUU!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

      Success rate is 0 percent (50/100)

      R1#debug ip nat

      IP NAT debugging is on

      *Mar  100:42:20.671: NAT*: s=192.168.0.100->202.100.100.2, d=202.100.100.100 [1]

      *Mar  1 00:42:22.795:NAT*: s=202.100.100.100, d=202.100.100.2->192.168.0.100 [2]

      *Mar  100:52:35.259: NAT*: s=192.168.0.101->202.100.100.3, d=202.100.100.100 [5]

      *Mar  100:52:35.367: NAT*: s=202.100.100.100, d=202.100.100.3->192.168.0.101 [5]

      *Mar  101:07:28.083: NAT: translation failed (A), dropping packet s=192.168.0.50d=202.100.100.100 [158] //拒绝

      *Mar  101:07:28.091: NAT: translation failed (A), dropping packet s=192.168.0.50d=202.100.100.100 [159]

      *Mar  101:07:59.007: NAT: expiring 202.100.100.2 (192.168.0.100) icmp 3 (3) //过期结束映射关系,释放公网IP

      *Mar  101:08:01.059: NAT: expiring 202.100.100.3 (192.168.0.101) icmp 2 (2)

      *Mar  101:08:06.463: NAT*: s=192.168.0.50->202.100.100.2, d=202.100.100.100 [160]

      *Mar  101:08:06.579: NAT*: s=202.100.100.100, d=202.100.100.2->192.168.0.50 [160]

      *Mar  101:08:06.659: NAT*: s=192.168.0.50->202.100.100.2, d=202.100.100.100 [161]

      R1#sh access-lists //查看ACL

      Standard IP access list nat

      10 permit192.168.0.0, wildcard bits 0.0.0.255 (303 matches)

      20 deny   any

      R1#sh ip nat translations //注意10s超时后映射关系清空

      Pro Inside global     Inside local       Outsidelocal      Outside global

      icmp 202.100.100.2:4  192.168.0.100:4   202.100.100.100:4 202.100.100.100:4

      --- 202.100.100.2     192.168.0.100      ---                ---

      icmp 202.100.100.3:3  192.168.0.101:3   202.100.100.100:3 202.100.100.100:3

      --- 202.100.100.3     192.168.0.101      ---                ---

       

       

      实验三、port多路复用的NAT

      CCNP路由实验之十五 NAT(网络地址转换)

      PC1配置:

      PC1#conf t

      PC1(config)#no ip routing

      PC1(config)#ip default-gateway 192.168.0.1

      PC1(config)#int fa0/0

      PC1(config-if)#ip add 192.168.0.100 255.255.255.0

      PC1(config-if)#no sh

      PC1(config-if)#exit

      PC2配置:

      PC2#conf t

      PC2(config)#no ip routing

      PC2(config)#ip default-gateway 192.168.0.1

      PC2(config)#int fa0/0

      PC2(config-if)#ip add 192.168.0.101 255.255.255.0

      PC2(config-if)#no sh

      PC2(config-if)#exit

      Internet配置:

      Internet#conf t

      Internet(config)#int fa0/0

      Internet(config-if)#ip add 202.100.100.100 255.255.255.0

      Internet(config-if)#no sh

      Internet(config-if)#exit

      R1配置:

      R1#conf t

      R1(config)#int fa0/0

      R1(config-if)#ip add 192.168.0.1 255.255.255.0

      R1(config-if)#ip nat inside

      R1(config-if)#no sh

      R1(config-if)#exit

      R1(config)#int fa0/1

      R1(config-if)#ip add 202.100.100.1 255.255.255.0

      R1(config-if)#ip nat outside

      R1(config-if)#no sh

      R1(config-if)#exit

      R1(config)#ip access-list standard nat //定义能够进行NAT转换的内部IP范围

      R1(config-std-nacl)#permit 192.168.0.0 0.0.0.255

      R1(config-std-nacl)#deny any

      R1(config-std-nacl)#exit

      R1(config)#ip nat inside source list nat interface fa0/1overload//在外网接口启用port复用NAT转换。转换我们的内部IP

      检查測试:

      PC1#ping 202.100.100.100

      Type escape sequence to abort.

      Sending 5, 100-byte ICMP Echos to 202.100.100.100,timeout is 2 seconds:

      !!!!!

      Success rate is 100 percent (5/5), round-trip min/avg/max= 40/153/372 ms

      PC2#ping 202.100.100.100

      Type escape sequence to abort.

      Sending 5, 100-byte ICMP Echos to 202.100.100.100,timeout is 2 seconds:

      !!!!!

      Success rate is 100 percent (5/5), round-trip min/avg/max= 28/124/388 ms

      R1#debug ip nat

      *Mar  100:15:31.883: NAT*: s=192.168.0.100->202.100.100.1, d=202.100.100.100 [25]

      *Mar  100:15:32.107: NAT*: s=202.100.100.100, d=202.100.100.1->192.168.0.100 [25]

      *Mar  100:16:18.395: NAT*: s=192.168.0.101->202.100.100.1, d=202.100.100.100 [45]

      *Mar  100:16:18.639: NAT*: s=202.100.100.100, d=202.100.100.1->192.168.0.101 [45]

      R1#sh ip nat translations

      Pro Inside global     Inside local       Outsidelocal      Outside global

      icmp 202.100.100.1:4  192.168.0.100:4   202.100.100.100:4 202.100.100.100:4

      icmp 202.100.100.1:5  192.168.0.101:4   202.100.100.100:4 202.100.100.100:5

      R1#sh access-lists

      Standard IP access list nat

      10 permit192.168.0.0, wildcard bits 0.0.0.255 (4 matches)

      20 deny   any

      实验四、动态NATport多路复用

      CCNP路由实验之十五 NAT(网络地址转换)

      PC1配置:

      PC1#conf t

      PC1(config)#no ip routing

      PC1(config)#ip default-gateway 192.168.0.1

      PC1(config)#int fa0/0

      PC1(config-if)#ip add 192.168.0.101 255.255.255.0

      PC1(config-if)#no sh

      PC1(config-if)#exit

      PC2配置:

      PC2#conf t

      PC2(config)#no ip routing

      PC2(config)#ip default-gateway 192.168.0.1

      PC2(config)#int fa0/0

      PC2(config-if)#ip add 192.168.0.102 255.255.255.0

      PC2(config-if)#no sh

      PC2(config-if)#exit

      PC3配置:

      PC3#conf t

      PC3(config)#no ip routing

      PC3(config)#ip default-gateway 192.168.01.

      PC3(config)#ip default-gateway 192.168.0.1

      PC3(config)#int fa0/0

      PC3(config-if)#ip add 192.168.0.103 255.255.255.0

      PC3(config-if)#no sh

      PC3(config-if)#exit

      Internet配置:

      Internet#conf t

      Internet(config)#int fa0/0

      Internet(config-if)#ip add 202.100.100.100 255.255.255.0

      Internet(config-if)#no sh

      Internet(config-if)#exit

      R1配置:

      R1#conf t

      R1(config)#int fa0/0

      R1(config-if)#ip add 192.168.0.1 255.255.255.0

      R1(config-if)#ip nat inside

      R1(config-if)#no sh

      R1(config-if)#exit

      R1(config)#int fa0/1

      R1(config-if)#ip add 202.100.100.1 255.255.255.0

      R1(config-if)#ip nat outside

      R1(config-if)#no sh

      R1(config-if)#exit

      R1(config)#ip access-list standard go-internet

      R1(config-std-nacl)#10 permit 192.168.0.0 0.0.0.255

      R1(config-std-nacl)#20 deny any

      R1(config-std-nacl)#exit

      R1(config)# ip nat pool public-ip202.100.100.80 202.100.100.81 prefix-length 24

      R1(config)#ip nat inside source list go-internet poolpublic-ip overload //注意overload參数关键。启用复用

      检查測试:

      PC1#ping 202.100.100.100 r 10

      Type escape sequence to abort.

      Sending 10, 100-byte ICMP Echos to 202.100.100.100,timeout is 2 seconds:

      .!!!!!!!!!

      Success rate is 90 percent (9/10), round-trip min/avg/max= 28/46/108 ms

      PC2#ping 202.100.100.100 r 10

      Type escape sequence to abort.

      Sending 10, 100-byte ICMP Echos to 202.100.100.100,timeout is 2 seconds:

      .!!!!!!!!!

      Success rate is 90 percent (9/10), round-trip min/avg/max= 28/55/80 ms

      PC3#ping 202.100.100.100 r 10

      Type escape sequence to abort.

      Sending 10, 100-byte ICMP Echos to 202.100.100.100,timeout is 2 seconds:

      !!!!!!!!!!

      Success rate is 100 percent (10/10), round-trip min/avg/max= 40/154/1056 ms

      R1#debug ip nat //可见三台主机能够同一时候訪问外网,并且仅仅用了公网ip地址池中的当中一个IP

      IP NAT debugging is on

      *Mar  100:13:27.883: NAT*: s=202.100.100.100, d=202.100.100.80->192.168.0.101[                                                                                      9]

      *Mar  100:13:27.887: NAT*: ICMP id=0->1

      *Mar  100:13:27.887: NAT*: s=192.168.0.102->202.100.100.80, d=202.100.100.100[                                                                                      1]

      *Mar  100:13:27.895: NAT*: ICMP id=2->0

      *Mar  100:13:27.895: NAT*: s=202.100.100.100, d=202.100.100.80->192.168.0.103[                                                                                      1]

      *Mar  100:13:27.903: NAT*: ICMP id=1->0

      *Mar  100:13:27.903: NAT*: s=202.100.100.100, d=202.100.100.80->192.168.0.102[                                                                                      1]

      *Mar  100:13:27.911: NAT*: ICMP id=0->2

      *Mar  100:13:27.911: NAT*: s=192.168.0.103->202.100.100.80, d=202.100.100.100 [

      R1#sh ip nat translations

      Pro Inside global     Inside local       Outsidelocal      Outside global

      icmp 202.100.100.80:1 192.168.0.101:1   202.100.100.100:1 202.100.100.100:1

      icmp 202.100.100.80:0 192.168.0.102:1   202.100.100.100:1  202.100.100.100:0

      icmp 202.100.100.80:2 192.168.0.103:1   202.100.100.100:1 202.100.100.100:2

      实验五、网络地址port转换(NAPT)

      CCNP路由实验之十五 NAT(网络地址转换)

      PC1配置:

      PC#conf t

      PC(config)#no ip routing

      PC(config)#ip default-gateway 192.168.0.1

      PC(config)#int fa0/0

      PC(config-if)#ip add 192.168.0.100 255.255.255.0

      PC(config-if)#no sh

      PC(config-if)#exit

      Server配置:

      Server#conf t

      Server(config)#no ip routing

      Server(config)#ip default-gateway 192.168.0.1

      Server(config)#int fa0/0

      Server(config-if)#ip add 192.168.0.80 255.255.255.0

      Server(config-if)#no sh

      Server(config-if)#exit

      Internet配置:

      Internet#conf t

      Internet(config)#int fa0/0

      Internet(config-if)#ip add 202.100.100.100 255.255.255.0

      Internet(config-if)#no sh

      Internet(config-if)#exit

      Internet(config)#ip http server

      R1配置:

      R1#conf t

      R1(config)#int fa0/0

      R1(config-if)#ip add 192.168.0.1 255.255.255.0

      R1(config-if)#ip nat inside

      R1(config-if)#no sh

      R1(config-if)#exit

      R1(config)#int fa0/1

      R1(config-if)#ip add 202.100.100.1 255.255.255.0

      R1(config-if)#ip nat outside

      R1(config-if)#no sh

      R1(config-if)#exit

      R1(config)#ip access-list standard nat //定义能够进行NAT转换的内部IP范围

      R1(config-std-nacl)#permit 192.168.0.0 0.0.0.255

      R1(config-std-nacl)#deny any

      R1(config-std-nacl)#exit

      R1(config)#ip nat inside source list nat interface fa0/1overload//开启port多路复用让内网用户上网

      R1(config)#ip nat inside source static tcp 192.168.0.8080 202.100.100.1 80//把server的webport80放出来,跟我们的外网IP的80建立映射。

      检查測试:

      PC#ping 202.100.100.100 //PC能够訪问外网

      Type escape sequence to abort.

      Sending 5, 100-byte ICMP Echos to 202.100.100.100,timeout is 2 seconds:

      .!!!!

      Success rate is 80 percent (4/5), round-trip min/avg/max= 44/130/216 ms

      PC#telnet 202.100.100.1 80 //PC不能够通过外网IP訪问局域网内的server (注意),传说的回流问题

      Trying 202.100.100.1, 80 ...

      % Connection refused by remote host

      Internet#telnet 202.100.100.1 80 //外网能够訪问内网server的80

      Trying 202.100.100.1, 80 ... Open

      HTTP/1.1 400 Bad Request

      Date: Fri, 01 Mar 2002 00:15:36 GMT

      Server: cisco-IOS

      Accept-Ranges: none

      400 Bad Request

      [Connection to 202.100.100.1 closed by foreign host]

      Server#ping 202.100.100.100 //server能够上网

      Type escape sequence to abort.

      Sending 5, 100-byte ICMP Echos to 202.100.100.100,timeout is 2 seconds:

      !!!!!

      Success rate is 100 percent (5/5), round-trip min/avg/max= 36/108/324 ms

      R1#debug ip nat

      IP NAT debugging is on

      *Mar  100:13:40.583: NAT: s=192.168.0.100->202.100.100.1, d=202.100.100.100 [0]

      *Mar  100:13:41.559: NAT*: s=192.168.0.100->202.100.100.1, d=202.100.100.100 [1]

      *Mar  100:14:43.879: NAT*: s=202.100.100.100, d=202.100.100.1->192.168.0.80 [59621]

      *Mar  100:14:44.039: NAT*: s=192.168.0.80->202.100.100.1, d=202.100.100.100 [5521]

      *Mar  100:14:44.299: NAT*: s=202.100.100.100, d=202.100.100.1->192.168.0.80 [59622]

      *Mar  100:14:44.367: NAT*: s=202.100.100.100, d=202.100.100.1->192.168.0.80 [59623]

      *Mar  100:25:08.591: NAT*: s=192.168.0.80->202.100.100.1, d=202.100.100.100 [4]

      *Mar  100:25:08.611: NAT*: s=202.100.100.100, d=202.100.100.1->192.168.0.80 [4]

      R1#sh ip nat translations

      Pro Inside global     Inside local       Outsidelocal      Outside global

      icmp 202.100.100.1:1  192.168.0.80:1     202.100.100.100:1  202.100.100.100:1

      tcp 202.100.100.1:80  192.168.0.80:80   202.100.100.100:35356 202.100.100.100:35356

      tcp 202.100.100.1:80  192.168.0.80:80    ---                ---

      icmp 202.100.100.1:2  192.168.0.100:2    202.100.100.100:2  202.100.100.100:2

      R1#sh access-lists

      Standard IP access list nat

      10 permit192.168.0.0, wildcard bits 0.0.0.255 (6 matches)

      20 deny   any   20 deny   any

      实验六、区域无关NAT(Domainless NAT)(推荐使用)

      CCNP路由实验之十五 NAT(网络地址转换)

      PC配置:

      PC#conf t

      PC(config)#no ip routing

      PC(config)#ip default-gateway 192.168.0.1

      PC(config)#int fa0/0

      PC(config-if)#ip add 192.168.0.100 255.255.255.0

      PC(config-if)#no sh

      PC(config-if)#exit

      Server配置:

      Server#conf t

      Server(config)#no ip routing

      Server(config)#ip default-gateway 192.168.0.1

      Server(config)#int fa0/0

      Server(config-if)#ip add 192.168.0.80  255.255.255.0

      Server(config-if)#no sh

      Server(config-if)#exit

      Server(config)#ip http server

      Internet配置:

      Internet#conf t

      Internet(config)#int fa0/0

      Internet(config-if)#ip add 202.100.100.100 255.255.255.0

      Internet(config-if)#no sh

      Internet(config-if)#exit

      R1配置:

      R1#conf t

      R1(config)#int fa0/0

      R1(config-if)#ip add 192.168.0.1 255.255.255.0

      R1(config-if)#ip nat enable //开启nat支持。注意没有区域之分

      R1(config-if)#no sh

      R1(config-if)#exit

      R1(config)#int fa0/1

      R1(config-if)#ip add 202.100.100.1 255.255.255.0

      R1(config-if)#ip nat enable //开启nat支持,注意没有区域之分

      R1(config-if)#no sh

      R1(config-if)#exit

      R1(config)#ip access-list standard Internet

      R1(config-std-nacl)#10 permit 192.168.0.0 0.0.0.255

      R1(config-std-nacl)#20 deny any

      R1(config-std-nacl)#exit

      R1(config)#ip nat source list Internet int fa0/1 overload//注意没有区域之分

      R1(config)#ip nat source static tcp 192.168.0.80 80202.100.100.1 80//注意没有区域之分

      检查測试:

      PC#ping 202.100.100.100 //PC能够上网

      Type escape sequence to abort.

      Sending 5, 100-byte ICMP Echos to 202.100.100.100,timeout is 2 seconds:

      !!!!!

      Success rate is 100 percent (5/5), round-trip min/avg/max= 88/120/192 ms

      Server#ping 202.100.100.100 //Server能够上网

      Type escape sequence to abort.

      Sending 5, 100-byte ICMP Echos to 202.100.100.100,timeout is 2 seconds:

      !!!!!

      Success rate is 100 percent (5/5), round-trip min/avg/max= 80/310/1160 ms

      Internet#telnet 202.100.100.1 80 //外网能够訪问Server的80服务

      Trying 202.100.100.1, 80 ... Open

      HTTP/1.1 400 Bad Request

      Date: Fri, 01 Mar 2002 00:21:03 GMT

      Server: cisco-IOS

      Accept-Ranges: none

      400 Bad Request

      [Connection to 202.100.100.1 closed by foreign host]

      PC#telnet 202.100.100.1 80 //PC能够通过外网IP訪问Server的80服务

      Trying 202.100.100.1, 80 ... Open

      HTTP/1.1 400 Bad Request

      Date: Fri, 01 Mar 2002 00:26:32 GMT

      Server: cisco-IOS

      Accept-Ranges: none

      400 Bad Request

      [Connection to 202.100.100.1 closed by foreign host]

      R1#debug ip nat //调试NAT

      *Mar  100:19:15.107: NAT*: s=192.168.0.100->202.100.100.1, d=202.100.100.100 [19]

      *Mar  100:19:15.211: NAT: s=202.100.100.100, d=202.100.100.1->192.168.0.100 [19]

      *Mar  100:19:32.875: NAT*: s=192.168.0.80->202.100.100.1, d=202.100.100.100 [0]

      *Mar  100:19:32.963: NAT: s=202.100.100.100, d=202.100.100.1->192.168.0.80 [0]

      *Mar  100:20:19.479: NAT: s=202.100.100.100, d=202.100.100.1->192.168.0.80 [11992]

      *Mar  100:20:19.595: NAT*: s=192.168.0.80->202.100.100.1, d=202.100.100.100 [4167]

      *Mar  100:20:19.659: NAT: s=202.100.100.100, d=202.100.100.1->192.168.0.80 [11993]

      *Mar  100:20:19.667: NAT: s=202.100.100.100, d=202.100.100.1->192.168.0.80 [11994]

      *Mar  100:22:25.551: NAT: s=192.168.0.100->202.100.100.1, d=202.100.100.1 [2180]

      *Mar  100:22:25.555: NAT: s=202.100.100.1, d=202.100.100.1->192.168.0.80 [2180]

      *Mar  100:22:25.663: NAT: s=192.168.0.80->202.100.100.1, d=202.100.100.1 [908]

      *Mar  100:22:25.667: NAT: s=202.100.100.1, d=202.100.100.1->192.168.0.100 [908]

      R1#sh ip nat nvi translations //查看NVI转换

      Pro Source global     Source local       Destin  local     Destin  global

      icmp 202.100.100.1:1  192.168.0.80:1    202.100.100.100:1 202.100.100.100:1

      tcp 202.100.100.1:80  192.168.0.80:80    ---                ---

      icmp 202.100.100.1:4  192.168.0.100:4   202.100.100.100:4 202.100.100.100:4

      tcp 202.100.100.1:40023 192.168.0.100:40023 202.100.100.1:80192.168.0.80:80

      tcp 202.100.100.100:63747 202.100.100.100:63747202.100.100.1:80 192.168.0.80:80

      R1#sh access-lists //查看ACL

      Standard IP access list Internet

      10 permit192.168.0.0, wildcard bits 0.0.0.255 (8 matches)

      20 deny   any (2 matches)

      ip nat inside source 数据包由inside 接口outside接口发包时,是先路由再NAT转换。而数据包由outside 接口向inside接口发包时是先NAT转换再路由,数据包的发送方向不同,则处理过程也不同

      ip nat source做NAT转换时,在须要NAT转换接口上使用的命令为ip nat enable,数据包在由一个接口向还有一个接口发包时,顺序是先路由再NAT然后再路由(第一个路由仅仅是匹配一下路由,而没有真正的路由行为,第二个路由则是真实的路由行为),无论数据包从哪个接口发向哪个接口,处理过程都是一样的。

      实验七、NAT解决网络地址重叠

      CCNP路由实验之十五 NAT(网络地址转换)

      PC1配置:

      PC1#conf t

      PC1(config)#no ip routing

      PC1(config)#ip default-gateway 192.168.0.1

      PC1(config)#int fa0/0

      PC1(config-if)#ip add 192.168.0.101 255.255.255.0

      PC1(config-if)#no sh

      PC1(config-if)#exit

      PC2配置:

      PC2#conf t

      PC2(config)#no ip routing

      PC2(config)#ip default-gateway 192.168.0.1

      PC2(config)#int fa0/0

      PC2(config-if)#ip add 192.168.0.101 255.255.255.0

      PC2(config-if)#no sh

      PC2(config-if)#exit

      R1配置:

      R1#conf t

      R1(config)#int fa0/0

      R1(config-if)#ip add 192.168.0.1 255.255.255.0

      R1(config-if)#ip nat inside

      R1(config-if)#no sh

      R1(config-if)#exit

      R1(config)#int fa0/1

      R1(config-if)#ip add 202.100.100.1 255.255.255.0

      R1(config-if)#ip nat outside

      R1(config-if)#no sh

      R1(config-if)#exit

      R1(config)#ip route 172.168.20.0 255.255.255.0202.100.100.2 //注意加入去往对端内部全局地址路由

      R1(config)#ip nat inside source static 192.168.0.101172.168.10.101

      R2配置:

      R2#conf t

      R2(config)#int fa0/0

      R2(config-if)#ip add 192.168.0.1 255.255.255.0

      R2(config-if)#ip nat inside

      R2(config-if)#no sh

      R2(config-if)#exit

      R2(config)#int fa0/1

      R2(config-if)#ip add 202.100.100.2 255.255.255.0

      R2(config-if)#ip nat outside

      R2(config-if)#no sh

      R2(config-if)#exit

      R2(config)#ip route 172.168.10.0 255.255.255.0 202.100.100.1//注意加入去往对端内部全局地址路由

      R2(config)#ip nat inside source static  192.168.0.101 172.168.20.101

       

      检查測试:

      PC1#ping 172.168.20.101

      Type escape sequence to abort.

      Sending 5, 100-byte ICMP Echos to 172.168.20.101, timeoutis 2 seconds:

      ..!!!

      Success rate is 60 percent (3/5), round-trip min/avg/max= 40/40/40 ms

      PC2#ping 172.168.10.101

      Type escape sequence to abort.

      Sending 5, 100-byte ICMP Echos to 172.168.10.101, timeoutis 2 seconds:

      !!!!!

      Success rate is 100 percent (5/5), round-trip min/avg/max= 40/258/1100 ms

      R1#debug ip nat

      IP NAT debugging is on

      *Mar  100:14:49.599: NAT*: s=192.168.0.101->172.168.10.101, d=172.168.20.101 [1]

      *Mar  100:14:51.103: NAT*: s=172.168.20.101, d=172.168.10.101->192.168.0.101 [0]

      *Mar  100:14:51.151: NAT*: s=192.168.0.101->172.168.10.101, d=172.168.20.101 [0]

      *Mar  100:14:51.203: NAT*: s=172.168.20.101, d=172.168.10.101->192.168.0.101 [1]

      R2#debug ip nat

      IP NAT debugging is on

      *Mar  100:14:48.267: NAT*: s=172.168.10.101, d=172.168.20.101->192.168.0.101 [1]

      *Mar  100:14:49.723: NAT*: s=192.168.0.101->172.168.20.101, d=172.168.10.101 [0]

      *Mar  100:14:49.795: NAT*: s=172.168.10.101, d=172.168.20.101->192.168.0.101 [0]

      *Mar  100:14:49.843: NAT*: s=192.168.0.101->172.168.20.101, d=172.168.10.101 [1]

      R1#sh ip nat translations

      Pro Inside global     Inside local       Outsidelocal      Outside global

      icmp 172.168.10.101:1 192.168.0.101:1   172.168.20.101:1  172.168.20.101:1

      --- 172.168.10.101    192.168.0.101      ---               ---

      R2#sh ip nat translations

      Pro Inside global     Inside local       Outsidelocal      Outside global

      icmp 172.168.20.101:1 192.168.0.101:1   172.168.10.101:1  172.168.10.101:1

      --- 172.168.20.101    192.168.0.101      ---                ---

       

    1. 实验八、NAT的Extendable參数使用

      CCNP路由实验之十五 NAT(网络地址转换)

      Server配置:

      Server#conf t

      Server(config)#noip routing

      Server(config)#ipdefault-gateway 192.168.0.1

      Server(config)#intfa0/0

      Server(config-if)#ipadd 192.168.0.80 255.255.255.0

      Server(config-if)#nosh

      Server(config-if)#exit

      Server(config)#usernamecisco password cisco

      Server(config)#linevty 0 4

      Server(config-line)#loginlocal

      Server(config-line)#end

      ISP1配置:

      ISP1#conf t

      ISP1(config)#intfa0/0

      ISP1(config-if)#ipadd 11.11.11.11 255.255.255.0

      ISP1(config-if)#nosh

      ISP1(config-if)#exit

      ISP2配置

      ISP2#conf t

      ISP2(config)#intfa0/0

      ISP2(config-if)#ipadd 22.22.22.22 255.255.255.0

      ISP2(config-if)#nosh

      ISP2(config-if)#exit

      R1配置:

      R1#conf t

      R1(config)#intfa0/0

      R1(config-if)#ipadd 192.168.0.1 255.255.255.0

      R1(config-if)#ipnat inside

      R1(config-if)#nosh

      R1(config-if)#exit

      R1(config)#intfa0/1

      R1(config-if)#ipadd 11.11.11.1 255.255.255.0

      R1(config-if)#ipnat outside

      R1(config-if)#nosh

      R1(config-if)#exit

      R1(config)#intfa1/0

      R1(config-if)#ipadd 22.22.22.1 255.255.255.0

      R1(config-if)#ipnat outside

      R1(config-if)#nosh

      R1(config-if)#exit

      R1(config)# ip nat inside sourcestatic tcp 192.168.0.80 23 11.11.11.80 23 extendable

      R1(config)# ip nat inside sourcestatic tcp 192.168.0.80 23 22.22.22.80 23 extendable

      检查測试:

      ISP1#telnet11.11.11.80

      Trying11.11.11.80 ... Open

      User AccessVerification

      Username: cisco

      Password:

      Server>

      ISP2#telnet22.22.22.80

      Trying22.22.22.80 ... Open

      User AccessVerification

      Username: cisco

      Password:

      Server>

      R1#debug ip nat

      *Mar  1 01:28:56.271: NAT*: s=11.11.11.11,d=11.11.11.80->192.168.0.80 [33886]

      *Mar  1 01:28:56.311: NAT*:s=192.168.0.80->11.11.11.80, d=11.11.11.11 [2465]

      *Mar  1 01:28:56.379: NAT*: s=11.11.11.11,d=11.11.11.80->192.168.0.80 [33887]

      *Mar  1 01:28:56.471: NAT*: s=11.11.11.11,d=11.11.11.80->192.168.0.80 [33888]

      *Mar  1 01:29:26.407: NAT*: s=22.22.22.22,d=22.22.22.80->192.168.0.80 [44393]

      *Mar  1 01:29:26.491: NAT*:s=192.168.0.80->22.22.22.80, d=22.22.22.22 [36105]

      *Mar  1 01:29:26.547: NAT*: s=22.22.22.22,d=22.22.22.80->192.168.0.80 [44394]

      *Mar  1 01:29:26.587: NAT*: s=22.22.22.22,d=22.22.22.80->192.168.0.80 [44395]

      R1#sh ip nattranslations

      Pro Insideglobal      Inside local       Outside local      Outside global

      tcp11.11.11.80:23     192.168.0.80:23    11.11.11.11:14462  11.11.11.11:14462

      tcp22.22.22.80:23     192.168.0.80:23    22.22.22.22:62983  22.22.22.22:62983

      tcp11.11.11.80:23     192.168.0.80:23    ---                ---

      tcp22.22.22.80:23     192.168.0.80:23    ---                ---

      用户能够使用Extendable參数配置多个静态转换。当中每一个转换都能够使用用同样的本地或全局地址转换。

    1. 实验九、NAT实现TCP负载均衡   

    CCNP路由实验之十五 NAT(网络地址转换)

    Server1配置:

    Server1#conf t

    Server1(config)#no ip routing

    Server1(config)#ip default-gateway 192.168.0.1

    Server1(config)#int fa0/0

    Server1(config-if)#ip add 192.168.0.101 255.255.255.0

    Server1(config-if)#no sh

    Server1(config-if)#exit

    Server1(config)#line vty 0 4

    Server1(config-line)#password cisco

    Server1(config-line)#login

    Server1(config-line)#exit

    Server2配置:

    Server2#conf t

    Server2(config)#no ip routing

    Server2(config)#ip default-gateway 192.168.0.1

    Server2(config)#int fa0/0

    Server2(config-if)#ip add 192.168.0.102 255.255.255.0

    Server2(config-if)#no sh

    Server2(config-if)#exit

    Server2(config)#line vty 0 4

    Server2(config-line)#password cisco

    Server2(config-line)#login

    Server2(config-line)#exit

    Server3配置:

    Server3#conf t

    Enter configuration commands, one per line.  End with CNTL/Z.

    Server3(config)#no ip routing

    Server3(config)#ip default-gateway 192.168.0.1

    Server3(config)#int fa0/0

    Server3(config-if)#ip add 192.168.0.103 255.255.255.0

    Server3(config-if)#no sh

    Server3(config-if)#exit

    Server3(config)#line vty 0 4

    Server3(config-line)#password cisco

    Server3(config-line)#login

    Server3(config-line)#exit

    Internet配置:

    Internet#conf t

    Internet(config)#int fa0/0

    Internet(config-if)#ip add 202.100.100.100 255.255.255.0

    Internet(config-if)#no sh

    Internet(config-if)#exit

    R1配置:

    R1#conf t

    R1(config)#int fa0/0

    R1(config-if)#ip add 192.168.0.1 255.255.255.0

    R1(config-if)#ip nat inside

    R1(config-if)#no sh

    R1(config-if)#exit

    R1(config)#int fa0/1

    R1(config-if)#ip add 202.100.100.80 255.255.255.0 //主ip

    R1(config-if)#ip add 202.100.100.1 255.255.255.0 secondary//副ip

    R1(config-if)#ip nat outside

    R1(config-if)#no sh

    R1(config-if)#exit

    R1(config)#ip access-list extended VIP //标识用来转换的公网IP

    R1(config-ext-nacl)#permit ip any host 202.100.100.1

    R1(config-ext-nacl)#deny ip any any

    R1(config-ext-nacl)#exit

    R1(config)#ip nat poolserverfarm 192.168.0.101 192.168.0.103 netmask 255.255.255.0 type rotary//定义NAT地址池来标识内部server的本地地址。注意要用到keywordrotary,表明我们要使用轮循的方式从NAT地址池中取出相应IP地址来转换合法IP报文。

    最后,把目标地址为訪问表中IP的报文转换成地址池中定义的IP地址。

    R1(config)#ip nat inside destination list VIP poolserverfarm

    检查測试:

    Internet#telnet 202.100.100.1 //第一次telnet 进入server3

    Trying 202.100.100.1 ... Open

    User Access Verification

    Password:

    Server3>q

    [Connection to 202.100.100.1 closed by foreign host]

    Internet#telnet 202.100.100.1 //第二次telnet进入server2

    Trying 202.100.100.1 ... Open

    User Access Verification

    Password:

    Server1>q

    [Connection to 202.100.100.1 closed by foreign host]

    Internet#telnet 202.100.100.1//第三次telnet进入server1

    Trying 202.100.100.1 ... Open

    User Access Verification

    Password:

    Server2>q

    [Connection to 202.100.100.1 closed by foreign host]

    R1#debug ip nat

    *Mar  101:05:35.271: NAT*: s=202.100.100.100, d=202.100.100.1->192.168.0.103[32504]

    *Mar  101:05:35.303: NAT*: s=192.168.0.103->202.100.100.1, d=202.100.100.100[62175]

    *Mar  101:05:36.047: NAT*: s=202.100.100.100, d=202.100.100.1->192.168.0.101 [60711]

    *Mar  101:05:36.147: NAT*: s=192.168.0.101->202.100.100.1, d=202.100.100.100[26348]

    *Mar  101:06:42.691: NAT*: s=202.100.100.100, d=202.100.100.1->192.168.0.102 [6985]

    *Mar  101:06:42.751: NAT*: s=192.168.0.102->202.100.100.1, d=202.100.100.100 [35992]

    R1#sh ip nat translations

    Pro Inside global     Inside local       Outsidelocal      Outside global

    tcp 202.100.100.1:23  192.168.0.101:23  202.100.100.100:61090 202.100.100.100:61090

    tcp 202.100.100.1:23  192.168.0.102:23  202.100.100.100:47549 202.100.100.100:47549

    tcp 202.100.100.1:23  192.168.0.103:23  202.100.100.100:61337 202.100.100.100:61337

    R1#sh access-list

    Extended IP access list VIP

    10 permit ip any host 202.100.100.1 (26 matches)

    20 deny ip any any

    通过目的地址循环轮询转换实现server的TCP负载均衡,能够把一个虚拟主机映射到多个真实的主机(如Webserver)上。

    虚拟主上每次发起的新TCP会话将与一个不同的真实主机进行。通过NAT,你能够在你的内部网络建立多个真实主机,以分担众多用户对一个虚拟主机訪问的负荷。每次从外部网络发起的新会话所相应的真实主机的循环是通过对目的地址以地址池的方式进行轮回转换实现的。

    它是一种反向NAT转换,是对目的地址的转换。而不是对源地址的转换. TCP负载转换原理

    a.外部网络用户主机发起与虚拟主机(内部全局地址)的连接。此时数据包中的源地址为外部本地地址。目的地址为虚拟主机地址。

    b.当路由器接收到连接请求数据包时。创建一个内部网络中真实主机(如1.1.1.1)进行关联的新的NAT转换条目。

    c.NAT路由器把连接请求的数据包中的目的地址用真实主机的本地地址进行替换(源地址不变),然后继续发送连接请求数据包。

    d.内部网络中真实主机1.1.1.1接收到这个连接请求数据包。并发出一个应答数据包。应答数据包中的源地址是内部真实主机本地地址(1.1.1.1),目的地址为外部网络主机的IP地址

    e.当NAT路由器接收到这个应答数据包后,使用内部本地地址和port号,以及外部地址和port号作为keyword在NAT表中进行查找。找到后把应答包中的源地址转换成虚拟主机地址(内部全局地址)进行替换(目的地址不变),继续转发应答数据包。

    直接外部网络用户收到应答数据包。

    f.之后的转换过程就是不断反复,但每一次转换时虚拟主机所相应的内部主机本地地址不再是1.1.1.1,可能是1.1.1.2。或者1.1.1.3。

    这是一个动态NAT转换。不是静态的。

    注意:这样的反向的NAT仅仅支持TCP,并且这样的技术不会自己主动检查后端的多台server是否在线,直接就会将数据包转发过去,假设后端server中的当中一台出现故障。而此时刚好NAT转换后将数据发给它。就会导致不能正确的提供服务给客户。

    企业不推荐使用

    层或第7层交换(实质为:server负载均衡)解决方式。

    Cisco IOS SLB 会为发出请求的client呈现出一个单独的虚拟serverIP地址。举例来说,多个client向这个虚拟IP地址发出IP 请求,比方HTTP Get 请求。

    交换机会把这些请求分发(负载分担)到多台server上。

    然后交换机依据多种因素来实施负载分担。比方TCP和UDP协议、负载和其它负载分担參数。

    除此之外,有必要的话,交换机还会把client发来的请求转发给同一台server,比方在使用FTP时,一个client必须在整个回话或数据流过程中。与同样的server进行通信。

    通常情况下,client设备会使用DNS来解析虚拟serverIP地址。使用Cisco IOS SLB 来提供冗余性、可扩展性和高性能(负载分担)。能够获得下面优点。

    1. 通过把client请求分布到server集群中,获得了更高的性能。

    2. server应用管理员的工作更为轻松。

      client仅仅知道虚拟server。因此真实server发生变化时无需对client进行管理。从而使Cisco IOS SLB 具有可扩展性。

    3. 为真实server提供了安全保障,由于真实server的地址永远不须要通告给外部网络。而用户仅仅须要知道虚拟的IP地址。管理员还能够依据IP地址和IPport号来过滤不必要的流量。

    4. 零停运时间。易于维护,在替换物理(真实)server时其它server负责处理client的请求。

    5. 交换机能够检測到无法进行响应的server,然后不再向这些server转发请求,直到这些server能够回应交换机的測试为止。

      SLB 的运作模式

      分派模式(Dispatched Mode):每一个真实server都要把虚拟server地址配置为环回地址或辅助IP地址。Cisco IOS SLB 会在MAC层把数据包重定向到真实server。由于分派模式不会对虚拟IP地址进行改动。因此真实server为了实现Cisco IOS SLB 必须建立二层邻接关系,或者使接入的路由器无需通过路由就能够找到所选的真实server。

      在分派模式中,SLB路由器、真实server地址和虚拟server地址不须要在同一子网中。

      採用分派模式时,server必须选择下面的一种做法,否则丢弃数据包:

      1>在真实server上加入环回口地址。并把地址设置为虚拟server的IP地址

      2>加入第二个IP地址为虚拟server的IP地址:由于SLBserver)会把目的IP为虚拟IP的数据包分派到真实

      的server上,在接口下添加一个“secondary”地址就可以;採用这样的方式时,会报“IP地址反复”

      的错误,可是这不影响使用。

      定向模式(Directed mode):全部的真实server都无需知道虚拟server的IP地址。Cisco IOS SLB 会对client和真实server之间交换的数据包进行转换。也就是通过NAT把虚拟serverIP地址转换为真实server地址。在定向模式中。路由器会更改客户计算机发来的数据包,把目的IP地址改为真实server的IP地址

      WWW1配置:

      WWW1#conf t

      WWW1(config)#noip routing

      WWW1(config)#ipdefault-gateway 192.168.0.1

      WWW1(config)#intfa0/0

      WWW1(config-if)#ipadd 192.168.0.81 255.255.255.0

      WWW1(config-if)#nosh

      WWW1(config-if)#exit

      WWW1(config)#iphttp server

      WWW2配置:

      WWW2#conf t

      WWW2 (config)#noip routing

      WWW2 (config)#ipdefault-gateway 192.168.0.1

      WWW2 (config)#intfa0/0

      WWW2 (config-if)#ipadd 192.168.0.82 255.255.255.0

      WWW2 (config-if)#nosh

      WWW2 (config-if)#exit

      WWW2 (config)#iphttp server

      WWW3配置:

      WWW3#conf t

      WWW3 (config)#noip routing

      WWW3 (config)#ipdefault-gateway 192.168.0.1

      WWW3 (config)#intfa0/0

      WWW3 (config-if)#ipadd 192.168.0.83 255.255.255.0

      WWW3 (config-if)#nosh

      WWW3 (config-if)#exit

      WWW3 (config)#iphttp server

      Client1配置:

      Client1#conf t

      Client1(config)#intfa0/0

      Client1(config-if)#ipadd 200.200.200.200 255.255.255.0

      Client1(config-if)#nosh

      Client1(config-if)#exit

      Client2配置:

      Client2#conf t

      Client2(config)#intfa0/0

      Client2(config-if)#ipadd 200.200.200.100 255.255.255.0

      Client2(config-if)#nosh

      Client2(config-if)#exit

      R1配置:

      R1#conf t

      R1(config)#intfa0/0

      R1(config-if)#ipadd 192.168.0.1 255.255.255.0

      R1(config-if)#nosh

      R1(config-if)#exit

      R1(config)#intfa0/1

      R1(config-if)#ipadd 200.200.200.1 255.255.255.0

      R1(config-if)#nosh

      R1(config-if)#exit

      R1(config)#ipslb serverfarm webserver //创建server组

      R1(config-slb-sfarm)#natserver //开启NAT。即定向模式

      R1(config-slb-sfarm)#predictorroundrobin//配置採用负载平衡的方式为轮询。即为默认方式

      R1(config-slb-sfarm)#real192.168.0.81 //加入真实server到组中

      R1(config-slb-real)#faildetect//配置检測server的可用状态。假设server发生问题,SLB将不会把流量转发到该server

      R1(config-slb-real)#inservice//让server生效

      R1(config-slb-real)#exit

      R1(config-slb-sfarm)#real192.168.0.82

      R1(config-slb-real)#faildetect

      R1(config-slb-real)#inservice

      R1(config-slb-real)#exit

      R1(config-slb-sfarm)#real192.168.0.83

      R1(config-slb-real)#faildetect

      R1(config-slb-real)#inservice

      R1(config-slb-real)#exit

      R1(config-slb-sfarm)#exit

      R1(config)#ipslb vserver VIP //创建server虚拟IP

      R1(config-slb-vserver)#virtual200.200.200.80 tcp www//设置IP和相应服务

      R1(config-slb-vserver)#serverfarmwebserver //把IP关联到server组

      R1(config-slb-vserver)#inservice//启用虚拟server

      R1(config-slb-vserver)#exit

      检查測试:

      Client1#telnet200.200.200.80 80

      Trying200.200.200.80, 80 ... Open

      HTTP/1.1 400 BadRequest

      Date: Fri, 01Mar 2002 00:34:50 GMT

      Server:cisco-IOS

      Accept-Ranges:none

      400 Bad Request

      [Connection to200.200.200.80 closed by foreign host]

      Client2#telnet200.200.200.80 80

      Trying200.200.200.80, 80 ... Open

      HTTP/1.1 400 BadRequest

      Date: Fri, 01Mar 2002 00:50:49 GMT

      Server:cisco-IOS

      Accept-Ranges:none

      400 Bad Request

      [Connection to200.200.200.80 closed by foreign host]

      R1#sh ip slbconns

      vserver         prot client                real                  state     nat

      -------------------------------------------------------------------------------

      VIP             TCP  200.200.200.200:59073 192.168.0.82          ESTAB     S

      VIP             TCP  200.200.200.100:16259 192.168.0.83          SYNCLIENT S

      VIP             TCP  200.200.200.100:47978 192.168.0.83          ESTAB     S

      R1#sh ip slbstats

      Pkts via normalswitching:  156

      Pkts via specialswitching: 0

      ConnectionsCreated:        12

      ConnectionsEstablished:    10

      ConnectionsDestroyed:      9

      ConnectionsReassigned:     0

      ZombieCount:               0

      R1#sh ip slbvservers

      slb vserver      prot virtual               state         conns

      -------------------------------------------------------------------

      VIP              TCP   200.200.200.80:80     INSERVICE     3

      R1#sh ip slbreals

      real                  server farm      weight state          conns

      -------------------------------------------------------------------

      192.168.0.81          WEBSERVER        8      OPERATIONAL    0

      192.168.0.82          WEBSERVER        8      OPERATIONAL    1

      192.168.0.83          WEBSERVER        8      FAILED         1