【问题标题】:Python reverse proxy connectionPython反向代理连接
【发布时间】:2017-09-30 16:14:38
【问题描述】:

我正在尝试使 HTTP/S 代理服务器工作,而无需手动进行端口转发。

  • 机器 A 已安装代理服务器
  • 机器 A 位于 NAT(或带防火墙的路由器)后面。
  • 机器 B 尝试通过机器 A 代理浏览互联网。
  • 机器 B 不在 NAT 后面。
  • 两台机器在建立任何连接之前就相互了解。
  • 在全面情况下,会有多台机器 A,但只有一台机器 B

机器 A 不需要在路由器上配置任何东西。

根据this answer,我曾考虑过使用 uPnP,但作为这个问题的标题,我想知道是否可以反转机器的角色。

不是机器 B 发起连接,而是机器 A 会这样做。所以机器 A 是客户端,机器 B 是服务器。记住机器 A 事先知道机器 B 的 IP 地址。

在这种情况下,机器 A 仍将充当代理,但在标准 TCP 连接中扮演客户端的角色。

我知道这需要一个定制的代理服务器,这没有问题,因为代理服务器是在python中实现的,我可以访问源代码,并且可以修改它。

  • 这会与普通的 HTTP/S 代理兼容吗?具体来说,我将在机器 B 上使用 python requests
  • 这个方法有名字吗?对 inversereverse 的研究让我找到了 reverse proxy,而 AFAIK 与我想要完成的事情没有任何关系。
  • 我有什么遗漏吗?还是替代解决方案? (除了 uPnP)

【问题讨论】:

  • 为什么要自己写?有许多代理选择。
  • 我不想自己写。如果有适合我的解决方案。

标签: python tcp proxy


【解决方案1】:

一个简单的解决方案是 OpenSSH 端口转发。

首先通过远程端口转发将“机器 B”上的端口 20000 转发到“机器 A”上的端口 10000:

[A]$ ssh -N -R 20000:localhost:10000 Machine_B

然后使用动态端口转发在“机器 A”上的端口 10000 上设置隧道:

[A]$ ssh -N -D 10000 localhost

现在您可以在“机器 B”上使用 127.0.0.1:20000 作为 SOCKS5 代理:

[B]$ curl --socks5 127.0.0.1:20000 example.com

【讨论】:

    【解决方案2】:

    它叫做“反向”,你需要shootback来反向TCP隧道,它的工作原理类似于OpenSSH端口转发和Socks5代理服务器pysocks它比HTTP/S代理服务器更好。

    在机器 B(你)上

    python3 master.py -m 0.0.0.0:10000 -c 0.0.0.0:10800
    

    在机器A(远程)上

    python socks5.py start --port=1080
    python slaver.py -m <MachineA_IP>:10000 -t 127.0.0.1:1080
    

    现在在 MachineB 上,您可以将浏览器或任何应用程序设置为 socks5

    localhost:10800
    

    【讨论】:

      猜你喜欢
      • 2016-06-10
      • 1970-01-01
      • 1970-01-01
      • 2014-05-20
      • 2016-02-10
      • 2017-12-07
      • 2015-12-23
      • 1970-01-01
      • 2020-08-28
      相关资源
      最近更新 更多