我想使用 iptables 轉送流量,而不向發送主機顯示不同的 ip/連接埠。
我的應用程式使用 TCP 偵聽主機 xx15.42、連接埠 23555。客戶端將連接到 xx15.42:5555。我希望將連接轉發到連接埠 23555,而不將該連接埠暴露給客戶端。
我已經嘗試過使用 DNAT:
iptables -t nat -A PREROUTING -p tcp --dport 5555 -j DNAT --to-destination x.x.15.42:23555
但對於客戶端來說,它會顯示他們正在連接到連接埠 23555。
我也嘗試過使用重定向,但由於某種原因根本不起作用。客戶端無法連線。
iptables -t nat -A PREROUTING -p tcp --dport 5555 -d x.x.15.42 -j REDIRECT --to-port 23555
如何轉送此流量,同時使其看起來像應用程式正在偵聽連接埠 5555?
答案1
所以我使用的第一個防火牆規則有效:
iptables -t nat -A PREROUTING -p tcp --dport 5555 -j DNAT --to-destination x.x.15.42:23555
唯一的問題確實是伺服器告訴客戶端連接到連接埠 23555,而不是像我想要的那樣連接到連接埠 5555。在伺服器部分進行更改可以解決問題。
答案2
我只是 iptables 的涉足者,所以你可以嘗試一下:
iptables -A PREROUTING -t nat -i eth0 -p tcp --dport 5555 -j DNAT --to x.x.15.42:23555
iptables -A FORWARD -p tcp -d x.x.15.42 --dport 23555 -j ACCEPT
這兩行都是需要的(我認為這是由於缺少 FORWARD 選項導致的),儘管不確定介面選項是否-i eth0
是必要的