客戶端 (Ubuntu 20.04) 在連接到 VPN WireGuard 伺服器時無法解析網際網路頁面
我已經設置了 WireGuard VPN,但是在使用以下命令成功連接後,瀏覽器沒有從 Internet 載入網頁:
wg-quick up `pwd`/myifwg0.conf
我檢查了Server WireGuard 界面 - 它看起來不錯:
$ sudo wg show wg0 interface: wg0 public key: <SERVER_PUB_KEY> private key: (hidden) listening port: 51820 peer: <CLIENT_PUB_KEY> endpoint: <SERVER_PUBLIC_IP>:45884 allowed ips: 10.0.1.2/32 latest handshake: 4 minutes, 44 seconds ago transfer: 2.32 KiB received, 3.63 KiB sent
我在連接時檢查了客戶端WireGuard 界面 - 看起來不錯:
$ sudo wg show myifwg0 interface: myifwg0 public key: <CLIENT_PUB_KEY> private key: (hidden) listening port: 59386 fwmark: 0xca6c peer: <SERVER_PUB_KEY> endpoint: <SERVER_PUBLIC_IP>:51820 allowed ips: 0.0.0.0/0, ::/0 latest handshake: 15 seconds ago transfer: 124 B received, 8.63 KiB sent persistent keepalive: every 25 seconds
我注意到當連接到伺服器 WireGuard VPN 時,這些命令永遠掛起:
curl google.com ping google.com
這可能與 DNS 問題有關,因為我能夠
nslookup google.com
並且如果我在連接到 VPN 時將解析的 IP 從 Web 瀏覽器複製/粘貼nslookup
到 Web 瀏覽器中,那麼我就可以訪問google.com
首頁。我嘗試在 VPN 客戶端配置文件中強制使用 DNS IP,例如
DNS = 1.1.1.1
orDNS = 8.8.8.8
或DNS = 127.0.0.53
(最後一個來自/etc/resolv.conf
),但效果是一樣的:
- 我的網路瀏覽器無法訪問網頁
- 命令喜歡
curl
或ping
不能解析域在 VPN 客戶端中,這些是版本:
apt-cache show wireguard
:版本:1.0.20200513-1~20.04.2lsb_release -a
:Ubuntu 20.04.2 LTS 焦點如何修復 VPN 客戶端或 VPN 伺服器或兩者的配置,以便能夠從 VPN 客戶端導航網際網路?
編輯
我的客戶端配置
myifwg0.config
是這樣的:[Interface] Address = 10.0.1.2/32 PrivateKey = <CLIENT_PRIV_KEY> DNS = 1.1.1.1 [Peer] PublicKey = <SERVER_PUB_KEY> Endpoint = <SERVER_PUBLIC_IP>:51820 AllowedIPs = 0.0.0.0/0, ::/0 PersistentKeepalive = 25
在伺服器
/etc/sysctl.conf
上,我通過編輯確保 IP 轉發處於活動狀態net.ipv4.ip_forward=1
。然後申請sudo sysctl -p
。在伺服器上,我還確保設置了一些防火牆規則,如下所示。WireGuard 的相關埠/介面是 51820(WG 監聽)、53(DNS 解析)、eth0 和 wg0 參與 WireGuard 隧道:
$ sudo ufw status Status: active To Action From -- ------ ---- 22/tcp ALLOW Anywhere 443/tcp ALLOW Anywhere 51820/udp ALLOW Anywhere 53 ALLOW Anywhere 22/tcp (v6) ALLOW Anywhere (v6) 443/tcp (v6) ALLOW Anywhere (v6) 51820/udp (v6) ALLOW Anywhere (v6) 53 (v6) ALLOW Anywhere (v6) Anywhere on eth0 ALLOW FWD Anywhere on wg0 Anywhere on wg0 ALLOW FWD Anywhere on eth0 Anywhere (v6) on eth0 ALLOW FWD Anywhere (v6) on wg0 Anywhere (v6) on wg0 ALLOW FWD Anywhere (v6) on eth0
伺服器配置文件
/etc/wireguard/wg0.conf
如下所示:[Interface] PrivateKey = <SERVER_PRIV_KEY> Address = 10.0.1.1/24 PostUp = iptables -A FORWARD -i wg0 -j ACCEPT; iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE PostDown = iptables -D FORWARD -i wg0 -j ACCEPT; iptables -t nat -D POSTROUTING -o eth0 -j MASQUERADE ListenPort = 51820 [Peer] PublicKey = <CLIENT_PUB_KEY> AllowedIPs = 10.0.1.2/32
我想知道是否
iptables
與ufw
. 否則我無法弄清楚為什麼這個 WireGuard VPN 隧道不應該工作。
原來問題出在其他地方。我正在使用 Ansible 配置此伺服器VM,並且在配置過程結束時,我必須為 WireGuard 啟動 SystemD 服務。
問題是
state
被設置為started
,而不是restarted
。這意味著當我多次執行 Ansible 腳本時,例如添加更多配置(如防火牆規則等)時,此 WireGuard 服務從未考慮到新配置…這是正確的 Ansible 腳本,它始終在伺服器上重新啟動 WireGuard 的 SystemD 服務:
# `systemctl enable wg-quick@wg0` - name: REStart WireGuard and enable it on boot systemd: name: wg-quick@wg0 enabled: yes state: restarted
在這一點上,我懷疑這是需要的:
ufw route allow in on wg0 out on eth0 ufw route allow in on eth0 out on wg0
鑑於伺服器
iptables
上 WireGuard 的配置文件中已經存在這些設置。但我並沒有嘗試刪除規則來看看會發生什麼。ufw
由於您要通過 VPN(包括 DNS)路由所有流量,因此您需要指定可以訪問的 DNS 伺服器。
例如,在您的客戶端上添加 DNS 條目:
[Interface] Address = 10.0.1.2/32 PrivateKey = xxx DNS = 1.1.1.1 [Peer] PublicKey = xxx AllowedIPs = 0.0.0.0/0, ::/0 Endpoint = xxx
如果這不起作用發布您的配置(沒有密鑰)。