允许端口502上的传入连接使用双向端口转发

时间:2017-07-19 23:47:07

标签: linux sockets iptables portforwarding

使用嵌入式Linux系统(资源有限),我当前的应用程序要求外部设备通过端口502上的以太网TCP / IP与该板通信。默认情况下,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规则可以实施。

一些限制:

  • 因为它是一个受限制的设备,无法安装新的软件包(远非内置apt-get ......);
  • 无法预测外部设备的IP地址,因为它可以来自不同设备的每个已建立的连接。

有关如何继续执行此任务的任何想法?提前谢谢。

编辑: socatnetcap都不可用......

2 个答案:

答案 0 :(得分:0)

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

使我的应用程序工作的命令是:

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

希望它对未来的需求有所帮助。

答案 1 :(得分:0)

我有一个脚本函数,用于在网关和服务器之间创建到端口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

可行。