最近在QQ羣中聊天的時候有一位羣友提出了一個問題,內網服務器在沒有網關的狀況下怎麼樣發佈到公網中去,同時網絡的出口也只有一個公網地址,提出問題網絡的拓撲以下:服務器
圖:網友給的拓撲圖網絡
拓撲思路即要求描述:less
1. 內網服務器的IP地址爲192.168.1.2,因爲某種要求而不能設置網關dom
2. 出口設備的內網地址爲192.168.1.1,同時這個地址也爲內網其餘PC的網關地址tcp
3. 出口設備僅僅有一個公網地址爲2.2.2.1ide
4. 將內網服務器192.168.1.2:23映射爲2.2.2.1:23,公網用戶1.1.1.1經過 telnet 2.2.2.1能夠鏈接到內網服務器的telnet端口測試
看到這個問題及給出的拓撲思路後,用GNS3搭建了一個網絡拓撲圖以下:spa
圖:GNS3搭建的網絡拓撲debug
GNS3網絡拓撲介紹:server
1. 路由器R1的公網接口fa0/0地址爲:2.2.2.1,內網IP地址爲192.168.1.1;
2. 路由器R2模擬內網服務器,接口IP爲192.168.1.2,同時no ip routing關閉路由功能即不設置網關,開啓telnet功能,密碼爲cisco
3. 路由器R5模擬爲內部普通PC,地址爲192.168.1.11,可正常訪問互聯網;
4. 路由器R4模擬爲公網普通用戶,地址爲1.1.1.1
本文的主要內容爲路由器R1的配置,配置思路以下:
1. 配置NAT使內網用戶能正常訪問Internet
2. 配置Static NAT將192.168.1.2:23映射爲2.2.2.1:23
3. 配置NAT 使Internet用戶在訪問內部服務器192.168.1.2時將源IP地址轉換爲192.168.1.1
注:本例若使用常規的NAT轉換設置,即在接口上設置ip nat inside source 或ip nat outside source 命令,而後將在全局配置下使用ip nat inside source 命令將不能徹底知足這位網友的要求(主要是不能將公網地址IP爲192.168.1.1來訪問內部服務器,若是稍作變通同將公網IP轉換爲其餘內網IP如192.168.1.3則可),爲了技術愛好,也爲了徹底知足這位網友的要求,本文將給出另外一種解決方法。
方法一:
在內外網接口上啓用ip nat enable命令 ,在全局配置模式下使用ip nat source 命令來知足需求配置以下:
路由器R1的配置以下:
!
!
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
ip domain name lab.local
!
!
interface FastEthernet0/0
ip address 2.2.2.1 255.255.255.0
ip nat enable //在接口上啓用nat,注意ip nat enable 與ip nat outside的區別
ip virtual-reassembly
duplex auto
speed auto
!
interface FastEthernet1/0
ip address 192.168.1.1 255.255.255.0
ip nat enable //在接口上啓用nat,注意ip nat enable 與ip nat inside的區別
ip virtual-reassembly
duplex auto
speed auto
!
no ip http server
no ip http secure-server
!
ip classless
ip route 0.0.0.0 0.0.0.0 2.2.2.3
!
ip nat source list 110 interface FastEthernet0/0 overload //內網到外網的NAT轉換
ip nat source list 120 interface FastEthernet1/0 overload //外網到內網的NAt轉換
ip nat source static tcp 192.168.1.2 23 2.2.2.1 23 extendable //服務器23端口映射
!
access-list 110 permit ip 192.168.1.0 0.0.0.255 any
access-list 120 permit tcp any host 2.2.2.1 eq telnet
no cdp run
!
!
control-plane
!
!
line con 0
exec-timeout 0 0
privilege level 15
logging synchronous
line aux 0
exec-timeout 0 0
privilege level 15
logging synchronous
line vty 0 4
login
!
!
end
路由器R2模擬內網服務器的配置以下:
!
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
!
enable secret 5 $1$/FLK$scltNBoUUNSyP4tMP8vaD1
!
no aaa new-model
!
resource policy
!
memory-size iomem 5
ip subnet-zero
no ip routing //取消設備的路由功能,而且不設置網關
!
!
no ip cef
no ip domain lookup
ip domain name lab.local
!
!
interface FastEthernet0/0
no ip address
no ip route-cache
shutdown
duplex auto
speed auto
!
interface FastEthernet1/0
ip address 192.168.1.2 255.255.255.0
no ip route-cache
duplex auto
speed auto
!
no ip http server
no ip http secure-server
!
ip classless
!
control-plane
!
line con 0
exec-timeout 0 0
privilege level 15
logging synchronous
line aux 0
exec-timeout 0 0
privilege level 15
logging synchronous
line vty 0 4 //開啓telnet
password cisco
login
!
!
end
測試:
在公網用戶1.1.1.1上 telnet 2.2.2.1 經過,以下圖:
在內網PC上ping 公網地址1.1.1.1經過,以下圖:
以上測試所有正常,完成要求
示例中使用ip nat source來開啓NAT與咱們常規使用ip nat inside source 的方法來啓用NAT不單單在命令格式上不一樣,而且在數據包的轉換過程當中也有很大不一樣。
ip nat inside source 數據包由inside 接口outside接口發包時,是先路由再NAT轉換;而數據包由outside 接口向inside接口發包時是先NAT轉換再路由,數據包的發送方向不一樣,則處理過程也不一樣
而使用ip nat source作NAT轉換時,在須要NAT轉換接口上使用的命令爲ip nat enable,數據包在由一個接口向另外一個接口發包時,順序是先路由再NAT而後再路由(第一個路由只是匹配一下路由,而沒有真正的路由行爲,第二個路由則是真實的路由行爲),無論數據包從哪一個接口發向哪一個接口,處理過程都是同樣的。
正是因爲兩種NAT轉換方法對數據包的處理方式不一樣,才形成了使用ip nat inside source不能徹底符合第一副圖中的要求,而使用ip nat source則能夠徹底符合圖中的要求,若是將圖中的要求稍微改變一下用ip nat inside source 也是能夠的,這個將在下一篇文章中介紹。