
我對網路相關的東西不是很有經驗,但最近我必須深入研究它,因為我國的審查水平正在迅速提高。我在另一個國家託管 VPS,並在其中設定了 OpenVPN 和 Shadowsocks 服務。它是繞過當地審查制度並訪問禁止資源的絕佳工具,但現在我需要更複雜的東西。最近,我的 ISP 封鎖了一些 torrent 追蹤器,我在這些追蹤器上播種了數百個 torrent。現在我的 torrent 用戶端無法向這些追蹤器宣布,所以我只能使用 DHT 進行播種。我想要的是使用一些解決方法來連接到被阻止的追蹤器,但我不想將整個 torrent 流量包裝到 VPN/代理中,我希望能夠使用某種代理僅使追蹤器宣布,然後種子與我真實的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 位址時,這才有效。