使用嵌入式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
规则可以实施。
一些限制:
有关如何继续执行此任务的任何想法?提前谢谢。
编辑: socat
和netcap
都不可用......
答案 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
可行。