如何實現Linux網絡地址轉換 iptables NAT配置實例

開啟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配置實例

linux系統中,使用iptables配置NAT(網絡地址轉換)是實現私有網絡與公網通信的常見做法。如果你有一臺具備公網IP的服務器,并希望它作為網關為內部主機提供互聯網訪問能力,那么掌握iptables的NAT配置就非常實用了。

如何實現Linux網絡地址轉換 iptables NAT配置實例


1. 確保內核支持IP轉發

在開始配置之前,首先要確保Linux內核允許IP轉發。這個功能默認通常是關閉的。

如何實現Linux網絡地址轉換 iptables NAT配置實例

  • 臨時開啟(重啟后失效):
echo 1 > /proc/sys/net/ipv4/ip_forward
  • 永久生效:修改/etc/sysctl.conf文件,添加或修改以下行:
net.ipv4.ip_forward = 1

然后執行:

sysctl -p

這一步是基礎,如果沒開IP轉發,后面的NAT規則將無法正常工作。

如何實現Linux網絡地址轉換 iptables 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也可能不通。

  • 保存規則:不同發行版保存方式略有不同:

    • centos/RHEL:

      service iptables save
    • ubuntu/debian(需安裝iptables-persistent):

      iptables-save > /etc/iptables/rules.v4
  • 測試方法

    • 使用tcpdump抓包排查問題;
    • 在客戶端嘗試訪問,觀察日志或連接狀態。

基本上就這些。配置NAT其實不復雜,但細節容易忽略,尤其是轉發控制和規則持久化方面。只要注意接口、網段和規則順序,就能順利搭建起基本的NAT網關。

? 版權聲明
THE END
喜歡就支持一下吧
點贊13 分享