NAT - 網路地址轉換
NAT
我們知道,一般在公司內部都使用私有地址進行通訊。但由於私有地址只能在區域網中傳輸,如果想要外網上傳輸就需要公有地址。通常來說採用如下的架構,在出口路由器上配置一個公有 IP 和 ISP 的入口相連。
如果公司內部的裝置想要和外網進行通訊,就通過 R1 將私有 IP 轉換成公有 IP 進行訪問。這個轉換的技術就稱為 NAT - 網路地址轉換,讓內部的網路共享一個或多個公網地址繼續訪問。
NAT 解決的問題:
- IPV4 地址不夠的問題
- 私有地址不能在公網上傳輸的問題
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
入介面過程:
- 先檢查 ACL
- 查路由表
- NAT 轉換
- 查路由表(將 Outside Global 轉換成 Outside Local,會有該步驟)
出介面過程:
- 先檢查 ACL
- 查 NAT
- 查 路由表
NAT 的 Trade-off
優點:
- 保留了公網地址
- 保持了網路通訊的一致性
- 提供了安全性(因為在公網視角,並不知道公司區域網內部的 NAT 轉換前的地址)
缺點:
- 缺失了端到端的連線
- 端到端的跟蹤丟失
- 隧道技術變得更難配置
- TCP 內部可能中斷(校驗和可能不通過)
- 降低裝置效能
NAT 配置
配置流程:
- 確定 inside 和 outside
- 確定 inside local 地址
- 確定 outside global 地址
- 配置
實現效果:
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