Skip to content

Instantly share code, notes, and snippets.

@phlinhng
Last active May 28, 2024 16:11
Show Gist options
  • Save phlinhng/b7919805fb66fb3d34a3f06625eb89bc to your computer and use it in GitHub Desktop.
Save phlinhng/b7919805fb66fb3d34a3f06625eb89bc to your computer and use it in GitHub Desktop.
WGCF 筆記

1. 更換內核至 5.6 以上版本

Debian / Ubuntu 系可直接運行以下指令,安裝 xanmod-edge 內核後重啟。此內核安裝完後會自動啟用 BBR,無需手動配置。

echo 'deb http://deb.xanmod.org releases main' | tee /etc/apt/sources.list.d/xanmod-kernel.list
wget -qO - https://dl.xanmod.org/gpg.key | apt-key --keyring /etc/apt/trusted.gpg.d/xanmod-kernel.gpg add -
apt update && apt upgrade -y && apt install linux-xanmod-edge -y

2. 安裝 wireguard-tools 與 resolvconf

apt install wireguard-tools resolvconf -y

3. 安裝 WGCF

curl -fsSL https://github.com/ViRb3/wgcf/releases/download/v2.2.2/wgcf_2.2.2_linux_amd64 -o /usr/local/bin/wgcf && chmod +x /usr/local/bin/wgcf
wgcf register
wgcf generate
cp wgcf-profile.conf wgcf-profile.conf.bak # 備份配置文件

4. 修改配置文件 wgcf-profile.conf

配置文件範例

默認配置文件應該長這樣,共有四處要修改的地方,分別是 DNS、 AllowIPs、Endpoint 和 PostUp/PostDown

[Interface]
PrivateKey = XXXXXXXX
Address = 172.16.0.2/32
Address = XXXX:XXXX:XXXX:XXXX/128
PostUp = ip rule add from xx.xx.xx.xx(vps主网卡的ipv4)lookup main # v4 機器要雙棧接管的話要加上這行
PostDown = ip rule del from xx.xx.xx.xx(vps主网卡的ipv4)lookup main # v4 機器要雙棧接管的話要加上這行
PostUp = ip rule add from xx.xx.xx.xx(vps主网卡的ipv6)lookup main # v6 機器要雙棧接管的話要加上這行
PostDown = ip rule del from xx.xx.xx.xx(vps主网卡的ipv6)lookup main # v6 機器要雙棧接管的話要加上這行
DNS = 1.1.1.1
MTU = 1280
[Peer]
PublicKey = XXXXXXXX
AllowedIPs = 0.0.0.0/0
AllowedIPs = ::/0
EndPoint = engage.cloudflareclient.com:2408

修改 DNS

自己選擇最適合你的 VPS 的 DNS,我的習慣是改成以下這組

DNS = 8.8.8.8,8.8.4.4,1.1.1.1

有些機器到 8.8.8.8 比較慢可以使用

DNS = 1.1.1.1,1.0.0.1,8.8.8.8

修改 EndPoint

將 engage.cloudflareclient.com 解析成域名,通常是以下的查詢結果

162.159.192.1
2606:4700:d0::a29f:c001

根據不同的需求,有不同的地方需要修改 - IPv4 Only VPS

接管出口 VPS IP AllowedIPs Endpoint PostUp/PostDown
v4 v4 刪掉 ::/0 改成 v4 地址 加 v4 規則
v6 v4 刪掉 0.0.0.0/0 改成 v4 地址 不用加
v4+v6 v4 不用刪 改成 v4 地址 加 v4 規則

根據不同的需求,有不同的地方需要修改 - IPv6 Only VPS

接管出口 VPS IP AllowIPs Endpoint PostUp/PostDown
v4 v6 刪掉 ::/0 改成 v6 地址 不用加
v6 v6 刪掉 0.0.0.0/0 改成 v6 地址 加 v6 規則
v4+v6 v6 不用刪 改成 v6 地址 加 v6 規則

根據不同的需求,有不同的地方需要修改 - IPv4/IPv6 Dual Stack VPS

接管出口 VPS IP AllowedIPs Endpoint PostUp/PostDown
v4 v4+v6 刪掉 ::/0 不用改 加 v4 規則
v6 v4+v6 刪掉 0.0.0.0/0 不用改 加 v6 規則
v4+v6 v4+v6 不用刪 不用改 加 v4/v6 規則

修改說明

PostUp: 保留入口用的,不加的話,你的 VPS 入站流量會被 WG 的虛擬網口擋在外面造成失聯
EndPoint: 如果機器原本只有 v4 就改成 162.159.192.1,原本只有 v6 就改成 2606:4700:d0::a29f:c001,原本 v4/v6 都有就不用改
AllowIP: 控制出口用的,刪掉不想讓 WGCF 接管的出口

修改例子

  • 機器只有 IPv6,想讓它獲得 IPv4 的訪問能力,訪問 IPv6 時使用機器原本的 IP 出去:刪掉 ::/0、Endpoint改成v6地址
  • 機器只有 IPv4,想讓它獲得 IPv6 的訪問能力,訪問 IPv4 時使用機器原本的 IP 出去:刪掉 0.0.0.0/0、Endpoint改成v4地址
  • 機器只有 IPv4,想讓它獲得 IPv6 的訪問能力,訪問 IPv4 時使用 CF 的 IP 出去:Endpoint改成v4地址、增加 v4 的 PostUp 規則
  • 機器擁有 IPv4 和 v6,想在訪問 IPv4 和 IPv6 時都使用 CF 的 IP 出去:Endpoint不用改、增加 v4 的 PostUp 規則、增加 v6 的 PostUp 規則(如果你有透過 v6 連接 VPS 的需求的話)

5. 複製配置文件

cp wgcf-profile.conf /etc/wireguard/wgcf.conf

6. 啟用 WireGuard

systemctl enable wg-quick@wgcf
systemctl start wg-quick@wgcf

7. 測試

透過以下的 API 可以看到目前的出口 IP 是否己經變成 CF 的出口

# IPv4 Only VPS
curl -6 ip.p3terx.com
# IPv6 Only VPS
curl -4 ip.p3terx.com

使用 WGCF 的出口有什麼好處

  • 解鎖當地原生 IP 才能看的內容(Netflix, TVB 等)
  • 避開谷歌驗證碼
  • 對一些網站隱藏 VPS IP
  • 加速 VPS 到 Cloudflare CDN 節點的訪問速度
  • 使 IPv4 / IPv6 Only 的機器獲得訪問 IPv6 / IPv4 地址的能力

Reference

@toyo2333
Copy link

toyo2333 commented Jun 8, 2023

p3terx的脚本里处理双栈机器的endpoint是直接给了ipv4的地址。和你本文中介绍的规则不一样(你文中介绍应该填写域名)

这是它的方法

Check_WireGuard_Peer_Endpoint() {
    if ping -c1 -W1 ${WireGuard_Peer_Endpoint_IP4} >/dev/null 2>&1; then
        WireGuard_Peer_Endpoint="${WireGuard_Peer_Endpoint_IPv4}"
    elif ping6 -c1 -W1 ${WireGuard_Peer_Endpoint_IP6} >/dev/null 2>&1; then
        WireGuard_Peer_Endpoint="${WireGuard_Peer_Endpoint_IPv6}"
    else
        WireGuard_Peer_Endpoint="${WireGuard_Peer_Endpoint_Domain}"
    fi
}

这个endpoint规则到底该怎么理解,怎么填写呢?我这种双栈机器写入v4地址有问题么?

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment