使用 NAT 轉發請求

iptables 介紹

⭐ 封包進入規則

  • PREROUTING鏈 (通常用於DNAT)
    處理剛到本機並在路由轉送前的封包,它會轉換封包中的目標IP位址

  • INPUT鏈
    處理入站封包

  • FORWARD鏈 (不包含 NAT)
    處理轉送封包

  • OUTPUT鏈
    處理出站封包

  • POSTROUTING鏈 (通常用於SNAT)
    處理即將離開本機的封包,它會轉換封包中的來源IP位址

⭐ 封包處理方式

  • DNAT
    發生在 natTable 的 PREROUTING 鏈上,用於修改封包的目標 IP 位址,在剛接收到封包的之後一步,對應的是 inbound 流量

  • SNAT
    發生在 natTable 的 POSTROUTING 鏈上,要求您為其提供一個靜態 IP 位址以套用於傳出封包,在傳送到網路卡前的最後一步,對應的是 outbound 流量

  • Masquerading
    當配置完成後,發自該接口的封包,其來源 IP 會被替換為該接口的 IP,從而讓回應能正確路由回該接口

  • Redirection
    將封包轉發到本地系統的其他端口,而不是轉發到內部網絡中的其他主機

確認路由表

1
route -n
1
ip r | grep default

開啟 Linux 轉發

1
sudo sysctl -w net.ipv4.ip_forward=1

請求轉移至本機其它端口

可使用以下設定轉發端口

1
sudo iptables -t nat -A PREROUTING -p tcp --dport [服務端口] -j REDIRECT --to-port [轉發端口]

請求轉發至其它主機

⭐ 建立 DNAT:

1
sudo iptables -t nat -A PREROUTING -p tcp -d [服務IP] --dport [服務端口] -j DNAT --to-destination [轉發IP]:[轉發端口]

⭐ 回應客戶端(擇一設定)

  • 建立 SNAT 回應客戶端:
1
sudo iptables -t nat -A POSTROUTING -p tcp -d [轉發IP] --dport [轉發端口] -j SNAT --to-source [服務IP]
  • 建立 MASQUERADE 回應動態客戶端:
1
sudo iptables -t nat -A POSTROUTING -j MASQUERADE

查詢 NAT 規則

查詢 NAT 設定

1
sudo iptables -t nat -S

查詢 NAT 規則對應

1
sudo iptables -t nat -L -n -v

📜 參考資料

  1. ubuntu iptables