Linux

如何使用 iptables 進行埠轉發?

  • May 13, 2020

我希望埠 8001 上 ppp0 上的連接被路由到埠 8080 上 eth0 上的 192.168.1.200。

我有這兩條規則

-A PREROUTING  -p tcp -m tcp --dport 8001 -j DNAT --to-destination 192.168.1.200:8080

-A FORWARD -m state -p tcp -d 192.168.1.200 --dport 8080 --state NEW,ESTABLISHED,RELATED -j ACCEPT

它不起作用。我錯過了什麼?

首先 - 您應該檢查是否允許轉發:

cat /proc/sys/net/ipv4/conf/ppp0/forwarding 
cat /proc/sys/net/ipv4/conf/eth0/forwarding 

如果兩者都返回1就可以了。如果沒有,請執行以下操作:

echo '1' | sudo tee /proc/sys/net/ipv4/conf/ppp0/forwarding
echo '1' | sudo tee /proc/sys/net/ipv4/conf/eth0/forwarding

第二件事 -DNAT只能應用於nat桌子。因此,您的規則也應該通過添加表規範來擴展(-t nat):

iptables -t nat -A PREROUTING -p tcp -i ppp0 --dport 8001 -j DNAT --to-destination 192.168.1.200:8080
iptables -A FORWARD -p tcp -d 192.168.1.200 --dport 8080 -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT

這兩個規則僅適用於 TCP 流量(如果您也想更改 UDP,您需要提供類似的規則,但需要-p udp設置選項)。

最後但並非最不重要的是路由配置。類型:

ip route

並檢查是否192.168.1.0/24在返回的路由條目中。

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