使用 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 |
📜 參考資料