好吧,我承認這個標題挺難讀 , 從一會兒內網一會兒公網一會兒又內網的。
但是這確實一個很實在的問題。如果你用的是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毫無問題。