連結 WireGuard 伺服器:可以從客戶端 ping 兩者,但無法訪問網際網路。IP路由問題?
我正在嘗試鍊式/雙跳 VPN 設置,其中所有客戶端流量在到達 Internet 之前都通過 2 個伺服器:
Client → Server1 → Server2 → Public Internet
所有對等點都位於這些私有地址塊上:
10.103.213.0/24
(IPv4) 和fd6f:9403:2887:9cd6:10:103:213:0/112
(IPv6)。以下是對等點的配置和現有的 IPTables 規則。(請注意配置文件的名稱,以防萬一。)伺服器 2 配置
文件:
/etc/wireguard/wg0.conf
# Server2 [Interface] PrivateKey = SERVER2_PRIVATE_KEY Address = 10.103.213.2/24, fd6f:9403:2887:9cd6:10:103:213:2/112 ListenPort = 53701 SaveConfig = false # CLIENTS [Peer] # Server1 PublicKey = SERVER1_PUBLIC_KEY PresharedKey = SERVER1_PRESHARED_KEY # ↓ to allow traffic from client (10.103.213.11/32) via Server1 (10.103.213.1/32), allow both AllowedIPs = 10.103.213.0/24, fd6f:9403:2887:9cd6:10:103:213:0/112
防火牆配置。命令:
ufw allow 53701/udp comment 'WireGuard VPN' iptables -A FORWARD -i wg0 -j ACCEPT && iptables -A FORWARD -o wg0 -j ACCEPT && ip6tables -A FORWARD -i wg0 -j ACCEPT && ip6tables -A FORWARD -o wg0 -j ACCEPT iptables -t nat -A POSTROUTING -s 10.103.213.0/24 -o enp8s0 -j MASQUERADE ip6tables -t nat -A POSTROUTING -s fd6f:9403:2887:9cd6:10:103:213:0/112 -o enp8s0 -j MASQUERADE
伺服器 1 配置
文件:
/etc/wireguard/wg0.conf
# Server1 [Interface] PrivateKey = SERVER1_PRIVATE_KEY Address = 10.103.213.1/24, fd6f:9403:2887:9cd6:10:103:213:1/112 ListenPort = 53701 SaveConfig = false # CLIENTS [Peer] # Server2 PublicKey = SERVER2_PUBLIC_KEY PresharedKey = SERVER1_PRESHARED_KEY Endpoint = SERVER2_PUBLIC_IP:53701 AllowedIPs = 10.103.213.2/32, fd6f:9403:2887:9cd6:10:103:213:2/128 #PersistentKeepalive = 25 [Peer] # PC PublicKey = CLIENT_PUBLIC_KEY PresharedKey = CLIENT_PRESHARED_KEY AllowedIPs = 10.103.213.11/32, fd6f:9403:2887:9cd6:10:103:213:11/128
防火牆配置。命令:
ufw allow 53701/udp comment 'WireGuard VPN' iptables -A FORWARD -i wg0 -j ACCEPT && iptables -A FORWARD -o wg0 -j ACCEPT && ip6tables -A FORWARD -i wg0 -j ACCEPT && ip6tables -A FORWARD -o wg0 -j ACCEPT
客戶端配置
# CLIENT: PC [Interface] PrivateKey = CLIENT_PRIVATE_KEY Address = 10.103.213.11/24, fd6f:9403:2887:9cd6:10:103:213:11/112 DNS = 10.103.213.1, fd6f:9403:2887:9cd6:10:103:213:1 [Peer] # Server1 PublicKey = SERVER1_PUBLIC_KEY PresharedKey = CLIENT_PRESHARED_KEY Endpoint = SERVER1_PUBLIC_IP:53701 AllowedIPs = 0.0.0.0/0, ::0/0 #PersistentKeepalive = 25
現在,就像我說的那樣,當所有對等方都啟用 VPN 時,我可以從專用 (WireGuard) 網路上的客戶端 ( ) ping Server1 (
10.103.213.2
) 和 Server2 ( ),但我無法訪問網際網路。10.103.213.1``10.103.213.11
我知道我缺少一些急需的 IP 路由或 IPTables 規則,但儘管我試圖找到一個我能理解幾天的解決方案,但我沒有成功。我發現如果沒有真正閱讀有關 Linux 網路/防火牆的書,我幾乎沒有希望。
現在,我希望有人可以幫助我解決問題,並解釋我們在做什麼以及為什麼這樣做,這樣我就可以更好地理解並做筆記。
非常感謝你!
筆記:
- 如果我錯過了任何有用的資訊,請詢問,我很樂意得到它。
- 客戶端執行 macOS。Server1 和 Server2 執行 Debian 11 “Bullseye”。僅供參考,以防萬一。
- Server1 和 Server2 已安裝 Unbound 並設置為本地 DNS 解析。這就是您
DNS = 10.103.213.1, fd6f:9403:2887:9cd6:10:103:213:1
在客戶端配置中看到的原因。如果不是這樣,我會在那裡使用 CloudFlare 或 Google 的 IP。- #wireguard IRC 上有人建議我嘗試
Table = 123
在[Interface]
Server1 的 WireGuard 配置中添加。然後執行命令ip rule add iif wg0 table 123
。那沒有用,我也不明白它應該做什麼(我無法理解手冊頁或技術細節)。- 從我的閱讀中,我得出的結論是
iptables
和ufw
可以一起使用——除了在使用時必須小心iptables-persistent
。netfilter-persistent save
即使在執行防火牆規則的命令後,您也需要執行ufw
以在重新啟動時保持不變,即使ufw status
它們已經到位。如果由於某種原因您在保存之前重新啟動,請刪除 UFW 規則並再次添加它們,然後執行netfilter-persistent save
.
Libera.Chat上
#wireguard
IRC 頻道的好心人幫助了我!我的配置問題。如下:
- Server1 的配置中的 Server2
AllowedIPs
僅包含 Server2 的 IP 地址。那不會允許“網際網路”。它需要是0.0.0.0/0, ::0/0
。- Server1 的 WireGuard 介面必須配置為將路由(對於 中的所有條目
AllowedIPs
)添加到自定義 IP 路由表(我們稱之為wireguard2x
)而不是main
表。然後添加一個 IP 策略規則,說明帶有輸入介面 (iif) 的流量wg0
會轉到自定義表——這也意味著其他類型的流量按照慣例採用預設路由。更正配置
伺服器 2 配置
文件:
/etc/wireguard/wg0.conf
# Server2 [Interface] PrivateKey = SERVER2_PRIVATE_KEY Address = 10.103.213.2/24, fd6f:9403:2887:9cd6:10:103:213:2/112 ListenPort = 53701 SaveConfig = false # CLIENTS [Peer] # Server1 PublicKey = SERVER1_PUBLIC_KEY PresharedKey = SERVER1_PRESHARED_KEY # ↓ to allow traffic from client (10.103.213.11/32) via Server1 (10.103.213.1/32), allow both AllowedIPs = 10.103.213.0/24, fd6f:9403:2887:9cd6:10:103:213:0/112
防火牆配置。命令:
ufw allow 53701/udp comment 'WireGuard VPN' iptables -A FORWARD -i wg0 -j ACCEPT && iptables -A FORWARD -o wg0 -j ACCEPT && ip6tables -A FORWARD -i wg0 -j ACCEPT && ip6tables -A FORWARD -o wg0 -j ACCEPT iptables -t nat -A POSTROUTING -s 10.103.213.0/24 -o enp7s0 -j MASQUERADE ip6tables -t nat -A POSTROUTING -s fd6f:9403:2887:9cd6:10:103:213:0/112 -o enp7s0 -j MASQUERADE
伺服器 1 配置
文件:
/etc/wireguard/wg0.conf
# Server1 [Interface] PrivateKey = SERVER1_PRIVATE_KEY Address = 10.103.213.1/32, fd6f:9403:2887:9cd6:10:103:213:1/128 ListenPort = 53701 Table = wireguard2x # ↓ should only be set if resolvconf or openresolv is installed on the system, otherwise let the system use defaults # ↓ is unncessary if local DNS resolution is set up #DNS = 1.1.1.1, 1.0.0.1, 2606:4700:4700::1111, 2606:4700:4700::1001 DNS = 10.103.213.1, fd6f:9403:2887:9cd6:10:103:213:1 SaveConfig = false # CLIENTS [Peer] # Server2 PublicKey = SERVER2_PUBLIC_KEY PresharedKey = SERVER1_PRESHARED_KEY Endpoint = SERVER2_PUBLIC_IP:53701 AllowedIPs = 0.0.0.0/0, ::0/0 #PersistentKeepalive = 25 [Peer] # PC PublicKey = CLIENT_PUBLIC_KEY PresharedKey = CLIENT_PRESHARED_KEY AllowedIPs = 10.103.213.11/32, fd6f:9403:2887:9cd6:10:103:213:11/128
防火牆配置。命令:
ufw allow 53701/udp comment 'WireGuard VPN' iptables -A FORWARD -i wg0 -j ACCEPT && iptables -A FORWARD -o wg0 -j ACCEPT && ip6tables -A FORWARD -i wg0 -j ACCEPT && ip6tables -A FORWARD -o wg0 -j ACCEPT echo 123 wireguard2x >> /etc/iproute2/rt_tables ip rule add iif wg0 table wireguard2x
客戶端配置
# CLIENT: PC [Interface] PrivateKey = CLIENT_PRIVATE_KEY Address = 10.103.213.11/32, fd6f:9403:2887:9cd6:10:103:213:11/128 DNS = 10.103.213.1, fd6f:9403:2887:9cd6:10:103:213:1 [Peer] # Server1 PublicKey = SERVER1_PUBLIC_KEY PresharedKey = CLIENT_PRESHARED_KEY Endpoint = SERVER1_PUBLIC_IP:53701 AllowedIPs = 0.0.0.0/0, ::0/0 #PersistentKeepalive = 25
筆記:
您可以使用以下命令查看目前生效的所有策略路由規則:
ip rule list
或ip rule
查看路由表,例如,
ip route show table wireguard2x
或ip route list table wireguard2x.
刷新路由記憶體:
ip route flush cache
您可以監控客戶端的網路流量——如果在 Linux 上,使用
sudo iptraf-ng
; 在 macOS 上使用sudo iftop
. (要在客戶端上執行。)
- 由於太多的實時更改,我發現執行很難解析。所以有人建議我嘗試
route get 192.0.2.0
(顯示正在使用的界面,例如,interface: utun2
)然後在 macOS 上執行ifconfig <interface>
(例如, )。ifconfig utun2
後者應顯示客戶端的私有(WireGuard 對等)IP 地址,例如,10.103.213.11
確認流量正在通過 WG 介面路由。這並不多,但這是一個開始。- UDPATE:
traceroute
非常棒!例如,traceroute 8.8.8.8
。(給 Chrispus Kamau 的帽子小費。)
curl ipinfo.io
在啟用 VPN 的情況下檢查您的 IP 地址。(要在客戶端上執行。)有關的: