SSH 隧道 + Socat UDP + 单播 + 多播

SSH 隧道 + Socat UDP + 单播 + 多播

我正在尝试从一台本地机器(坐在家里)与一台科学仪器(SCIENTIFIC,IP=192.168.1.109)进行通信,该仪器与一台树莓派(服务器)一起位于远程网络中。SCIENTIFIC 在 udp 端口​​ 12109 上接收订单,并通过端口 12000 上的 udp 广播进行应答。

首先,我可以按照说明向 INSTRUMENT 发送订单这里使用 TCP-UDP 中继。我首先设置了从本地机器到服务器的 SSH 隧道。

toto@LOCAL:~$ ssh -L 8001:localhost:8001 Raspberry_ext

其中 Raspberry_ext 允许通过多台 Linux 机器反弹以通过服务器。然后,在服务器上,我启动:

pi@raspberrypi:~ $ socat tcp4-listen:8001,reuseaddr,fork udp:192.168.1.109:12109

然后在本地:

toto@LOCAL:~$ socat -T15 udp4-recvfrom:12109,reuseaddr,fork tcp:localhost:8001

通过这种方式,我确实可以从 LOCAL 向 INSTRUMENT 发送命令:

toto@LOCAL:~$ nc -u localhost 12109 
*IDN?

确实,在服务器上,我可以毫无困难地看到答案:

pi@raspberrypi:~ $ nc -u -l 12000
LHLM-137F

但是,我无法捕获来自 INSTRUMENT 的 UDP 广播并通过 SERVER 将其隧道传输回 LOCAL。我尝试创建另一个 ssh 隧道:

toto@LOCAL:~$ ssh -L 8000:localhost:8000 Raspberry7_ext

但是,我不知道如何处理 UDP 广播。我尝试了以下方法:

pi@raspberrypi:~ $ socat -T15 udp4-recvfrom:12000,reuseaddr,fork tcp:localhost:8000

但是在本地,我不知道如何捕获来自端口 8000 的流量。我的天真尝试失败了:

toto@LOCAL:~$ socat tcp-listen:8000,fork udp:localhost:12000
2020/03/13 00:39:26 socat[10654] E bind(5, {AF=2 0.0.0.0:8000}, 16): Address already in use

谢谢

答案1

最后,我创建了一个反向 SSH 隧道,并设法通过它从端口 12000 发回 UDP 数据包。

最好的,

相关内容