Board logo

標題: WireGuard [打印本頁]

作者: 张无忌    時間: 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(对端)。
  1. [Interface]
  2. # Site A 自身的设置
  3. PrivateKey = 0MYKtWMb97aXyY44opkAINeD4EebATaZvl6KEUHK5Wo=
  4. Address = 10.0.0.1/32
  5. ListenPort = 51820

  6. #poe begin
  7. # 允许 A 内网访问 B 内网,且转发通过 wg0
  8. # 需要你根据系统(iptables/nftables)调整;下面给的是通用 iptables 示例
  9. PostUp = iptables -A FORWARD -i wg0 -j ACCEPT; iptables -A FORWARD -o wg0 -j ACCEPT; iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
  10. PostDown = iptables -D FORWARD -i wg0 -j ACCEPT; iptables -D FORWARD -o wg0 -j ACCEPT; iptables -t nat -D POSTROUTING -o eth0 -j MASQUERADE
  11. #poe end

  12. [Peer]
  13. # 联络 Site B 的设置
  14. PublicKey = lie2cDQU/zlvUcYRLf56ie0c7CDBAKddP/dhSJsYc0Q=
  15. # 允许通过隧道的流量:包含隧道对端 IP 和 Site B 的整个内网网段
  16. AllowedIPs = 10.0.0.2/32, 192.168.20.0/24
  17. # 指向 Site B 的公网地址和端口
  18. Endpoint = pub-b.example.com:51820
  19. # 保持连接活跃(如果其中一方在 NAT 后,建议开启)
  20. PersistentKeepalive = 25
複製代碼
..

🛠️ Site B 路由器的配置 (192.168.20.1)
同样地,在 Site B 的设置中,填写自己的私钥,并把 Site A 添加为 Peer。
  1. [Interface]
  2. # Site B 自身的设置
  3. PrivateKey = yEPZfOTRGf0Ifzug6CBXI2lPHGoyEHCsiqp9nwKQBE4=
  4. Address = 10.0.0.2/32
  5. ListenPort = 51820

  6. #poe begin
  7. PostUp = iptables -A FORWARD -i wg0 -j ACCEPT; iptables -A FORWARD -o wg0 -j ACCEPT; iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
  8. PostDown = iptables -D FORWARD -i wg0 -j ACCEPT; iptables -D FORWARD -o wg0 -j ACCEPT; iptables -t nat -D POSTROUTING -o eth0 -j MASQUERADE
  9. #poe end

  10. [Peer]
  11. # 联络 Site A 的设置
  12. PublicKey = NFD8lW5tXTCCzZ6gr2y1Tpcm563oLlx78NQ+ndakoSw=
  13. # 允许通过隧道的流量:包含隧道对端 IP 和 Site A 的整个内网网段
  14. AllowedIPs = 10.0.0.1/32, 192.168.10.0/24
  15. # 指向 Site A 的公网地址和端口
  16. Endpoint = pub-a.example.com:51820
  17. 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 客户端中,新建一个空隧道,粘贴以下配置:
  1. [Interface]
  2. PrivateKey = 0MYKtWMb97aXyY44opkAINeD4EebATaZvl6KEUHK5Wo=
  3. Address = 10.0.1.2/32
  4. # 建议使用公共 DNS(如 Google 或 Cloudflare),避免大陆 DNS 污染
  5. DNS = 8.8.8.8, 1.1.1.1

  6. [Peer]
  7. PublicKey = lie2cDQU/zlvUcYRLf56ie0c7CDBAKddP/dhSJsYc0Q=
  8. # 0.0.0.0/0 代表将全流量(所有上网流量)通过香港 Server 转发
  9. AllowedIPs = 0.0.0.0/0
  10. Endpoint = hk-pccw.example.com:51820
  11. # 保持连接活跃,防止因 NAT 超时断线
  12. PersistentKeepalive = 25
複製代碼
..

🌐 2. 香港 GL-iNet 路由器配置 (Server)
如果你直接在 GL.iNet 的 Web 界面配置,可以直接在 VPN -> WireGuard 服务器 中添加一个 Peer,并将 Client 的 Public Key A 填入。

如果是通过高级设置(LuCI)或直接编辑配置文件,其标准 WireGuard 格式如下:
  1. [Interface]
  2. PrivateKey = yEPZfOTRGf0Ifzug6CBXI2lPHGoyEHCsiqp9nwKQBE4=
  3. Address = 10.0.1.1/24
  4. ListenPort = 51820

  5. [Peer]
  6. # 对应 Windows 客户端的公钥
  7. PublicKey = NFD8lW5tXTCCzZ6gr2y1Tpcm563oLlx78NQ+ndakoSw=
  8. # 仅允许该客户端的隧道 IP 通过
  9. 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
  1. # 腾讯云 A

  2. # /etc/wireguard/wg0.conf

  3. # local settings for Endpoint A
  4. [Interface]
  5. PrivateKey = AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEE=
  6. Address = 10.0.0.1/32
  7. ListenPort = 51821

  8. # remote settings for Endpoint B
  9. [Peer]
  10. PublicKey = fE/wdxzl0klVp/IR8UcaoGUMjqaWi3jAd7KzHKFS6Ds=
  11. Endpoint = 182.61.2.246:51822
  12. AllowedIPs = 10.0.0.2/32
複製代碼
..

