【问题标题】:A proxy that bridges simultaneous clients to a single connection将同时的客户端桥接到单个连接的代理
【发布时间】:2012-04-18 20:27:31
【问题描述】:

我正在寻找一种工具(在 linux 下),它允许我设置一个端到端代理,该代理在一个端口上同时接受多个客户端,通过一个 单个端口将数据转发到另一端 连接然后“扩展”另一端的连接以连接回接受多个连接的服务。为了澄清,这是我想要实现的图表:

http://i.stack.imgur.com/rgTMd.png

(显然我需要超过 10 个代表才能将图像嵌入此页面)

如果您有兴趣,我尝试这样做的原因是因为我想构建一个系统,该系统可以更轻松地通过任意协议进行隧道传输,只要协议支持某种方式从一端到另一端。在上图中,我会将系统放在代理端 A 和代理端 B 之间。

这是我希望它如何工作的示例:

首先我将运行以下命令

mkfifo backpipe

nc -l 7778 0<backpipe | tee f1 | nc localhost 7777 | tee f2 >backpipe

“服务器代理”将在端口 7777 上运行。

应用程序将连接到的“客户端代理”将在端口 8080 上运行

客户端代理将连接到端口 7778

求解“服务器代理”和“客户端代理”

【问题讨论】:

  • 您可以在两个代理服务器之间使用 GRE/VPN/L2TP 隧道,并通过它们路由数据。
  • @EdwardH 哦,我不知道 VPN 协议以这种方式运行。在四处寻找之后,用 openvpn 建立一个 vpn 隧道并拦截通信似乎非常适合我想做的事情。我会进行更多调查。感谢您的帮助。
  • 我在实施 vpn 解决方案时遇到问题。如果我可以让它工作,这将是最优雅的解决方案,但我也会继续寻找其他地方以获得解决方案。

标签: linux sockets networking proxy vpn


【解决方案1】:

OpenSSH 已经通过 -D 选项支持此功能:

ssh -D <port> -l username remotehost

SOCKS 服务器将侦听连接并将它们转发到 SSH 连接的另一端。

【讨论】:

  • 不幸的是,我在让它工作时遇到了问题,所以我还不能验证这一点,但我确实设法用 -L 选项得到了一些东西。我试图再次重现这一成功,但我太累了,以至于我忘记了我为让它工作所做的工作,而且我的 bash 历史并没有那么有帮助。我先睡一觉,明天再看看。
  • -L 不做 SOCKS。它只是将单个端口上的连接转发到单个远程目标。
  • 我可能过于草率地指定它必须是 SOCKS 代理;这正是我当时正在研究的。任何类型的代理都可以,只要它的实现允许它做我想做的事情。我已更新问题以反映这一点。
【解决方案2】:

与此同时,我决定编写自己的解决方案。这是一段接受多个客户端的python代码,基本上通过标准输入/输出代理通信。如果有人有兴趣,这里是代码http://pastebin.com/1E45Exsy

不要相信这段代码可以完美运行。我没有正确测试它,它不处理断开客户端。

我将继续寻找更优雅、更强大的解决方案,但同时应该这样做。如果我制作它们,我会在此处发布代码更新。

【讨论】:

    猜你喜欢
    • 2021-04-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-08-05
    • 2019-09-30
    • 2018-04-23
    相关资源
    最近更新 更多