使用 NAT 轉發請求

NAT介紹:

  • DNAT
    發生在 natTable 的 PREROUTING 鏈上,正好在剛接收到封包的之後一步,對應的是 inbound 流量

  • SNAT
    發生在 natTable 的 POSTROUTING 鏈上,只允許被使用在靜態 IP,要求您為其提供一個 IP 位址以套用於所有傳出資料包,正好在傳送到網路卡前的最後一步,對應的是 outbound 流量

  • Masquerading
    只允許被用在動態分配 IP 位址的情況下,允許您為其提供一個接口,該接口上的任何地址,都是應用於所有傳出資料包的地址

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

iptables 中的 natTable 鏈:

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

  • INPUT鏈
    處理入站資料包

  • FORWARD鏈
    處理轉送封包

  • OUTPUT鏈
    處理出站資料包

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

確認路由

1
route -n
1
ip r | grep default

開啟 Linux 轉發

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

請求轉發至其它主機

建立 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

請求轉移至主機其它端口

可使用以下設定轉發端口

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

查詢 NAT 規則

查詢 NAT 設定

1
sudo iptables -t nat -S

查詢 NAT 規則對應

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

📜 參考資料

  1. ubuntu iptables