咱们在阿里云开了一台服务器, 合做方那边的设备须要向服务器6000端口不停的发送UDP数据包, 我经过SSH和SOCAT把对服务器6000端口的数据包转发到我本地Macbook Pro的6000端口上以方便开发和测试工做.
目的是解决SSH仅支持TCP的问题
html
其中server_ip
为阿里云SSH服务器IP地址或域名. 使用时能够替换为你本身的服务器IP地址或域名.git
SSH服务器, SOCAT工具segmentfault
在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, 所以咱们用到了一个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