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