UDP 端口转发:通道 2:打开失败:连接失败:连接被拒绝

UDP 端口转发:通道 2:打开失败:连接失败:连接被拒绝

我的情况如下:

我目前正在尝试让两个主机之间的程序通过 SSH 隧道发送 UDP 数据包。两个主机之间还有一个中间主机。注意 Server01 分隔两个子网

子网: //// 10.11.XX ///////// 192.168.XX
主机:客户端 <--------> Server01 <-----> Server02

在此输入图像描述

我已成功建立 SSH 连接并使用 RSA 密钥,因此不需要密码。

我然后遵循了本教程:

UDP 的 SSH 端口转发

总之,它告诉我使用 socat 在 server01 上配置 TCP-UDP 中继,方法是输入:

server01$ socat tcp4-listen:8000,reuseaddr,fork udp:server02:53

以及客户端上使用 socat 的 UDP-TCP 中继:

client$ socat -T15 udp4-recvfrom:53000,reuseaddr,fork tcp:localhost:8000

现在问题来了。当我尝试让我的程序在本地主机 UDP 端口 53000 上创建一个套接字并发送数据时,

channel 2: open failed: connect failed: Connection refused
channel 2: open failed: connect failed: Connection refused
channel 2: open failed: connect failed: Connection refused

我相信我的程序很好,因为当我将 server02 放在与客户端相同的子网上时,我的程序将完美地交换 UDP 数据包。

我需要启用某个设置才能让我的程序访问 UDP 端口 53000 套接字吗?或者是因为 socat 使用它而无法在 UDP 端口上创建套接字?我已经被困在这个问题上有一段时间了......任何帮助都会很棒。

提前致谢。

答案1

我意识到该程序需要以 sudo 身份运行,以便它可以访问该端口...希望这对将来的人有帮助。

编辑:我的 c 程序需要 sudo 权限才能将套接字连接到 UDP 端口 53000 并通过该端口发送数据包。

答案2

socat这里是把TCP转换成UDP

但在你的解释中你没有谈论 ssh

您必须运行 ssh 才能-L转发client TCP 8000server01 tcp 8000

你必须 ssh -L 8000:localhost:8000 server01从你的客户那里运行类似的东西

相关内容