開啟ip轉發:臨時用echo 1 > /proc/sys/net/ipv4/ip_forward,永久生效則修改sysctl.conf并執行sysctl -p;2. 配置snat:使用masquerade或snat在postrouting鏈中設置源地址轉換;3. 配置dnat:在prerouting鏈中添加規則將公網端口轉發至內網主機,并在forward鏈中放行對應流量;4. 注意事項包括確認接口名稱、保存規則及測試方法。按照以上步驟可實現私有網絡與公網的nat通信。
在linux系統中,使用iptables配置NAT(網絡地址轉換)是實現私有網絡與公網通信的常見做法。如果你有一臺具備公網IP的服務器,并希望它作為網關為內部主機提供互聯網訪問能力,那么掌握iptables的NAT配置就非常實用了。
1. 確保內核支持IP轉發
在開始配置之前,首先要確保Linux內核允許IP轉發。這個功能默認通常是關閉的。
- 臨時開啟(重啟后失效):
echo 1 > /proc/sys/net/ipv4/ip_forward
- 永久生效:修改/etc/sysctl.conf文件,添加或修改以下行:
net.ipv4.ip_forward = 1
然后執行:
sysctl -p
這一步是基礎,如果沒開IP轉發,后面的NAT規則將無法正常工作。
2. 配置SNAT讓內網主機上網
SNAT(源地址轉換)用于讓內網設備通過一個公網IP訪問外部網絡。假設你的公網網卡是eth0,內網接口是eth1,并且內網網段是192.168.10.0/24。
基本命令如下:
iptables -t nat -A POSTROUTING -s 192.168.10.0/24 -o eth0 -j MASQUERADE
如果你有固定的公網IP,也可以使用SNAT代替MASQUERADE:
iptables -t nat -A POSTROUTING -s 192.168.10.0/24 -o eth0 -j SNAT --to-source 公網IP
這樣配置之后,所有來自192.168.10.0/24的流量都會被偽裝成公網IP發出。
3. 配置DNAT開放內網服務給外網訪問
DNAT(目的地址轉換)用于將公網訪問映射到內網主機上。例如,你想把外網對本機80端口的訪問轉發給內網的Web服務器(IP為192.168.10.100)。
可以使用如下規則:
iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 80 -j DNAT --to-destination 192.168.10.100:80
此外,還需要允許轉發流量:
iptables -A FORWARD -p tcp -d 192.168.10.100 --dport 80 -j ACCEPT
這條規則的意思是,當有人訪問你公網IP的80端口時,會被轉到內網的Web服務器上。
4. 注意事項和常見問題
-
接口名稱要確認正確:不同機器上的網卡名可能不同(如ens33、enp0s3等),建議用ip a查看。
-
防火墻規則順序很重要:不要忘記添加FORWARD鏈的放行規則,否則即使做了DNAT也可能不通。
-
保存規則:不同發行版保存方式略有不同:
-
測試方法:
- 使用tcpdump抓包排查問題;
- 在客戶端嘗試訪問,觀察日志或連接狀態。
基本上就這些。配置NAT其實不復雜,但細節容易忽略,尤其是轉發控制和規則持久化方面。只要注意接口、網段和規則順序,就能順利搭建起基本的NAT網關。