angelababy的腿:【原创】两个NAT内网互相提供服务

来源:百度文库 编辑:中财网 时间:2024/04/20 17:36:45
【原创】两个NAT内网互相提供服务2010年06月20日 星期日 0:26

实验目的:实现两个NAT内网互相提供服务,比如两个NAT内网分别都有对外提供服务的Web服务器时,要求能互相访问服务器。拓扑图如下:


具体配置如下:
ROUTER1配置:
r1#sh run
Building configuration...

Current configuration : 1229 bytes
!
version 12.4
service timestamps debug datetime msec
service timestamps log datetime msec
no service password-encryption
!
hostname r1
!
boot-start-marker
boot-end-marker
!
!
no aaa new-model
!
resource policy
!
memory-size iomem 5
ip subnet-zero
!
!
ip cef
no ip domain lookup
!        
interface FastEthernet0/0
ip address 10.1.1.1 255.255.255.0
ip nat inside
ip virtual-reassembly
duplex auto
speed auto
!
interface Serial1/0
ip address 1.1.1.1 255.255.255.0
ip nat outside
ip virtual-reassembly
serial restart-delay 0
!
interface Serial1/1
no ip address
shutdown
serial restart-delay 0
!
interface Serial1/2
no ip address
shutdown
serial restart-delay 0
!        
interface Serial1/3
no ip address
shutdown
serial restart-delay 0
!
no ip http server
no ip http secure-server
!
ip classless
ip route 0.0.0.0 0.0.0.0 Serial1/0
!
ip nat pool in 1.1.1.4 1.1.1.130 prefix-length 24
ip nat inside source list 1 pool in
ip nat inside source static tcp 10.1.1.3 443 1.1.1.3 443 extendable (10.1.1.3为内网https服务器IP,1.1.1.3为内网https服务器映射的公网IP,域名假定为aaa.com)
!
access-list 1 permit 10.1.1.0 0.0.0.255

!
!
control-plane
!
line con 0
exec-timeout 0 0
logging synchronous
line aux 0
line vty 0 4
login
transport preferred none
!
!
end

ROUTER2配置:
r2#sh run
Building configuration...

Current configuration : 1291 bytes
!
version 12.4
service timestamps debug datetime msec
service timestamps log datetime msec
no service password-encryption
!
hostname r2
!
boot-start-marker
boot-end-marker
!
!
no aaa new-model
!
resource policy
!
memory-size iomem 5
ip subnet-zero
!
!
ip cef
no ip domain lookup
!
interface FastEthernet0/0
ip address 10.1.2.1 255.255.255.0
ip nat inside
ip virtual-reassembly
duplex auto
speed auto
!
interface Serial1/0
ip address 1.1.1.2 255.255.255.0
ip nat outside
ip virtual-reassembly
serial restart-delay 0
!
interface Serial1/1
no ip address
shutdown
serial restart-delay 0
!
interface Serial1/2
no ip address
shutdown
serial restart-delay 0
!
interface Serial1/3
no ip address
shutdown
serial restart-delay 0
!
no ip http server
no ip http secure-server
!
ip classless
ip route 0.0.0.0 0.0.0.0 Serial1/0
!
ip nat pool in 1.1.1.132 1.1.1.254 prefix-length 24
ip nat inside source list 1 pool in
ip nat inside source static tcp 10.1.2.3 80 1.1.1.131 80 extendable (10.1.2.3为内网http服务器IP,1.1.1.131为内网http服务器映射的公网IP,域名假定为bbb.com)
!
access-list 1 permit 10.1.2.0 0.0.0.255

!
!
control-plane
!        

line con 0
exec-timeout 0 0
logging synchronous
line aux 0
line vty 0 4
login
transport preferred none
!
!
end

以上配置可实现:两边客户机均采用公网DNS服务器来解析域名,通过域名来访问对方服务器。

问题:两边客户机在访问自己内网服务器时使用域名无法访问,必须采用内网IP来访问。或者客户机在自己的hosts文件内设定内网服务器域名定向为内网服务器的内网IP。

技术难点:假设NAT内网使用的NAT地址池为A网段;内网服务器使用的NAT地址池为B网段;做NAT转换的路由器的出口IP所在网段为C网段;
NAT内网用户要想采用公网DNS来解析自己内网服务器并通过域名来访问内网服务器,必须保障A不等于C同时B不等于C;A和B相同或者不同均可,否则访问会出错。
这也是为什么现在很多公司内网客户访问自己服务器时不能直接通过域名访问的原因所在。因为目前的IP地址稀缺造成公网IP价格居高不下,所以很多公司都是只用到一个ISP分配给自己的IP来既作为内网PAT地址又作为服务器静态端口NAT地址还作为外网出口地址,造成上面提到的A、B、C成为同一地址,当然也就是同网段了。


解决方法有以下几种:
(1)多申请一段或者一个与自己NAT路由器出口IP不同网段的IP地址作为内网PAT和服务器静态端口NAT的共用或分用地址;
(2)内网做DNS服务器,把内网服务器的域名解析为内网IP;
(3)内网客户端修改hosts文件,使内网服务器域名指向内网IP。
以上3种方法均可用,个人认为第3种成本最低,但如客户机较多的情况下配置起来可能会比较麻烦。

另外有个问题,在用cisco packet tracer 5.2.1.1006版本做NAT实验时抓包发现路由器对待NAT和路由有个优先级的问题,路由器认为静态NAT的优先级 > 路由优先级高 > 动态路由优先级。
上述配置在小黄帽Dynampics里测试通过,但在tracer里会发现静态指定的NAT测试正常,而动态NAT在互相ping的时候回包会在两台NAT路由器之间来回循环直到超时却不经过NAT转换到达源端。
怀疑是模拟器自身问题,tracer在做别的实验时也经常出现一些莫名其妙的状况。

知识点:内网向外访问时先查找路由,然后做NAT转换;
              外部访问内网时,先查找NAT转换,然后才走路由。