前言
WARP 是 Cloudflare 提供的一項基於 WireGuard 的網絡流量安全及加速服務,能夠讓你通過連接到 Cloudflare 的邊緣節點實現隱私保護及鏈路優化。之前有很多小夥伴拿來當做某科學的上網工具來使用,應該很熟悉了。不過由於 WireGuard 數據傳輸使用的 UDP 協議,中國大陸運營商會對其進行 QoS ,加上多數 IP 被封鎖,現在可以說幾乎處於不可用的狀態了。而對於自由網絡的地區來說沒有這些限制,加上有國外開發者製作的工具可以生成通用的 WireGuard 配置文件,這使得我們可以在海外 VPS 上部署並獲得如下效果加成:
- WARP 網絡出入口均爲雙棧 (IPv4/IPv6),因此單棧服務器可以連接到 WARP 來獲取額外的網絡連通性支持:
- IPv6 Only VPS 可獲得 IPv4 網絡的訪問能,不再侷限於 DNS64 的束縛,能自定義任意 DNS 解析服務器。對使用某科學的上網工具有奇效。
- IPv4 Only VPS 可獲得 IPv6 網絡的訪問能力,可作爲 IPv6 Only VPS 的 SSH 跳板。此外 WARP 的 IPv6 網絡的質量比 HE IPv6 Tunnel Broker 甚至自帶的都要好,很少繞路。
- WARP 對外訪問網絡的 IP 被很多網站視爲真實用戶,即所謂的 “原生” IP,可以解除某些網站基於 IP 的封鎖限制:
- 解鎖 Netflix 非自制劇
- 跳過 Google 驗證碼
- 解除 Google 學術訪問限制
- 解除 YouTube Premium 定位漂移和地區限制
當然這只是冰山一角,其它作用小夥伴們可以在部署後慢慢發掘。
TIPS: 需要注意的是 WARP 並不提供公網 IP 地址,它是以 NAT 的方式去訪問外部網絡,即只能用於對外網絡訪問,不能用於對 VPS 本機訪問。如果你的需求是要一個可供訪問 VPS 的公網 IPv6 地址,那麼可以使用 HE IPv6 Tunnel Broker 。
安裝 WireGuard
既然 WARP 基於 WireGuard ,那麼我們首先就需要安裝 WireGuard 。由於博主使用的是 Debian ,所以只寫了 Debian 的 WireGuard 詳細安裝方法:《Debian Linux VPS WireGuard 安裝教程》。其它系統可以參考官方文檔來進行安裝。
使用 wgcf 生成 WireGuard 配置文件
wgcf 是 Cloudflare WARP 的非官方 CLI 工具,它可以模擬 WARP 客戶端註冊賬號,並生成通用的 WireGuard 配置文件。
- 安裝 wgcf
curl -fsSL git.io/wgcf.sh | sudo bash
- 註冊 WARP 賬戶 (將生成
wgcf-account.toml
文件保存賬戶信息)
wgcf register
- 生成 WireGuard 配置文件 (
wgcf-profile.conf
)
wgcf generate
生成的兩個文件記得備份好,尤其是 wgcf-profile.conf
,萬一未來工具失效、重裝系統後可能還用得着。
編輯 WireGuard 配置文件
將配置文件中的節點域名 engage.cloudflareclient.com
解析成 IP。不過一般都是以下兩個結果:
162.159.192.12606:4700:d0::a29f:c001
這樣做是因爲後面的操作要根據 VPS 所配備的網絡協議的不同去選擇要連接 WARP 的節點是 IPv4 或 IPv6 協議。
IPv4 Only 服務器添加 WARP IPv6 網絡支持
將配置文件中的 engage.cloudflareclient.com
替換爲 162.159.192.1
,並刪除 AllowedIPs = 0.0.0.0/0
。即配置文件中 [Peer]
部分爲:
[Peer]PublicKey = bmXOC+F1FxEMF9dyiK2H5/1SUtzH0JuVo51h2wPfgyo=AllowedIPs = ::/0Endpoint = 162.159.192.1:2408
原理:
AllowedIPs = ::/0
參數使得 IPv6 的流量均被 WireGuard 接管,讓 IPv6 的流量通過 WARP IPv4 節點以 NAT 的方式訪問外部 IPv6 網絡。
此外配置文件中默認的 DNS 是 1.1.1.1
,博主實測其延遲雖然很低,但解析結果並不理想。由於它將替換掉系統中的 DNS 設置 (/etc/resolv.conf
),建議小夥伴們請根據實際情況來進行替換,或者直接刪除 DNS 這行。以下配置供參考:
DNS = 8.8.8.8,8.8.4.4,2001:4860:4860::8888,2001:4860:4860::8844
IPv6 Only 服務器添加 WARP IPv4 網絡支持
將配置文件中的 engage.cloudflareclient.com
替換爲 [2606:4700:d0::a29f:c001]
,並刪除 AllowedIPs = ::/0
。即配置文件中 [Peer]
部分爲:
[Peer]PublicKey = bmXOC+F1FxEMF9dyiK2H5/1SUtzH0JuVo51h2wPfgyo=AllowedIPs = 0.0.0.0/0Endpoint = [2606:4700:d0::a29f:c001]:2408
原理:
AllowedIPs = 0.0.0.0/0
參數使得 IPv4 的流量均被 WireGuard 接管,讓 IPv4 的流量通過 WARP IPv6 節點以 NAT 的方式訪問外部 IPv4 網絡。
此外配置文件中默認的 DNS 是 1.1.1.1
,由於是 IPv4 地址,故查詢請求會經由 WARP 節點發出。由於它將替換掉系統中的 DNS 設置 (/etc/resolv.conf
),爲了防止當節點發生故障時 DNS 請求無法發出,建議替換爲 IPv6 地址的 DNS 優先,或者直接刪除 DNS 這行。以下配置供參考:
DNS = 2001:4860:4860::8888,2001:4860:4860::8844,8.8.8.8,8.8.4.4
雙棧 WARP 全局網絡置換
雙棧 WARP 全局網絡是指 IPv4 和 IPv6 都通過 WARP 網絡對外進行網絡訪問,實際上默認生成的 WireGuard 配置文件就是這個效果。由於默認的配置文件沒有外部對 VPS 本機 IP 網絡訪問的相關路由規則,一旦直接使用 VPS 就會直接失聯,所以我們還需要對配置文件進行修改。路由規則需要添加在配置文件的 [Interface]
和 [Peer]
之間的位置,以下是路由規則示例:
[Interface]...PostUp = ip -4 rule add from <替換IPv4地址> lookup mainPostDown = ip -4 rule delete from <替換IPv4地址> lookup mainPostUp = ip -6 rule add from <替換IPv6地址> lookup mainPostDown = ip -6 rule delete from <替換IPv6地址> lookup main[Peer]...
TIPS: 包含
<>
(尖括號)的部分一起替換掉,這只是爲了看起來明顯。
替換配置中的 IP 地址部分爲 VPS 的公網 IP 地址,如果 IDC 提供的是 VPC 內網方案則需要替換爲內網 IP 。很多大廠都是 VPC 內網方案,比如 GCP 、AWS 等,內網地址一般會在網頁面板有提供。如果不確定是哪種網絡方案,輸入 ip a | grep <公網IP地址>
看是否有顯示,沒有那麼就說明是 VPC 內網方案。
啓用 WireGuard 網絡接口
將 WireGuard 配置文件複製到 /etc/wireguard/
並命名爲 wgcf.conf
。
sudo cp wgcf-profile.conf /etc/wireguard/wgcf.conf
開啓網絡接口(命令中的 wgcf
對應的是配置文件 wgcf.conf
的文件名前綴)。
sudo wg-quick up wgcf
執行執行ip a
命令,此時能看到名爲wgcf
的網絡接口,類似於下面這張圖:
執行以下命令檢查是否連通。同時也能看到正在使用的是 Cloudflare 的網絡。
# IPv4 Only VPS curl -6 ip.p3terx.com # IPv6 Only VPS curl -4 ip.p3terx.com
測試完成後關閉相關接口,因爲這樣配置只是臨時性的。
sudo wg-quick down wgcf
正式啓用 WireGuard 網絡接口
# 啓用守護進程 sudo systemctl start wg-quick@wgcf # 設置開機啓動 sudo systemctl enable wg-quick@wgcf
IPv4 與 IPv6 網絡優先級設置
TIPS: 優先級不是一定要設置的,這僅限於 VPS 本身對外發起的網絡請求。使用某科學的上網工具不一定有效,建議使用工具內置的路由分流功能。
當訪問的網站是雙棧且服務器也是雙棧,默認情況下 IPv6 優先級高於 IPv4,應用程序優先使用 IPv6 地址。
理論上應該是如下情況:
- IPv4 Only 服務器優先通過新增的 WARP IPv6 網絡去訪問外部網絡。
- IPv6 Only 服務器優先通過原來的 IPv6 網絡去訪問外部網絡。
然而 WARP 的情況有點特殊,現實的情況有可能是:
- IPv4 Only 服務器優先通過原來的 IPv4 網絡去訪問外部網絡。
- IPv6 Only 服務器優先通過原來的 IPv6 網絡去訪問外部網絡。
所以根據實際的需求就要手動去設置優先級。
IPv4 優先
編輯 /etc/gai.conf
文件,在末尾添加下面這行配置:
precedence ::ffff:0:0/96 100
一鍵添加命令如下:
# IPv4 優先grep -qE '^[ ]*precedence[ ]*::ffff:0:0/96[ ]*100' /etc/gai.conf || echo 'precedence ::ffff:0:0/96 100' | sudo tee -a /etc/gai.conf
IPv6 優先
編輯 /etc/gai.conf
文件,在末尾添加下面這行配置:
label 2002::/16 2
一鍵添加命令如下:
# IPv6 優先grep -qE '^[ ]*label[ ]*2002::/16[ ]*2' /etc/gai.conf || echo 'label 2002::/16 2' | sudo tee -a /etc/gai.conf
驗證優先級
執行 curl ip.p3terx.com
命令,顯示 IPv4 地址則代表 IPv4 優先,否則爲 IPv6 優先。
優先級設置在特殊場景中的侷限性
在 VPS 上使用某科學的上網工具,則還取決於科學工具的 DNS 策略和分流路由策略。
最需要注意的是某些路由器上的某科學的上網工具客戶端不會發送域名給服務端,而是在本地直接將域名解析爲 IP 並通過服務端直接向 IP 發起連接,那麼可能因爲屏蔽了 AAAA 記錄,就只會去訪問 IPv4 網絡。這個問題解決方法是開啓某科學的上網工具服務端的流量探測 (sniffing) 功能,並添加相關路由進行 IP 分流處理,它會從數據中嗅探出域名並進行二次 DNS 解析後對網絡流量進行重定向,就比如可以將本身發往網站 IPv4 服務器的流量重定向到 IPv6 服務器。
某科學的上網工具 IP 分流方法
有關某科學的上網工具的 DNS 和路由分流設置有很多資料,小夥伴們可自行咕鴿。每個人的需求不一樣,不可能以偏概全,最好是看相關工具的文檔,所以博主在這裏就不多贅述了。
Cloudflare WARP 網速測試
使用 speedtest.net 提供的 CLI 工具測試通過 WARP 訪問外部網絡的極限網速,不過僅限測試 IPv4 的速度。
- 安裝 Ookla Speedtest CLI
curl -fsSL git.io/speedtest-cli.sh | sudo bash
- 執行
speedtest
命令測速。
speedtest
博主隨便拿一個喫灰的 LXC 小雞進行了測試,發現即使用的是 wireguard-go
其網速依然很猛,幾輪測試下來速度都在 500M 上下。可以預見的是這個速度應該遠未達到 WARP 的極限,不過隨着這篇教程的發佈,之後是否還是這麼理想就不得而知了。
尾巴
Cloudflare 一直以來爲廣大人民羣衆免費提供優秀的網絡服務,希望大家善待它,不要肆意濫用。
本文參考資料:Cloudflare WARP 給 VPS 服務器額外添加 IPv4 或 IPv6 網絡獲得“原生”IP