通过 https 进行普通的 http 代理?

通过 https 进行普通的 http 代理?

我对网络相关的东西不是很有经验,但最近我必须深入研究它,因为我国的审查程度正在迅速提高。我在另一个国家托管一个 VPS,并在上面设置了 OpenVPN 和 Shadowsocks 服务。它是绕过当地审查和访问被禁资源的绝佳工具,但现在我需要一些更复杂的东西。最近我的 ISP 封锁了一些 torrent 跟踪器,我在这些跟踪器上播种了数百个 torrent。现在我的 torrent 客户端无法向这些跟踪器宣布,因此我只能使用 DHT 播种。我想要使用一些变通方法连接到被阻止的跟踪器,但我不想将整个 torrent 流量包装到 VPN/代理中,我希望能够使用某种代理仅进行跟踪器宣布,然后使用我的真实 ISP 播种IP:Port。我尝试将 Deluge 客户端设置为仅使用 Socks5-proxy(Shadowsocks)进行跟踪器连接,但它无法按预期工作,因为跟踪器获取的是我的 VPS 的 IP,而不是我的真实 IP。然后我找到了一种可行的方法 - 我在我的 VPS 上以 proxy_pass 模式设置了 Nginx,如下所示:

http {
    types_hash_max_size 4096;
    server {
        listen 80 default_server;
        access_log off;
        return 444;
    }
    server {
        listen 80;
        server_name <trackers_list>;
        allow <my_home_ip>;
        deny  all;
        access_log off;
        location / {
            proxy_pass http://$http_host;
            proxy_set_header Host $host;
            proxy_set_header X-Real-IP $remote_addr;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
            resolver 127.0.0.1;
        }
    }
}

在我的路由器设置中,我将对被阻止的跟踪器的所有请求转发到我的远程 VPS 的端口 80。现在它工作正常 - 我可以通过代理向跟踪器发布公告,但跟踪器随后在标头的帮助下将我的真实 IP 提供给对等方X-Forwarded-For,并且 DHT 没有被破坏。但问题是它看起来像这样:


Me -> http -> ISP -> http -> Nginx -> http -> tracker

由于跟踪器使用纯 http 协议,因此整个请求均未加密。因此,如果 ISP 愿意,他们仍然可以看到请求的真实目的地,并使用 DPI 之类的技术阻止它们。我希望它像这样:


Me -> https -> ISP -> https -> Nginx -> http -> tracker

我希望 Nginx 代理纯 http 请求到跟踪器并添加标X-Forwarded-For头,但在我的家用机器和它自己之间使用加密。我曾天真地尝试告诉 Nginx 在端口 80 上使用我的自签名 SSL 证书,但显然,我以这种方式收到 400 错误:The plain HTTP request was sent to HTTPS port

有可能实现吗?如果不使用 Nginx,也许可以使用其他工具?

答案1

我不知道如何使用反向代理或类似的东西来解决这个问题,但你可以进行 ssh 端口转发。因此,你保持与 vps 的 ssh 连接,并配置 ssh 将本地端口转发到跟踪器的端口。然后,你将 torrent 应用程序配置为使用本地主机地址:端口,而不是真实的跟踪器地址。

就像在 torrent 应用程序中一样配置跟踪器。或者您喜欢的任何其他本地端口。ssh –L 8080:the.tracker.ip:trackerport [email protected]http://localhost:8080

根据您的操作系统,您可以使用 putty 或https://github.com/daradib/sidedoor后者保持隧道打开并在中断时自动重新连接。然后 ssh 隧道将加密通过它的所有通信。

编辑:只有当 torrent 应用程序以某种方式确定公共 IP 地址时才有效,而当跟踪器仅使用连接似乎来自的 IP 地址时则无效。

相关内容