1. 程式人生 > 實用技巧 >NAT - 網路地址轉換

NAT - 網路地址轉換

NAT

我們知道,一般在公司內部都使用私有地址進行通訊。但由於私有地址只能在區域網中傳輸,如果想要外網上傳輸就需要公有地址。通常來說採用如下的架構,在出口路由器上配置一個公有 IP 和 ISP 的入口相連。

如果公司內部的裝置想要和外網進行通訊,就通過 R1 將私有 IP 轉換成公有 IP 進行訪問。這個轉換的技術就稱為 NAT - 網路地址轉換,讓內部的網路共享一個或多個公網地址繼續訪問。

NAT 解決的問題:

  1. IPV4 地址不夠的問題
  2. 私有地址不能在公網上傳輸的問題

NAT 型別

Static NAT:一對一地址轉換,一個私有對一個公有

Dynamic NAT:多對多地址轉換,一組私有對一組公有

PAT:多對一地址轉換,一組私有對一個公有

NAT 通訊過程

Local 地址:轉換前的私有地址

Global 地址:轉換後的公有地址

如果以出口路由器為視角,和內部相連的稱為 Inside 區域,和 ISP 相連稱為 Outside 區域。則目前看共有四個 IP:

型別 描述
Inside Local 內部轉換前的私有地址
Outside Local 想要去往的公有地址
Inside Global 內部轉換後的公有地址
Outside Global 想要去往的公有地址

初始方向:是將Inside Local 轉換為 Inside Global 地址。

回來方向:將 Inside Global 裝換為 Inside Local.

轉換方式:

Inside Local -> Inside Global: 從內部到外部,

ip nat inside source 

Inside Global -> Inside Local: 從外部到內部,

ip nat inside destination 

Outside global -> Outside local: 一般用到同網段的合併

ip nat outside source 

入介面過程:

  1. 先檢查 ACL
  2. 查路由表
  3. NAT 轉換
  4. 查路由表(將 Outside Global 轉換成 Outside Local,會有該步驟)

出介面過程:

  1. 先檢查 ACL
  2. 查 NAT
  3. 查 路由表

NAT 的 Trade-off

優點:

  1. 保留了公網地址
  2. 保持了網路通訊的一致性
  3. 提供了安全性(因為在公網視角,並不知道公司區域網內部的 NAT 轉換前的地址)

缺點:

  1. 缺失了端到端的連線
  2. 端到端的跟蹤丟失
  3. 隧道技術變得更難配置
  4. TCP 內部可能中斷(校驗和可能不通過)
  5. 降低裝置效能

NAT 配置

配置流程:

  1. 確定 inside 和 outside
  2. 確定 inside local 地址
  3. 確定 outside global 地址
  4. 配置

實現效果:

R1 表示內網,有 192.168.1.0 和 2.0 網段,配置預設路由將其資料包發給 R2.

R2 上開啟靜態路由到 192.168.1.0 和 2.0 網段,模擬內網情況。另外開啟 EIGRP 表示和外網通訊,注意這裡僅僅開始 e0/1 23.1.1.0 所在網路。

R3 表示外網,配置 3.3.3.0 和 23.1.1.0 網路,納入 EIGRP.

目前看 R1 ping 3.3.3.3 網路並不能通訊(因為在 R3 沒有去往 192.168.1.0 和 2.0 的路由),但可在 R2 上配置 NAT 進行轉換。

Static 配置:

# R1
interface Loopback0
 ip address 192.168.1.1 255.255.255.0
!
interface Loopback1
 ip address 192.168.2.1 255.255.255.0
!
interface Ethernet0/0
 ip address 12.1.1.1 255.255.255.0
# 預設路由
ip route 0.0.0.0 0.0.0.0 12.1.1.2

# R2 
# 給公網網段配置一個介面,用於 EIGRP 傳遞
interface Loopback0
 ip address 2.2.2.2 255.255.255.0
!
interface Ethernet0/0
 ip address 12.1.1.2 255.255.255.0
 ip nat inside
 !
interface Ethernet0/1
 ip address 23.1.1.1 255.255.255.0
 ip nat outside
!
router eigrp 100
 network 2.2.2.0 0.0.0.255
 network 23.1.1.0 0.0.0.255
!
ip nat inside source static 192.168.1.1 2.2.2.10
ip nat inside source static 192.168.2.1 2.2.2.20
ip route 192.168.1.0 255.255.255.0 12.1.1.1
ip route 192.168.2.0 255.255.255.0 12.1.1.1
!
Router#show ip nat translations
Pro Inside global      Inside local       Outside local      Outside global
--- 2.2.2.10           192.168.1.1        ---                ---
--- 2.2.2.20           192.168.2.1        ---                ---

# R3
!
interface Loopback0
 ip address 3.3.3.3 255.255.255.0
!
interface Ethernet0/0
 ip address 23.1.1.2 255.255.255.0
!
router eigrp 100
 network 3.3.3.0 0.0.0.255
 network 23.1.1.0 0.0.0.255
!

Dynamic 配置:

# R2
!
interface Ethernet0/0
 ip address 12.1.1.2 255.255.255.0
 ip nat inside
 !
interface Ethernet0/1
 ip address 23.1.1.1 255.255.255.0
 ip nat outside
!
# 宣告 local 範圍
Router(config)#access-list 10 permit 192.168.1.0 0.0.0.255
Router(config)#access-list 10 permit 192.168.2.0 0.0.0.255
# 宣告外網地址範圍
Router(config)#ip nat pool dynamic 2.2.2.1 2.2.2.254 netmask 255.255.255.0
# 應用 nat
Router(config)#ip nat inside source list 10 pool dynamic
Router(config)#end
Router#show ip nat translations
Pro Inside global      Inside local       Outside local      Outside global
icmp 2.2.2.1:14        192.168.1.1:14     3.3.3.3:14         3.3.3.3:14
--- 2.2.2.1            192.168.1.1        ---  

PAT 配置, 通過埠號區分:

# 宣告 local 範圍
Router(config)#access-list 10 permit 192.168.1.0 0.0.0.255
Router(config)#access-list 10 permit 192.168.2.0 0.0.0.255
# 應用 nat
Router(config)#ip nat inside source list 10 interface ethernet 0/1 overload