什么是NAT?
NAT 全稱是 Network Address Translation(網絡地址轉換),是一個用來在多個設備共享一個公網 IP上網的技術。
NAT 的核心作用:將一個網絡中的私有 IP 地址,轉換為公網 IP 地址,從而實現上網功能。
沒有NAT的情況:
🌐 環境準備
🖥 VMware 創建兩臺 Linux 虛擬機:
server1:nat-router
- 作用: NAT 路由器,作為網絡地址轉換的中介。
- 網卡配置:
ens32
:NAT 模式(連接外網)ens33
:僅主機模式(與 server2 通信)
[root@nat-router ~]# cat /etc/sysconfig/network-scripts/ifcfg-ens32
BOOTPROTO=static
NAME=ens32
DEVICE=ens32
ONBOOT=yes
IPADDR=192.168.100.202
NEKMASK=255.255.255.0
GATEWAY=192.168.100.2
DNS1=223.5.5.5
DNS2=8.8.8.8[root@nat-router ~]# cat /etc/sysconfig/network-scripts/ifcfg-ens33
DEVICE=ens33
BOOTPROTO=static
ONBOOT=yes
IPADDR=192.168.200.253
NETMASK=255.255.255.0
server2:nat-client
- 作用: NAT 客戶端,通過 server1 上網。
- 網卡配置:
ens32
:僅主機模式(連接 server1)
[root@nat-client ~]# cat /etc/sysconfig/network-scripts/ifcfg-ens32
BOOTPROTO=static
NAME=ens32
DEVICE=ens32
ONBOOT=yes
IPADDR=192.168.200.201
NEKMASK=255.255.255.0
GATEWAY=192.168.200.253
DNS1=223.5.5.5
🧱 NAT 實現原理
🔧 使用 iptables
實現 NAT 轉換
iptables
是一個 防火墻工具,用于配置 Linux 內核的網絡行為。- 本身不做 NAT 轉換,它的作用是 告訴內核怎么做。
?? 實際執行 NAT 轉換的是 Linux 內核
- 負責對底層網絡數據包進行管理、處理與轉發。
- 管理網卡、路由、數據包過濾等功能。
NAT 數據包處理流程:
人(配置命令) -> iptables(設置規則) -> 內核(執行SNAT) -> 網絡通信
🔐 防火墻(Firewall)概念
- 作用: 管控進出網絡的數據,防止非法訪問或數據泄露。
- Linux 中常見防火墻工具有:
iptables
(傳統,功能強大)firewalld
(基于 zone 的新型防火墻,CentOS 7+ 默認)
server1
(NAT 路由器)上配置 SNAT(源地址轉換)
# 清除規則
iptables -F
iptables -t nat -F
- 清除原有的 iptables 規則,避免舊規則干擾。
-F
:清空 filter 表(默認表)的所有規則。-t nat -F
:清空 nat 表的所有規則。
# 開啟路由功能
echo 1 > /proc/sys/net/ipv4/ip_forward
- 啟用 IP 轉發,使 Linux 內核可以作為路由器轉發數據包。
iptables -t nat -A POSTROUTING -s 192.168.200.0/24 -o ens32 -j SNAT --to-source 192.168.100.202
- 設置 SNAT 規則:
-t nat
:操作 NAT 表。-A POSTROUTING
:在數據包離開本機之前改變源地址。-s 192.168.200.0/24
:匹配從 nat-client 發來的內網地址段。-o ens32
:數據包從哪張網卡出去(外網網卡)。-j SNAT --to-source 192.168.100.202
:將源地址改成 server1 外網 IP。
[root@nat-router ~]# iptables -t nat -nL
Chain PREROUTING (policy ACCEPT)
target prot opt source destinationChain INPUT (policy ACCEPT)
target prot opt source destinationChain OUTPUT (policy ACCEPT)
target prot opt source destinationChain POSTROUTING (policy ACCEPT)
target prot opt source destination
SNAT all -- 192.168.200.0/24 0.0.0.0/0 to:192.168.100.202
nat-client測試網絡情況
My traceroute [v0.85]
nat-client (0.0.0.0) Sat Apr 5 22:15:10 2025
Keys: Help Display mode Restart statistics Order of fields quitPackets PingsHost Loss% Snt Last Avg Best Wrst StDev1. 192.168.200.253 0.0% 7 0.5 0.5 0.4 0.7 0.02. 192.168.100.2 0.0% 7 0.5 0.7 0.4 1.3 0.03. ???
可以看到正常轉發網絡請求