【问题标题】:How do I tunnel udp over ssh?如何通过 ssh 隧道 udp?
【发布时间】:2011-07-29 19:09:40
【问题描述】:
我正在开发一个收集网络设备上各种信息的 Java 应用程序。所有这些设备都位于网络堡垒后面,我使用 JSch 按需创建到远程设备的 TCP 隧道。这适用于基于 TCP 的 TL1 等协议。但是我确实发现自己也需要收集 SNMP 数据。
我可以访问的堡垒服务器相当陈旧且有限,而且我没有很多选择可以在那里构建 SNMP 代理。我的问题是社区是否知道根据需要以编程方式建立隧道的干净、可靠的方法。我查看了诸如this one 之类的解决方案,但由于我有成千上万个可能的IP 地址,因此手动一次性方法是不可行的。如果需要的话,我会推动一个能够做一个强大的 snmp 代理的服务器,但我需要知道在我战斗之前没有其他方法。
【问题讨论】:
标签:
java
ssh
udp
snmp
tunnel
【解决方案1】:
SSH 协议不包含任何用于 UDP 转发的内容。
所以你需要在 SSH 服务器端运行一些程序,它会为你发送 UDP 数据包,并接收发送的数据包。
我不知道 SNMP 的详细信息,但对于简单的情况,您可以简单地使用 exec 通道启动 netcat 或 socat,通过标准输入/标准输出发送数据包。
我想这样的事情可以做到:
netcat -u server 161
或者socat:
socat STDIO UDP:server:161
【解决方案2】:
要将 udp:server:3200 转发到当前机器,请执行以下操作:
socat SYSTEM:"ssh server socat - udp\:127.0.0.1\:3200" udp-l:3200,fork,reuseaddr
请注意,在使用隧道之前,必须打开并监听 surver 上的 udp 端口 3200。