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

咱们在阿里云开了一台服务器, 合做方那边的设备须要向服务器6000端口不停的发送UDP数据包, 我经过SSH和SOCAT把对服务器6000端口的数据包转发到我本地Macbook Pro的6000端口上以方便开发和测试工做. 目的是解决SSH仅支持TCP的问题html

网络

图片描述

其中server_ip为阿里云SSH服务器IP地址或域名. 使用时能够替换为你本身的服务器IP地址或域名.git

SSH端口转发须要的工具

SSH服务器, SOCAT工具segmentfault

SSH的TCP端口转发

client端运行以下命令服务器

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

上面的命令在客户端和SSH服务器之间创建了一根相互链接的隧道. 隧道客户端地址为本机地址 127.0.0.1:8000, 服务器端地址为 0.0.0.0:8000(监听在0.0.0.0表示绑定服务器的全部接口地址, 这样客户端可以访问服务器端的全部接口地址)网络

SSH的UDP端口转发

因为SSH并不直接支持UDP, 所以咱们用到了一个UDP中继工具 socat (SOcket CAT)并发

把服务器在UDP 6000端口上收到的UDP数据包转发到服务器本地8000 TCP端口上. 在 server 端运行以下命令:ssh

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

此时UDP数据包会经过SSH隧道到达我本机笔记本的8000端口上, 咱们还须要开一个转换器, 让本地8000端口接收到的TCP数据包转换为UDP数据包, 并发送到本地 6000 UDP端口上. 在 client 端运行以下命令:tcp

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

如今个人本机就看到了, 从服务器6000端口, 经过SSH隧道过来的UDP数据包了.工具

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

下图为erlang编写的一个简单udp服务器接收到数据包时的输出.

图片描述

参考资料

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

相关文章
相关标签/搜索