【发布时间】:2017-12-25 10:49:03
【问题描述】:
在嵌入式 Linux 系统上工作(资源有限),我当前的应用程序要求外部设备通过以太网 TCP/IP 在端口 502 上与该板通信。默认情况下,在 *nix 环境下,1024 以下的端口被阻止。
那么,假设外部设备在 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 地址,因为它可以从不同的设备各自建立连接。
对如何继续这项任务有任何想法吗?提前致谢。
编辑:socat 和 netcap 都不可用...
【问题讨论】:
标签: linux sockets iptables portforwarding