好吧,我承认这个标题挺难读 , 从一会儿内网一会儿公网一会儿又内网的。
但是这确实一个很实在的问题。如果你用的是ASA或其他防火墙,可以直接
跳过,这东西对防火墙来说实现起来太容易。我们的目标还是思科的路由器。
不过这个功能对于思科的路由器来说仅仅只是可以实现,效果不是太好,有
些副作用,比如效率问题,所以前些日子,南通的丁博士问我这个问题的时候,
我建议他修改网站代码,不要写死域名,仍然通过内网IP地址访问。
如图所示: 内网的一台电脑需要通过互联网的DNS访问内网的一台服务器.
当公司内部无DNS或PC的DNS设置不是公司内部的DNS服务器时,就无法
通过域名来访问这个服务器。
换句话说就是 192.168.1.100可以直接访问10.1.1.100,但192.168.1.100
无法访问218.2.2.2 。
为了达成通过192.168.1.100 直接访问218.2.2.2 , 我们得利用一点小技巧。
英文叫:NAT Hairpinning 或者 NAT loopback 或者 NAT on-a-stick.
有一个思科官方的文档可参考 http://www.cisco.com/c/en/us/support/docs/ip/network-address-translation-nat/6505-nat-on-stick.html
美食有舌尖上的中国,路由有NAT上的拐棍。。
其实现原理的确像一个拐棍一样: 包进入以后,从自己先转换成一个地址,
然后再从这个地址访问互联网地址,再通过自己拐回来。。
关心一下配置,R2 g0/1 为内网口 , g 0/0为外网口。为了实现内网用户上网
以及外网用户访问服务器,先在g0/0,g0/1上启用地址转换。
#
int g 0/0
ip add 218.2.2.2/30
ip nat enable
int g 0/1
ip add 10.0.1.1/30
ip nat enable
ip add 4.4.4.1/24 #在内网口上加一个子地址
no ip redirects #禁止路由器发送重定向包
#
#建一个NAT地支池,跟刚才加的子地址在同一个子网
ip nat pool stickpool 4.4.4.2 4.4.4.254 prefix-length 24
#定义一个ACL,抓出内网访问的设备地址
access-l 10 permit 192.168.1.0 0.0.0.255
#开始拐了。。
ip nat source list 10 pool stickpool overload
#定义一个ACL,允许外网用户访问内网的10.1.1.100
access-l 101 permit tcp any host 10.1.1.100 eq 80
#拐回去了。。
ip nat source static tcp 10.1.1.100 80 218.2.2.2 80 extendable
ip nat source list 101 int g 0/1 overload
大功告成,测试OK,内网用户也可以通过218.2.2.2:80访问了。
直接用外网DNS毫无问题。