局域網內的機器可以通過 NAT 網關來訪問外網。
- 192.168.128.140
- 192.168.128.141
- 192.168.128.142
- 192.168.128.145(可訪問外網)
上例145機器可以訪問外網。其他局域網機器可以將請求發送給145機器,145機器發出去后,再原路將響應數據返還給局域網機器。這個過程就是 NAT 轉換。
NAT 映射表記錄了轉換關系。
源IP | 源端口 | NAT 網關機器IP | NAT 網關機器端口 | 目標IP | 目標端口 |
---|---|---|---|---|---|
192.168.128.140 | 8080 | 192.168.128.145 | 18080 | 172.217.27.142 | 80 |
- 192.168.128.140:8080 [request google.com] --> 192.168.128.145:18080
- 192.168.128.145:18080 [request google.com] --> google.com (172.217.27.14:80)
- google.com [response] --> 192.168.128.145:18080
- 查找映射表得知,18080獲得的數據返還給 192.168.128.140:8080
- google.com [response] --> 192.168.128.140:8080
使用 Iptables 實現 NAT 轉換
商用 NAT 轉換通常使用專業的 NAT 路由器或防火牆。簡單可以通過在網關配置 iptables 規則實現 NAT 轉換。
本次實驗:
- 192.168.128.140 --> 192.168.128.145
- 192.168.128.145 -—> 外網IP
重點是將 192.168.128.140 Gateway 網關重定向到 192.168.128.145 即可。
注意事項:
- 外網機器(192.168.128.145)需要支持並配置NAT轉發。
- 內網機器需要選擇實際使用的網卡來配置網關,注意DNS映射(
/etc/resolv.conf
,可修改為8.8.8.8
);
檢查外網機器是否已經打開轉發
# 查看是否已經打開,如果值為1,則已經打開
sysctl -a |grep 'net.ipv4.ip_forward'
# 未打開則需要修改配置文件 /etc/sysctl.conf,修改參數為1
net.ipv4.ip_forward = 1
#生效
sysctl -p
外網機器配置 NAT 轉發規則
# 查看防火牆
[root@svr-145 ~]# service iptables status
# 設置NAT轉換
## 單台機器
iptables -t nat -A POSTROUTING -s 192.168.128.140 -j SNAT --to 192.168.128.145
## 單個子網
iptables -t nat -A POSTROUTING -s 192.168.128.0/255.255.255.0 -j SNAT --to 192.168.128.145
內網機器 配置網關
# 設置網關
[root@svr-140 ~]# vim /etc/sysconfig/network-scripts/ifcfg-eth0
GATEWAY=192.168.128.145
# 重啟網卡
[root@svr-140 ~]# service network restart
[root@svr-140 ~]# ping google.com
PING google.com (172.217.27.142): 56 data bytes
64 bytes from 172.217.27.142: icmp_seq=0 ttl=48 time=55.486 ms
...
例子雖然簡單,但能描述清楚 NAT 轉換的過程。