我的情况如下:
我目前正在尝试让两个主机之间的程序通过 SSH 隧道发送 UDP 数据包。两个主机之间还有一个中间主机。注意 Server01 分隔两个子网
子网: //// 10.11.XX ///////// 192.168.XX
主机:客户端 <--------> Server01 <-----> Server02
我已成功建立 SSH 连接并使用 RSA 密钥,因此不需要密码。
我然后遵循了本教程:
总之,它告诉我使用 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 8000
到server01 tcp 8000
你必须
ssh -L 8000:localhost:8000 server01
从你的客户那里运行类似的东西