我想使用 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。
我也尝试使用 REDIRECT,但不知为何根本不起作用。客户端无法连接。
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
必要