網路位址轉換 NAT 與 PAT
當可用的真實IP越來越少,就必須使用網路位址轉換(NAT、PAT)來轉換虛擬、私有IP(Private IP)到公共IP。
如果你沒聽過 NAT 我想你至少有聽過網路分享器(N台電腦共享一個對外連線),雖然各家廠商實做出來的功能不盡相同,但本質上那是一樣的東西。
私有(Private IP)的範圍為
10.0.0.0 ~ 10.255.255.255 | 2^24 個 IP | 1個 ClassA |
172.16.0.0 ~ 172.31.255.255 | 2^20 個 IP | 16個 ClassB |
192.168.0.0 ~ 192.168.255.255 | 2^16 個 IP | 255個 ClassC |
◆私有位址的路由資訊不能對外散播
◆使用私有位址作為來源或目的位址的封包,不能透過 Internet 來轉送
◆關於私有位址的參考紀錄,只能限於內部網路使用
網路位址轉換器有三種類型:
靜態NAT(static NAT):一對一的對應(一個虛擬ip對應一個真實ip)
NAT群(Pooled NAT):多對多的對應(多個虛擬ip對應多個真實ip,但同一時間,某真實ip只會對應一個虛擬ip)
連接埠 NAT(PAT, Port Address Translation)多對多的對應,但不是單一的對應,會透過使用連接埠的方式,使其同一時間,某真實ip可以對應多個虛擬ip。理論值 PAT 支持同時連接 64500個TCP/IP、UDP/IP connections。
舉例:當 192.168.1.2 要連結 140.113.1.1 的 WWW 時,封包的內容 SA=192.168.1.2、SP=1520 當穿過 PAT 之後,其來源的欄位會被換成 PAT 所對應(mapping)的 IP 與 Port ,也就是下圖中的 SA=101.1.1.1、SP=4621。反之,當 PAT 收到回應時,一樣到 mapping 表找出對應內部的主機與聯繫的服務。
基本動作原理說完了,現在就用例子來說明怎麼在 Cisco Router 裡設定 NAT 與 PAT。
先決條件,各設備 IP 與 Routing 機制都已完成,50.0.0.1 可以 ping 到 20.0.0.1。
圖中下半部分 10.0.0.0 的網段就是使用虛擬 IP。如今要對外通訊,就必須透過 Router R2 來做網路位置的轉換,你可以把 switch 0 以下想成公司內部的網路。
由於 NAT 的動作是由 Router R2 所處理,所以只需設定好 R2 就能讓內部的機器連上網路。(註:跟 Routing 跟 DHCP 都無關)
---設定 NAT / PAT 的 2 個步驟-----------
- 設定 IP 的對應方式
- 設定位址轉換的 inside / outside 介面為何
****** Static NAT ******
1.設定 10.0.0.1 對應 101.0.0.5、設定 10.0.0.2 對應 101.0.0.6,也可以利用指定對外 Interface 的方式
R2(config)#ip nat inside source static 10.0.0.1 101.0.0.5
R2(config)#ip nat inside source static 10.0.0.2 101.0.0.6
2.設定位址轉換的 inside / outside 介面
R2(config)#interface fastEthernet 0/1
R2(config-if)#ip nat inside
R2(config)#interface fastEthernet 0/0
R2(config-if)#ip nat outside
利用 指令觀察一下轉換的情形
R2#show ip nat translations
Pro Inside global Inside local Outside local Outside global
--- 101.0.0.6 10.0.0.10 --- ---
--- 101.0.0.7 10.0.0.11 --- ---
--- 101.0.0.5 10.0.0.1 --- ---
****** Pooled NAT 或 Dynamic NAT ******
1.設定內部允許轉換的虛擬IP範圍
R1(config)#access-list 1 permit 10.0.0.0 0.255.255.255
##後面用的網路遮罩為 wildcard bits 反向遮罩
2.設定外部合法IP的使用範圍
R1(config)#ip nat pool nat10 101.0.0.4 101.0.0.5 netmask 255.0.0.0
##這時的網路遮罩是正常的唷!
R1(config)#ip nat inside source list 1 pool nat10
## 所用的 pool name 請注意大小寫,免得造成無法正常動作。
-3.設定 ip nat 對內、對外的介面
R1(config)#interface fastEthernet 1/0
R1(config-if)#ip nat inside
R1(config)#interface fastEthernet 0/0
R1(config-if)#ip nat outside
這個例子好玩的是,我設定用來做IP轉換的只提供2個IP(101.0.0.4-5),而左邊的PC有3台
Q:那當第3台要上線時會有什麼問題?
A:會不通
必須等佔用 NAT connections 的逾期或被清掉,才能正常的連線。
****** PAT ******
PAT 的名聲雖不如 NAT 來的有名,可是現在大部分施行網路位址轉換的動作方式,其實都是 PAT (Port Address Translation),都是以連接埠來做為轉換的方法,而非一對一的 IP 位址對應。
這個 PAT 例子故意弄個跟之前 NAT 不一樣是因為,在較大的公司內部網路,其使用虛擬 IP 通常不只使用一個 Class-C的範圍,即使使用 10.x.x.x 也不會將網路遮罩設成 255.0.0.0 (誰要這麼大的廣播範圍阿)。
1.設定內部允許轉換的虛擬IP範圍
access-list 編號 允許/禁止 IP網段 反向掩碼
R1(config)#access-list 1 permit 10.20.0.0 0.0.255.255
R1(config)#access-list 1 permit 10.30.0.0 0.0.255.255
2.設定外部合法IP的使用範圍
上一個例子是在 101.0.0.x 的網段,宣告使用 101.0.0.4-5的 IP 來做為轉換,當然在 PAT 你一樣可以這麼做,但其實有另一種作法,就是直接「介面」做 IP 轉換,而不是指定 IP 的方式。
R1(config)#ip nat inside source list 1 interface FastEthernet0/0 overload
Pooled_NAT 跟 PAT 在設定上最大的不同,就是在命令最後有一個「overload」參數,意思為指定以 port 方式來分辨不同的內部主機的某通訊連線。
3.設定 ip nat 對內、對外的介面
!
interface FastEthernet0/0
ip address 101.0.0.1 255.0.0.0
ip nat outside
!
interface FastEthernet1/0
ip address 10.20.0.254 255.255.0.0
ip nat inside
!
interface FastEthernet1/1
ip address 10.30.0.254 255.255.0.0
ip nat inside
!
有多個對內使用虛擬 IP 的介面,都需要設定「ip nat inside」
留言列表