Linux上使用socat创建双向UDP隧道

3
可以使用socat创建双向UDP隧道吗?起点是一个客户端(C)与服务器(S)通信并收到响应,所以C⟷S。当然,C和S位于不同的网络上,并且它们之间有中继(R),因此需要C⟷R⟷S。该中继正在运行Ubuntu Linux。
例如,根据此文章使用socat: sudo nohup socat UDP-LISTEN:1194,fork,reuseaddr UDP:IP-ADDRESS-OF-HOME-ROUTER:1194 & 显然,这将导致中继(R)接收的所有数据包都被转发到IP-ADDRESS-OF-HOME-ROUTER,包括来自服务器的回复数据包或C⟶R⟷S。
因此,我的问题是,是否可能使socat等待来自服务器的回复数据包,并将它们转发回客户端?或者也许还有其他方法可以完成此目标?

1
我没有尝试过,但你可以尝试使用UDP-RECVFROMUDP-SENDTO。我还建议阅读/浏览手册 - Hasturkun
我认为你是正确的,根据你提供的文档链接,它应该可以工作。 - user23952
1个回答

2
第二种方法(使用UDP-RECVFROM/UDP-SENDTO的数据报)仅在查询/响应模式下工作;如果OpenVPN服务器连续发送第二个答案,则不会传递回客户端;并且对于每个查询数据包,都将分叉一个子进程。
第一种方法每个“连接”(由源端口确定)分叉一个子进程,并在客户端发送初始数据包后双向转发。 子进程会“永远”挂起,因此建议使用超时选项-T 3600或类似选项。

这很有道理,可能解释了为什么连接不稳定。 - user23952

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接