🕊️ 本文送給更開放的互聯網
起因是看到 @geekbb 介紹 Warp 的推文。儘管 Warp 已經發布了很長時間,就保護 IP 隱私而言,它並沒有 iCloud Private Relay 好用,我也沒有魔法上網的需求。但是我突然意識到,我還是有隱藏 IP 的需求。
在開發 RSSHub 的幾年中,我發現提供公共 API 的站點非常少,許多站點還會採取嚴格的反爬控制來限制其平台內容的獲取。有些站點會屏蔽同一 IP 發出過多請求,而還有一些站點則會全面屏蔽常見雲服務器廠商的 IP 地址。因此,僅僅為了獲取最新幾條內容更新卻變得非常困難。
這種情況需要使用代理,但是專門的爬蟲代理通常價格昂貴,性價比極低,如果 Cloudflare WARP 的無限流量和豐富的 IP 資源能被 RSSHub 利用就太棒了。RSSHub 已經支持了通用的代理協議,只要能將 WARP 包裝為通用的 proxy 就可以。
雖然無法直接在命令行環境中方便地使用官方客戶端,但這麼容易想到的點子肯定已經被別人實現過了。我在 GitHub 上找到了一個封裝的 Docker。
Connet to CloudFlare WARP, exposing `socks5` proxy all together.
然後只需要在 RSSHub 的 docker-compose.yml
中再添加這樣一個 service 來啟用代理服務
warp-socks:
image: monius/docker-warp-socks:latest
privileged: true
volumes:
- /lib/modules:/lib/modules
cap_add:
- NET_ADMIN
- SYS_ADMIN
sysctls:
net.ipv6.conf.all.disable_ipv6: 0
net.ipv4.conf.all.src_valid_mark: 1
healthcheck:
test: ["CMD", "curl", "-f", "https://www.cloudflare.com/cdn-cgi/trace"]
interval: 30s
timeout: 10s
retries: 5
最後給 RSSHub 加一個 PROXY_URI 環境變量來使用代理
PROXY_URI: 'socks5h://warp-socks:9091'
我選取了一個我經常使用的 hotukdeals 路由(英國版的什麼值得買)進行測試。該站點會屏蔽所有 DigitalOcean 的 IP,因此一直處於 403 狀態。
加上 WARP 後可順利訪問
此外,我發現每次重啟 WARP 時,都會輸出新的 IP。儘管我沒有時間驗證,但我感覺 IP 應該會經常自動更改,這對解決反爬是一個好消息。
還可以進一步自定義 WireGuard 的配置,包括使用付費版 WARP+ 和自定義 endpoint,以獲取可能更好的結果。
生成 WireGuard 配置文件可以使用
刷 WARP+ 流量和篩選 endpoint 可以使用
有說法是 WARP+ 的速度並無明顯差異(《WARP、WARP + 速度對比,以及 WARP 速度上限》),但是是否影響反爬效果還需要進一步驗證。
如果一切順利,RSSHub 官方實例中許多嚴格反爬的路由應該能重新使用。我將在幾天內進行驗證並在此更新。