OpenWrt + Starlink 環境下使用家用 IPv6 位址的 WireGuard 伺服器
你好,我是無能。
在上一篇文章中,我成功為家中的網路取得了公開的 IPv6 位址,因此我將進行以下設定:
伺服器:OpenWrt + WireGuard Server
介面:wg1(10.2.0.0/24)
出口 IP 為家中的網路,是一個沒有頻寬限制(如 VPS 等頻寬上限值)的環境
用戶端:智慧型手機、筆記型電腦
此外,這次的目的是希望讓這個 WireGuard 伺服器能夠與託管在 ConoHa VPS 上的 WireGuard 伺服器介面 wg0(10.1.0.0/24) 進行通訊。
透過建立常駐的 wg1 介面 VPN 環境,可以隨時加入內部網路,且無需擔心頻寬限制。雖然有人擔心加入這個網路區段本身可能會產生漏洞,但這比直接透過公開 IP 公開要好一些,而且如果能加入 wg0 介面,基本上就沒問題了。
透過這次的調整,可以在 OpenWrt 側使用 Dnsmasq 託管內部 DNS 伺服器,並隨時進行廣告攔截。
在 OpenWrt 上安裝 WireGuard
安裝 wireguard-tools。
root@OpenWrt:~# apk search wireguard
kmod-wireguard-6.12.74-r1
luci-proto-wireguard-26.120.35050~a611522
prometheus-node-exporter-ucode-wireguard-2024.02.07-r2
rpcd-mod-wireguard-2
wireguard-tools-1.0.20250521-r1
root@OpenWrt:~# apk add wireguard-tools-1.0.20250521-r1
此外,安裝 luci-proto-wireguard-26.120.35050~a611522 應該就能從 Web UI 的 LuCI 進行 WireGuard 設定,但我選擇不安裝。
設定
/etc/config/network
如下所示建立伺服器端的介面。
~~~
config interface 'wg1'
option proto 'wireguard'
option private_key 'wg1 server private key'
option listen_port '51820'
list addresses '10.2.0.1/24'
list addresses 'fd02::1/64'
option mtu '1420'
~~~
接著新增下方允許的用戶端設定。雖然本來應該設定 PreSharedKey 來進行預先共用金鑰的設定,但這裡先跳過。
config wireguard_wg1
option public_key 'wg1 client public key'
list allowed_ips '10.2.0.2/32'
list allowed_ips 'fd02::2/128'
list allowed_ips 'client ipv6 addr ::2/128'
option persistent_keepalive '25'
option route_allowed_ips '1'
在用戶端建立 wg1.conf。所有流量都將經由 OpenWrt 路由器。
[Interface]
PrivateKey = "wg1 client public key "
Address = 10.2.0.2/24, fd02::2/64, client ipv6 addr::2/64
DNS = 10.2.0.1 # 由於已經使用 Dnsmasq 建立 DNS 伺服器,因此已設定完成
[Peer]
PublicKey = "wg1 server public key"
Endpoint = "wg1 ipv6 addr :51820"
AllowedIPs = 0.0.0.0/0, ::/0
PersistentKeepalive = 25
保持現狀的話會被防火牆阻擋,因此需要建立 wg 區域,並在 wan 側 IPv6 開放 51820/udp 連接埠,然後允許作為家庭環境的 LAN 通訊,並讓 wg 能通過 wan 連接到外部。
基本上 IPv6 不需要 NAT,所以我們會明確地將其關閉。
/etc/config/firewall
config zone
option name 'wg'
list network 'wg1'
list network 'wg0'
option input 'ACCEPT'
option forward 'ACCEPT'
option output 'ACCEPT'
option masq '1'
option masq6 '0'
config rule
option name 'Allow-WireGuard-IPv6'
option src 'wan'
option family 'ipv6'
option proto 'udp'
option dest_port '51820'
option target 'ACCEPT'
config forwarding
option src 'wg'
option dest 'lan'
config forwarding
option src 'wg'
option dest 'wan'
在此狀態下無法與 wg0 通訊,因此需要追加設定。
wg0 伺服器端的設定也請配合以下內容追加(此處省略)。
/etc/config/network
config route
option interface 'wg0'
option target '10.1.0.0/24'
config interface 'wg0'
option proto 'wireguard'
option private_key 'wg0 client private key'
list addresses '10.1.0.99/24'
config wireguard_wg0
option public_key 'wg0 server public key'
option endpoint_host 'wg0 server addr'
option endpoint_port '51820'
list allowed_ips '10.1.0.0/24'
list allowed_ips '10.2.0.0/24'
option persistent_keepalive '25'
這樣基本上就完成設定了,關於 dnsmasq 的部分如下:
在我的環境中,它原本就已經安裝好了,所以只需要啟用即可。
/etc/init.d/dnsmasq enable/etc/init.d/dnsmasq start
之後就像 /etc/dnsmasq.d/adblock.conf 這樣放入清單並進行阻擋。
/etc/init.d/dnsmasq restart
到這一步之後,只需要重新載入即可。
/etc/init.d/network restart
/etc/init.d/firewall restart
如此一來,不論是透過 CGNAT IP 的 IPv4 還是 IPv6 都能正常運作的雙棧 (Dual-stack) 環境就完成了。
來自 OpenWrt 環境的測速
以下是未連接 WireGuard 的有線環境
$ speedtest-go -s 48463
speedtest-go v1.7.10 (git-dev) @showwin
✓ ISP: 206.83.125.125 (Starlink) [35.6893, 139.6899]
✓ Found 1 Specified Public Server(s)
✓ Test Server: [48463] 5.80km Tokyo by IPA CyberLab 400G
✓ Latency: 41.037747ms Jitter: 8.459256ms Min: 24.163074ms Max: 57.008632ms
✓ Packet Loss Analyzer: Running in background (<= 30 Secs)
✓ Download: 173.63 Mbps (Used: 211.22MB) (Latency: 35ms Jitter: 6ms Min: 25ms Max: 41ms)
✓ Upload: 45.99 Mbps (Used: 81.23MB) (Latency: 35ms Jitter: 29ms Min: 23ms Max: 136ms)
✓ Packet Loss: N/A
以下是 5GHz 頻段 Wi-Fi 環境下 wg1 VPN 環境的測速結果
$ speedtest-go -s 48463
speedtest-go v1.7.10 (git-dev) @showwin
✓ ISP: 206.83.125.125 (Starlink) [35.6893, 139.6899]
✓ Found 1 Specified Public Server(s)
✓ Test Server: [48463] 5.80km Tokyo by IPA CyberLab 400G
✓ Latency: 28.199611ms Jitter: 1.516613ms Min: 26.461289ms Max: 31.90411ms
✓ Packet Loss Analyzer: Running in background (<= 30 Secs)
✓ Download: 79.63 Mbps (Used: 114.99MB) (Latency: 98ms Jitter: 39ms Min: 27ms Max: 151ms)
✓ Upload: 65.86 Mbps (Used: 96.92MB) (Latency: 62ms Jitter: 73ms Min: 26ms Max: 285ms)
✓ Packet Loss: N/A
現在即使在戶外,也能透過智慧型手機存取這個 wg1 的 VPN 環境了。