SSH: 使用SSH+SOCAT中继UDP数据包

我们在阿里云开了一台服务器, 合作方那边的设备需要向服务器6000端口不停的发送UDP数据包, 我通过SSH和SOCAT把对服务器6000端口的数据包转发到我本地Macbook Pro的6000端口上以方便开发和测试工作.

网络

其中server_ip为实际的SSH服务器IP地址或域名.

SSH端口转发需要的工具

SSH服务器, SOCAT工具

SSH的TCP端口转发

ssh -vv -N -R 80:127.0.0.1:80 root@server_ip

上面的命令在客户端和SSH服务器之间建立了一根相互连接的隧道. 隧道的入口为本机地址 127.0.0.1:80, 出口为 0.0.0.0:80

SSH的UDP端口转发

由于SSH并不直接支持UDP, 因此我们用到了一个UDP中继工具 socat (SOcket CAT)

把服务器在UDP 6000端口上收到的UDP数据包转发到服务器本地8000 TCP端口上.

socat -T15 udp4-recvfrom:6000,reuseaddr,fork tcp:localhost:8000

此时UDP数据包会通过SSH隧道到达我本机笔记本的8000端口上, 我们还需要开一个转换器, 让本地8000端口接收到的TCP数据包转换为UDP数据包, 并发送到本地 6000 UDP端口上.

socat tcp4-listen:8000,reuseaddr,fork udp:127.0.0.1:6000

现在我的本机就看到了, 从服务器6000端口, 通过SSH隧道过来的UDP数据包了.

对于SSH的远程转发, 需要在SSH服务器端的/etc/ssh/sshd_config配置文件中增加GatewayPorts yes

参考资料

SSH Port Forwarding for TCP and UDP Packets
Performing UDP tunneling through an SSH connection

关键字:ssh, udp, linux, 端口


本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部