百度云 B
  1. # 百度云 B

  2. # /etc/wireguard/wg0.conf

  3. # local settings for Endpoint B
  4. [Interface]
  5. PrivateKey = ABBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBFA=
  6. Address = 10.0.0.2/32
  7. ListenPort = 51822

  8. # remote settings for Endpoint A
  9. [Peer]
  10. PublicKey = /TOE4TKtAqVsePRVR+5AA43HkAK5DSntkOCO7nYq5xU=
  11. AllowedIPs = 10.0.0.1/32
複製代碼
..

Test Out the Tunnel
腾讯云 A:ping 10.0.0.2
  1. root@VM-0-4-debian:/etc/wireguard# ping 10.0.0.2
  2. PING 10.0.0.2 (10.0.0.2) 56(84) bytes of data.
  3. 64 bytes from 10.0.0.2: icmp_seq=1 ttl=64 time=74.8 ms
  4. 64 bytes from 10.0.0.2: icmp_seq=2 ttl=64 time=37.3 ms
  5. 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
  1. root@VM-0-4-debian:/etc/wireguard# ping 10.0.0.2
  2. PING 10.0.0.2 (10.0.0.2) 56(84) bytes of data.
  3. 64 bytes from 10.0.0.2: icmp_seq=1 ttl=64 time=37.3 ms
  4. 64 bytes from 10.0.0.2: icmp_seq=2 ttl=64 time=37.3 ms
  5. 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
  1. $ cat endpoint-a.key
  2. AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEE=
  3. $ cat endpoint-a.pub
  4. /TOE4TKtAqVsePRVR+5AA43HkAK5DSntkOCO7nYq5xU=

  5. $ cat endpoint-b.key
  6. ABBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBFA=
  7. $ cat endpoint-b.pub
  8. fE/wdxzl0klVp/IR8UcaoGUMjqaWi3jAd7KzHKFS6Ds=

  9. $ cat host-c.key
  10. CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCGA=
  11. $ cat host-c.pub
  12. jUd41n3XYa3yXBzyBvWqlLhYgRef5RiBD7jwo70U+Rw=
複製代碼
..

腾讯云 C(IP=122.51.105.150)
  1. # /etc/wireguard/wg0.conf

  2. # local settings for Host C
  3. [Interface]
  4. PrivateKey = CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCGA=
  5. Address = 10.0.0.3/32
  6. ListenPort = 51823

  7. # remote settings for Endpoint A
  8. [Peer]
  9. PublicKey = /TOE4TKtAqVsePRVR+5AA43HkAK5DSntkOCO7nYq5xU=
  10. AllowedIPs = 10.0.0.1/32

  11. # remote settings for Endpoint B
  12. [Peer]
  13. PublicKey = fE/wdxzl0klVp/IR8UcaoGUMjqaWi3jAd7KzHKFS6Ds=
  14. AllowedIPs = 10.0.0.2/32
複製代碼
..

阿里云 A(IP=223.4.21.2)
  1. # /etc/wireguard/wg0.conf

  2. # local settings for Endpoint A
  3. [Interface]
  4. PrivateKey = AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEE=
  5. Address = 10.0.0.1/32
  6. ListenPort = 51821

  7. # remote settings for Host C
  8. [Peer]
  9. PublicKey = jUd41n3XYa3yXBzyBvWqlLhYgRef5RiBD7jwo70U+Rw=
  10. Endpoint = 122.51.105.150:51823
  11. AllowedIPs = 10.0.0.0/24
複製代碼
..

百度云 B(IP=182.61.2.246)
  1. # /etc/wireguard/wg0.conf

  2. # local settings for Endpoint B
  3. [Interface]
  4. PrivateKey = ABBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBFA=
  5. Address = 10.0.0.2/32
  6. ListenPort = 51822

  7. # remote settings for Host C
  8. [Peer]
  9. PublicKey = jUd41n3XYa3yXBzyBvWqlLhYgRef5RiBD7jwo70U+Rw=
  10. Endpoint = 122.51.105.150:51823
  11. AllowedIPs = 10.0.0.0/24
  12. PersistentKeepalive = 25
複製代碼
..

Test Out the Tunnels

百度云 B
  1. sudo python3 -m http.server 80
複製代碼
..

阿里云 A
  1. curl 10.0.0.2
複製代碼
..

Result 阿里云 A
  1. <!DOCTYPE HTML>
  2. <html lang="en">
  3. <head>
  4. <meta charset="utf-8">
  5. <title>Directory listing for /</title>
  6. </head>
  7. <body>
  8. <h1>Directory listing for /</h1>
  9. <hr>
  10. <ul>
  11. <li><a href="wg0.conf">wg0.conf</a></li>
  12. <li><a href="wg0.conf.bdy">wg0.conf.bdy</a></li>
  13. <li><a href="wg0.conf.hkepc">wg0.conf.hkepc</a></li>
  14. </ul>
  15. <hr>
  16. </body>
  17. </html>
複製代碼
..

图2:
[attach]2526753[/attach]

阿里云 A ping 10.0.0.2
  1. root@iZbp1gqjwuuwwj3caa4h0cZ:/etc/wireguard# ping 10.0.0.2
  2. PING 10.0.0.2 (10.0.0.2) 56(84) bytes of data.
  3. 64 bytes from 10.0.0.2: icmp_seq=1 ttl=63 time=51.3 ms
  4. 64 bytes from 10.0.0.2: icmp_seq=2 ttl=63 time=51.4 ms
  5. 64 bytes from 10.0.0.2: icmp_seq=3 ttl=63 time=51.8 ms
複製代碼
..


Reference:
[1] WireGuard Hub and Spoke Configuration

目录 WireGuard





歡迎光臨 電腦領域 HKEPC Hardware (https://h0.hkepc.com/forum/) Powered by Discuz! 7.2