允许通过双向端口转发在端口 502 上进行传入连接

Allow incoming connection on Port 502 with bidirectional port forwarding

在嵌入式 Linux 系统上工作(资源有限),我当前的应用程序要求外部设备通过以太网 TCP/IP 在端口 502 上与该板通信。默认情况下,端口在1024 在 *nix 环境下被阻止。

那么,假设外部设备在 502 上打开一个端口,而嵌入式设备在 8502 上侦听。我怎样才能透明地允许这些设备之间的双向通信?

好消息是授予 ROOT 访问权限以实施此端口转发解决方案,它将驻留在嵌入式 Linux 设备内连续 运行,但尚未找到正确的命令为此。

我尝试使用 iptables,并结合以下命令:

iptables -A INPUT -p tcp --dport 502 -j ACCEPT
iptables -A OUTPUT -p tcp --dport 502 -j ACCEPT
iptables -A INPUT -p tcp --dport 8502 -j ACCEPT
iptables -A OUTPUT -p tcp --dport 8502 -j ACCEPT
iptables -t nat -A PREROUTING -p tcp --dport 502 -j DNAT --to 0.0.0.0:8502
iptables -A INPUT -p tcp --dport 502 -m state --state NEW,ESTABLISHED -j ACCEPT
iptables -A OUTPUT -p tcp --sport 502 -m state --state ESTABLISHED -j ACCEPT
iptables -A PREROUTING -t nat -i eth0 -p tcp --dport 502 -j DNAT --to 127.0.0.1:8502
iptables -t nat -I OUTPUT -p tcp -o eth0 --dport 8502 -j REDIRECT --to-ports 502

最后,执行 iptables-save 以便可以实施规则。

一些限制:

对如何继续执行此任务有任何想法吗?提前致谢。

编辑: socatnetcap 都不可用...

以防其他人偶然发现这个问题:不幸的是,我的 iptables 版本不支持 REDIRECT,这对于使其正常工作至关重要。 所以解决方案是为我的硬件编译另一个应用程序。在这种情况下 socat.

使我的应用程序运行的命令是:

socat TCP-LISTEN:502,fork TCP-CONNECT:127.0.0.1:8502

希望对以后的需要有所帮助。

我有一个脚本功能,用于在网关和服务器之间创建到端口 502 的重定向:

iptables -t nat -A POSTROUTING -p tcp -d $ip --dport 502 -j MASQUERADE
iptables -t nat -A PREROUTING -i br0 -p tcp --dport 502 -j DNAT --to $ip:502
iptables -t nat -A PREROUTING -d $vpnip -p tcp -m multiport --dports 502 -j DNAT --to-destination $ip:502

有效。