作者: 张无忌 時間: 2026-5-18 14:21 標題: WireGuard
本帖最後由 张无忌 於 2026-5-18 11:34 編輯
WireGuard 是 10 年中最流行 VPN protocol [1],它之前 IKEv2,主要是 Cisco 用的,iPhone / Android 也有 IKEv2。WireGuard 用 standard UDP port=51820,但是可能变动其他 UDP port,iPhone / Android smart phones 都有 WireGuard App,它通过二维码驶入 WireGuard client。
下面关于 OpenVPN, IPsec #1 (IKEv1), IPsec #2 (IKEv2), WireGuard 对 Protocol-Configuration, Throughput / Megabits per Second ,Ping Time / Milliseconds。
图1:OpenVPN, IPsec #1 (IKEv1), IPsec #2 (IKEv2), WireGuard
[attach]2526110[/attach]
Reference:
[1] WireGuard®
作者: 张无忌 時間: 2026-5-18 14:21
本帖最後由 张无忌 於 2026-5-23 07:32 編輯
Table of contents
Point-to-Point
Hub and Spoke
Site-to-Site
Client-to-Server
目录 WireGuard
作者: 张无忌 時間: 2026-5-18 14:21
本帖最後由 张无忌 於 2026-5-20 06:44 編輯
Site-to-Site
在网络上通常由两个 endpoints 不同的地方 Sites A(192.168.10.x) and B(192.168.20.x),各有自己一条 private key,互相给出 public key(generated by private key)。
Endpoint A:有第一条 private key A,用 private A generates 另外一条 public key A
Private key A = 0MYKtWMb97aXyY44opkAINeD4EebATaZvl6KEUHK5Wo=
Public key A = NFD8lW5tXTCCzZ6gr2y1Tpcm563oLlx78NQ+ndakoSw=
Endpoint B:有第一条 private key B,用 private B generates 另外一条 public key B
Private key B = yEPZfOTRGf0Ifzug6CBXI2lPHGoyEHCsiqp9nwKQBE4=
Public key B = lie2cDQU/zlvUcYRLf56ie0c7CDBAKddP/dhSJsYc0Q=
以下通过 Gemini (在 Google Chrome 右上角)和 poe AI 完成。
要在 Site A 和 Site B 之间建立一个完整的 Site-to-Site(网对网)WireGuard 隧道,让两边的内网(192.168.10.x 和 192.168.20.x)能够互相通信,你需要在两台路由器上分别配置 WireGuard 配置文件。
除了你已经准备好的密钥(Key)外,我们还需要为 WireGuard 隧道本身分配一个独立的虚拟子网(例如 10.0.0.0/24),以及指定双方的公网 IP/域名和端口。
假设:
Site A 的公网 IP / 动态域名为:pub-a.example.com,监听端口为 51820
Site B 的公网 IP / 动态域名为:pub-b.example.com,监听端口为 51820
WireGuard 隧道内网 IP:Site A 分配 10.0.0.1/32,Site B 分配 10.0.0.2/32
具体的配置文件(或路由器界面设置)应该如下填写:
🛠️ Site A 路由器的配置 (192.168.10.1)
在 Site A 的 WireGuard 设置中,你需要填写自己的私钥,并把 Site B 添加为 Peer(对端)。
- [Interface]
- # Site A 自身的设置
- PrivateKey = 0MYKtWMb97aXyY44opkAINeD4EebATaZvl6KEUHK5Wo=
- Address = 10.0.0.1/32
- ListenPort = 51820
- #poe begin
- # 允许 A 内网访问 B 内网,且转发通过 wg0
- # 需要你根据系统(iptables/nftables)调整;下面给的是通用 iptables 示例
- PostUp = iptables -A FORWARD -i wg0 -j ACCEPT; iptables -A FORWARD -o wg0 -j ACCEPT; iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
- PostDown = iptables -D FORWARD -i wg0 -j ACCEPT; iptables -D FORWARD -o wg0 -j ACCEPT; iptables -t nat -D POSTROUTING -o eth0 -j MASQUERADE
- #poe end
- [Peer]
- # 联络 Site B 的设置
- PublicKey = lie2cDQU/zlvUcYRLf56ie0c7CDBAKddP/dhSJsYc0Q=
- # 允许通过隧道的流量:包含隧道对端 IP 和 Site B 的整个内网网段
- AllowedIPs = 10.0.0.2/32, 192.168.20.0/24
- # 指向 Site B 的公网地址和端口
- Endpoint = pub-b.example.com:51820
- # 保持连接活跃(如果其中一方在 NAT 后,建议开启)
- PersistentKeepalive = 25
🛠️ Site B 路由器的配置 (192.168.20.1)
同样地,在 Site B 的设置中,填写自己的私钥,并把 Site A 添加为 Peer。
- [Interface]
- # Site B 自身的设置
- PrivateKey = yEPZfOTRGf0Ifzug6CBXI2lPHGoyEHCsiqp9nwKQBE4=
- Address = 10.0.0.2/32
- ListenPort = 51820
- #poe begin
- PostUp = iptables -A FORWARD -i wg0 -j ACCEPT; iptables -A FORWARD -o wg0 -j ACCEPT; iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
- PostDown = iptables -D FORWARD -i wg0 -j ACCEPT; iptables -D FORWARD -o wg0 -j ACCEPT; iptables -t nat -D POSTROUTING -o eth0 -j MASQUERADE
- #poe end
- [Peer]
- # 联络 Site A 的设置
- PublicKey = NFD8lW5tXTCCzZ6gr2y1Tpcm563oLlx78NQ+ndakoSw=
- # 允许通过隧道的流量:包含隧道对端 IP 和 Site A 的整个内网网段
- AllowedIPs = 10.0.0.1/32, 192.168.10.0/24
- # 指向 Site A 的公网地址和端口
- Endpoint = pub-a.example.com:51820
- PersistentKeepalive = 25
⚠️ 关键的后续网络设置(非常重要)
仅仅填好上面的 WireGuard 配置,两端的设备通常还是无法互访的,你必须在两台路由器上完成以下三点网络调整:
1. 开启 IP 转发 (IP Forwarding)
路由器必须允许在不同网卡(本地 LAN 口和 WireGuard 虚拟网卡)之间转发数据包。一般路由器系统(如 OpenWrt、RouterOS)默认已为路由器开启,如果是 Linux 自建网关,需执行:
sysctl -w net.ipv4.ip_forward=1
2. 防火墙规则 (Firewall / NAT)
放行 UDP 端口:两端的路由器防火墙必须在 WAN 口放行对方连入的 UDP 51820 端口(如果其中一方没有公网 IP,至少有公网 IP 的那一端必须放行并做好端口映射)。
允许区域间转发:防火墙必须允许 LAN 区域与 WireGuard (VPN) 区域之间的流量 双向 Forwarding(转发)。
不要对隧道流量做 Masquerade (SNAT):确保两端局域网互访的流量是“直接路由”过去的有源 IP,而不是被 NAT 转换成了路由器的 IP,否则两端设备无法直接识别对方的真实内网 IP。
3. 静态路由 (Static Routing)
大部分现代路由器系统(如 OpenWrt)在你在 AllowedIPs 填入 192.168.20.0/24 或 192.168.10.0/24 时,会自动自动生成路由表。
如果你的路由器没有自动生成,你需要手动在路由器后台添加静态路由:
在 Site A 路由器添加:目的网段 192.168.20.0/24,下一跳(Gateway)指向 10.0.0.2(或指定的 wg 网卡)。
在 Site B 路由器添加:目的网段 192.168.10.0/24,下一跳(Gateway)指向 10.0.0.1。
Reference:
[1] Windows WireGuard client
目录 WireGuard
作者: 张无忌 時間: 2026-5-18 14:22
本帖最後由 张无忌 於 2026-5-20 22:52 編輯
Client-to-Server
Client 用手机 / Windows 10/11 or other devices 在大陆,WireGuard server 放在一般香港。
Site A: WireGuard client
Private key A = 0MYKtWMb97aXyY44opkAINeD4EebATaZvl6KEUHK5Wo=
Public key A = NFD8lW5tXTCCzZ6gr2y1Tpcm563oLlx78NQ+ndakoSw=
Site B: WireGuard server
Private key B = yEPZfOTRGf0Ifzug6CBXI2lPHGoyEHCsiqp9nwKQBE4=
Public key B = lie2cDQU/zlvUcYRLf56ie0c7CDBAKddP/dhSJsYc0Q=
以下通过 Gemini (在 Google Chrome 右上角)
💻 1. Windows 10 客户端配置 (Client)
在 Windows 10 的 WireGuard 客户端中,新建一个空隧道,粘贴以下配置:
- [Interface]
- PrivateKey = 0MYKtWMb97aXyY44opkAINeD4EebATaZvl6KEUHK5Wo=
- Address = 10.0.1.2/32
- # 建议使用公共 DNS(如 Google 或 Cloudflare),避免大陆 DNS 污染
- DNS = 8.8.8.8, 1.1.1.1
- [Peer]
- PublicKey = lie2cDQU/zlvUcYRLf56ie0c7CDBAKddP/dhSJsYc0Q=
- # 0.0.0.0/0 代表将全流量(所有上网流量)通过香港 Server 转发
- AllowedIPs = 0.0.0.0/0
- Endpoint = hk-pccw.example.com:51820
- # 保持连接活跃,防止因 NAT 超时断线
- PersistentKeepalive = 25
🌐 2. 香港 GL-iNet 路由器配置 (Server)
如果你直接在 GL.iNet 的 Web 界面配置,可以直接在 VPN -> WireGuard 服务器 中添加一个 Peer,并将 Client 的 Public Key A 填入。
如果是通过高级设置(LuCI)或直接编辑配置文件,其标准 WireGuard 格式如下:
- [Interface]
- PrivateKey = yEPZfOTRGf0Ifzug6CBXI2lPHGoyEHCsiqp9nwKQBE4=
- Address = 10.0.1.1/24
- ListenPort = 51820
- [Peer]
- # 对应 Windows 客户端的公钥
- PublicKey = NFD8lW5tXTCCzZ6gr2y1Tpcm563oLlx78NQ+ndakoSw=
- # 仅允许该客户端的隧道 IP 通过
- AllowedIPs = 10.0.1.2/32
目录 WireGuard
作者: 张无忌 時間: 2026-5-18 14:55
本帖最後由 张无忌 於 2026-5-21 06:19 編輯
Multi-Hop WireGuard https://www.procustodibus.com/blog/2022/06/multi-hop-wireguard/
WireGuard双跳配置后客户端无法访问互联网的问题求助 https://www.volcengine.com/article/118913
Wireguard gotchas with multiple tunnels https://casavant.org/2020/10/10/wireguard-fwmark.html
Some Unofficial WireGuard Documentation https://github.com/pirate/wireguard-docs
作者: 张无忌 時間: 2026-5-21 20:40
本帖最後由 张无忌 於 2026-5-21 14:32 編輯
Point-to-Point
现在腾讯云 A point 用 WireGuard 联系百度云 B point [1]。
腾讯云 A point:
PrivateKey = AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEE=
PublicKey = /TOE4TKtAqVsePRVR+5AA43HkAK5DSntkOCO7nYq5xU=
Address = 10.0.0.1/32
ListenPort = 51821
百度云 B point
PrivateKey = ABBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBFA=
PublicKey = fE/wdxzl0klVp/IR8UcaoGUMjqaWi3jAd7KzHKFS6Ds=
Address = 10.0.0.2/32
ListenPort = 51822
IP = 182.61.2.246
腾讯云 A
- # 腾讯云 A
- # /etc/wireguard/wg0.conf
- # local settings for Endpoint A
- [Interface]
- PrivateKey = AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEE=
- Address = 10.0.0.1/32
- ListenPort = 51821
- # remote settings for Endpoint B
- [Peer]
- PublicKey = fE/wdxzl0klVp/IR8UcaoGUMjqaWi3jAd7KzHKFS6Ds=
- Endpoint = 182.61.2.246:51822
- AllowedIPs = 10.0.0.2/32
百度云 B
- # 百度云 B
- # /etc/wireguard/wg0.conf
- # local settings for Endpoint B
- [Interface]
- PrivateKey = ABBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBFA=
- Address = 10.0.0.2/32
- ListenPort = 51822
- # remote settings for Endpoint A
- [Peer]
- PublicKey = /TOE4TKtAqVsePRVR+5AA43HkAK5DSntkOCO7nYq5xU=
- AllowedIPs = 10.0.0.1/32
Test Out the Tunnel
腾讯云 A:ping 10.0.0.2
- root@VM-0-4-debian:/etc/wireguard# ping 10.0.0.2
- PING 10.0.0.2 (10.0.0.2) 56(84) bytes of data.
- 64 bytes from 10.0.0.2: icmp_seq=1 ttl=64 time=74.8 ms
- 64 bytes from 10.0.0.2: icmp_seq=2 ttl=64 time=37.3 ms
- 64 bytes from 10.0.0.2: icmp_seq=3 ttl=64 time=37.2 ms
Add PersistentKeepalive = 25
腾讯云 A:ping 10.0.0.2
- root@VM-0-4-debian:/etc/wireguard# ping 10.0.0.2
- PING 10.0.0.2 (10.0.0.2) 56(84) bytes of data.
- 64 bytes from 10.0.0.2: icmp_seq=1 ttl=64 time=37.3 ms
- 64 bytes from 10.0.0.2: icmp_seq=2 ttl=64 time=37.3 ms
- 64 bytes from 10.0.0.2: icmp_seq=3 ttl=64 time=37.2 ms
Reference:
[1] WireGuard Point to Point Configuration
目录 WireGuard
作者: VPN-Guru 時間: 2026-5-21 20:49
【無忌CHing】你這個《逆向翻墻》的 Server
在下月【世界杯】開鑼後, 絕對派上用場,我估計 Bandwidth 不夠用哦
有沒有辦法提高 Bandwidth, 讓更多香港的足球愛好者有更高速的《逆向翻墻》的體現呢 ??
作者: 张无忌 時間: 2026-5-23 15:31
本帖最後由 张无忌 於 2026-5-23 23:02 編輯
Hub and Spoke
图1:Hub and Spoke [1]
[attach]2526751[/attach]
private and public keys
- $ cat endpoint-a.key
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEE=
- $ cat endpoint-a.pub
- /TOE4TKtAqVsePRVR+5AA43HkAK5DSntkOCO7nYq5xU=
- $ cat endpoint-b.key
- ABBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBFA=
- $ cat endpoint-b.pub
- fE/wdxzl0klVp/IR8UcaoGUMjqaWi3jAd7KzHKFS6Ds=
- $ cat host-c.key
- CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCGA=
- $ cat host-c.pub
- jUd41n3XYa3yXBzyBvWqlLhYgRef5RiBD7jwo70U+Rw=
腾讯云 C(IP=122.51.105.150)
- # /etc/wireguard/wg0.conf
- # local settings for Host C
- [Interface]
- PrivateKey = CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCGA=
- Address = 10.0.0.3/32
- ListenPort = 51823
- # remote settings for Endpoint A
- [Peer]
- PublicKey = /TOE4TKtAqVsePRVR+5AA43HkAK5DSntkOCO7nYq5xU=
- AllowedIPs = 10.0.0.1/32
- # remote settings for Endpoint B
- [Peer]
- PublicKey = fE/wdxzl0klVp/IR8UcaoGUMjqaWi3jAd7KzHKFS6Ds=
- AllowedIPs = 10.0.0.2/32
阿里云 A(IP=223.4.21.2)
- # /etc/wireguard/wg0.conf
- # local settings for Endpoint A
- [Interface]
- PrivateKey = AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEE=
- Address = 10.0.0.1/32
- ListenPort = 51821
- # remote settings for Host C
- [Peer]
- PublicKey = jUd41n3XYa3yXBzyBvWqlLhYgRef5RiBD7jwo70U+Rw=
- Endpoint = 122.51.105.150:51823
- AllowedIPs = 10.0.0.0/24
百度云 B(IP=182.61.2.246)
- # /etc/wireguard/wg0.conf
- # local settings for Endpoint B
- [Interface]
- PrivateKey = ABBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBFA=
- Address = 10.0.0.2/32
- ListenPort = 51822
- # remote settings for Host C
- [Peer]
- PublicKey = jUd41n3XYa3yXBzyBvWqlLhYgRef5RiBD7jwo70U+Rw=
- Endpoint = 122.51.105.150:51823
- AllowedIPs = 10.0.0.0/24
- PersistentKeepalive = 25
Test Out the Tunnels
百度云 B
- sudo python3 -m http.server 80
阿里云 A
- curl 10.0.0.2
Result 阿里云 A
- <!DOCTYPE HTML>
- <html lang="en">
- <head>
- <meta charset="utf-8">
- <title>Directory listing for /</title>
- </head>
- <body>
- <h1>Directory listing for /</h1>
- <hr>
- <ul>
- <li><a href="wg0.conf">wg0.conf</a></li>
- <li><a href="wg0.conf.bdy">wg0.conf.bdy</a></li>
- <li><a href="wg0.conf.hkepc">wg0.conf.hkepc</a></li>
- </ul>
- <hr>
- </body>
- </html>
图2:
[attach]2526753[/attach]
阿里云 A ping 10.0.0.2
- root@iZbp1gqjwuuwwj3caa4h0cZ:/etc/wireguard# ping 10.0.0.2
- PING 10.0.0.2 (10.0.0.2) 56(84) bytes of data.
- 64 bytes from 10.0.0.2: icmp_seq=1 ttl=63 time=51.3 ms
- 64 bytes from 10.0.0.2: icmp_seq=2 ttl=63 time=51.4 ms
- 64 bytes from 10.0.0.2: icmp_seq=3 ttl=63 time=51.8 ms
Reference:
[1] WireGuard Hub and Spoke Configuration
目录 WireGuard
