Iptables

iptables:關於本地生成並前往本地的數據包

  • February 25, 2021

本地生成並前往本地的數據包是否採用 PREROUTING 鏈?

我在 iptables 中添加了一些規則,將我的公共 IP 的 http 請求轉發到本地綁定的 Nginx。

iptables -t nat -A PREROUTING -i enp3s0f0 -p tcp --dport 80 -j DNAT --to-destination 127.0.0.1
iptables -t nat -A POSTROUTING -o lo -p tcp --sport 80 -j SNAT --to-source xxx.yyy.zzz.www

並將過濾表 FORWARD 鏈的策略設置為 ACCEPT。

結果,這些規則起作用了,我可以在另一台機器上訪問 Nginx,但我無法在具有 xxx.yyy.zzz.www IP 的機器上訪問 xxx.yyy.zzz.www。(帶捲曲和鉻)

為什麼我在xxx.yyy.zzz.www機器上無法訪問Nginx?

不,本地發起的數據包不會通過 PREROUTING 鏈(請參閱此wiki 圖- 本地數據包的路徑從本地程序塊開始)。此外,這些數據包僅通過 INPUT/OUTPUT 鏈,從不通過 FORWARD。

要重定向本地發起的數據包,您應該將 DNAT/REDIRECT 規則插入 nat/OUTPUT 鏈:

iptables -t nat -A OUTPUT -p tcp --dst xxx.yyy.zzz.www --dport 80 \
 -j DNAT --to-destination 127.0.0.1

引用自:https://serverfault.com/questions/900257