ssh上的UDP反向隧道(使用socat)

时间:2011-12-23 12:35:53

标签: ssh udp tunnel tunneling socat

我想设置一个反向udp隧道,因为我需要从远程连接到我的openvpn服务器,而openvpn服务器是在NAT后面。为此,我使用socat和ssh。 tcp隧道命令:

socat exec:"ssh removeserver \"socat tcp-listen:10000,fork -\"" tcp-connect:localhost:22

可以正常工作,然后我可以建立一个到remoteserver的连接:10000。

但是当我想用udp做同样的事情时:

socat exec:"ssh removeserver \"socat udp-listen:10000,fork -\"" udp-connect:localhost:1194

然后尝试构建openvpn连接,我收到以下错误:

2011/12/23 13:27:43 socat[28241] E read(3, 0x80c3b08, 8192): Connection refused

隧道最初似乎有效,因为日志文件(服务器和客户端)都有连接尝试的条目。但是无法建立联系。

1 个答案:

答案 0 :(得分:1)

我刚试过这个,我相信它失败的原因是因为隧道的ssh部分没有保留UDP数据报大小。 IE浏览器。一个14字节的数据报和一个22字节的数据报在另一端组合成一个26字节的数据报。 Openvpn在这种情况下不起作用。

我有一个与此类似的构造的概念验证成功,但是有一个程序读取UDP数据报并将它们转换为具有16位长度前缀的tcp流(即长度为字节的流,字节,长度,字节等),显然也是相反的。

有了这个我能够隧道openvpn。