前言
温馨提示:VPN 的本意为 Virtual Private Network(虚拟专用网络),请不要将其与网络代理(Proxy)混淆。
WireGuard 是一种现代的开源 VPN 协议,旨在提供更高的安全性和更好的性能。它具有以下几个主要特点:
- 高效:WireGuard 使用现代加密算法,提供快速的加密和解密速度,能够在低延迟的情况下实现高效的数据传输。
- 跨平台支持:WireGuard 可在多种操作系统上运行,包括 Linux、Windows、macOS、iOS 和 Android。
- 易于配置:WireGuard 的配置相对简单,只需设置公钥和私钥即可建立安全连接。
需要的资源
- 软路由/已刷写固件的硬路由,本教程以 OpenWrt 为例。
- 公网 IPv4/IPv6 地址。
- 域名。
注意:
提示:
WireGuard 简易教程
1.1 WireGuard 服务端配置
1.1.1 安装软件包
在“Luci -> 系统 -> 软件包”中点击“更新列表”,然后安装 Luci-proto-wireguard 软件包。安装完毕后,检查是否存在 luci-app-wireguard 和 luci-i18n-wireguard-zh-cn 这两个包,若不存在,如法炮制安装即可。
在“Luci -> 系统 -> 启动项”中找到 network 并点击重启。


1.1.2 添加并配置接口(1)
在“Luci -> 网络 -> 接口”中点击“添加新接口…”。名称随便,此处假设名称为“wgserver”;协议选择“WireGuard VPN”,点击“提交”。

跳转到新页面后,在基本设置中,监听端口建议选择一个端口号大于 10000 的端口,此处假设监听端口为 14514;IP 地址必须填写私有 IP 且不能与当前路由器所在局域网网段有重合,此处假设 IP 地址为 10.23.45.1/24(子网前缀长度按需填写,常见写法为 /24、 /16 和 /8)。

在 Peers(对端) 中,点击“添加”。“允许的 IP”在 WireGuard VPN 网段中挑选单个 IP 填写进去,此处假设为 10.23.45.2/32(子网前缀长度必须为 /32),然后勾选“路由允许的 IP”。

1.1.3 添加并配置接口(2)
关于私钥和公钥,在浏览器中新增分页并访问此网站:https://www.wireguardconfig.com/,然后依次输入以下数据:
- Listen Port:填写先前选择的监听端口,此处为 14514。
- Number of Clients:客户端(即 Peers、对端)的数量,请根据自身需求填写。
- CIDR:填写先前设置的 WireGuard VPN 网段,此处为
10.23.45.0/24。
- Client Allowed IPs:客户端的“允许的 IP”。主要有两种写法:
0.0.0.0/0, ::/0(全局模式):客户端的所有流量均会被路由到服务端。
10.23.45.0/24, 192.168.1.0/24(策略模式):客户端指定网段内的流量会被路由到服务端,此处分别为 WireGuard VPN 网段和路由器局域网网段。若仅希望实现内网穿透则建议选择这种写法。
- Endpoint:填写软路由的域名和监听端口,此处为
wgserver.ddns.org:14514。
- DNS:填写软路由在 WireGuard VPN 网段中的 IP 地址,此处为
10.23.45.1(不用加子网掩码)。若软路由不具备处理 DNS 请求的能力,可填写公共 DNS 服务器地址。
- Use Pre-Shared Keys:使用预共享密钥(PSK)。若对安全性有高要求则可以勾选此项。

输入完毕后,点击“Generate Config”,下载 .zip 文件和服务端/客户端配置文件的二维码。此时不要关闭此分页,将软路由接口设置分页独立出来,并将“Server”配置中的“PrivateKey”和“PublicKey”分别填写到接口设置分页中的“私钥”和“公钥”框中,随后点击“保存&应用”。


提示:若不信任此网站,请使用 SSH 连接软路由,然后使用命令手动生成配置。相关命令请自行在 WireGuard 官网(https://www.wireguard.com/quickstart/)或其它地方中搜索。
1.1.4 设置防火墙区域
在“Luci -> 网络 -> 防火墙”中,点击“添加”。
在基本设置中,名称随便;入站数据、出站数据和转发均设置为“接受”并勾选 MSS 钳制;“覆盖网络”选择先前创建的接口,此处为“wgserver”。
在端口触发中,“允许转发到目标区域”和“允许从源区域转发”均选择 lan 区域,随后点击“保存&应用”。


1.1.5 设置防火墙规则
在“Luci -> 网络 -> 防火墙 -> 通信规则”中,滑到页面底部,在“新建转发规则”中输入规则名称并点击“添加并编辑…”。限制地址根据拥有的公网 IP 地址选择“仅 IPv4”或“仅 IPv6”,协议选择 UDP,源区域选择 wan 区域,目标区域选择“设备(输入)”区域,目标端口填写监听端口 14514,动作选择“接受”,随后点击“保存&应用”。



1.1.6 收尾
在“Luci -> 网络 -> 接口”中,找到先前创建的接口并点击“连接”。若显示 IP 地址,且在“Luci -> 状态 -> WireGuard 状态”中显示此接口的详细信息,则意味着 WireGuard 服务端配置成功。


1.2 WireGuard 客户端配置
1.2.1 安装软件
iOS 用户需在 App Store 中切换到美区后下载 WireGuard 客户端,具体方法请自行搜索。Android 和 PC 用户请前往官网(https://www.wireguard.com/install/)下载安装包。

1.2.2 导入配置
- 手机(二选一)
- 扫描先前保存的二维码;
- 也可将
.conf 文件传输到手机中后,从 .conf 文件导入。
- 电脑(二选一)
- 将先前保存的
.zip 文件解压缩,然后在客户端中点击“新增隧道”,选择解压出的 .conf 文件;



1.2.3 优化配置
- 手机
- 本地(Interface)
- 监听端口:填写一个未被占用的非特权端口,若留空则每次连接隧道时将随机选取一个非特权端口作为监听端口。
- DNS 服务器:推荐填写软路由在 WireGuard VPN 网段中的 IP 地址,此处为
10.23.45.1(不用加子网掩码)。若软路由不具备处理 DNS 请求的能力,可填写公共 DNS 服务器地址。若不填写则使用系统预设 DNS 服务器。
- MTU:留空即可。
- 远程(Peer)
- 连接保活间隔:若客户端位于 NAT 之后,可填写 25。
- 路由的 IP 地址(段):具体写法请参见章节 1.1.3 中的“Client Allowed IPs”部分。
- 电脑
- 首先:选择先前导入的隧道,点击“编辑”,在“编辑隧道”页面中根据自身需求填入参数。
- [Interface]
ListenPort = 12345:监听端口,若将此行删除则每次连接隧道时将随机选取一个非特权端口作为监听端口。
DNS = 10.23.45.1:DNS 服务器,若将此行删除则使用系统预设 DNS 服务器;。
MTU = 1500:建议不填或将此行删除。
- [Peer]
AllowedIPs = 10.23.45.0/24, 192.168.1.0/24:允许的 IP。具体写法请参见章节 1.1.3 中的“Client Allowed IPs”部分。
PersistentKeepalive = 25:连接保活间隔。
1.2.4 收尾
连接隧道。若出现“上次握手时间”或“Latest handshake”,则表明连接成功。

1.2.5 补充
若仅拥有配置文件但未保存二维码,请访问此网站:https://www.wireguardconfig.com/qrcode,将配置文件中的内容复制到网页中并点击“Generate QR Code”,即可获取到二维码。

2.1 FAQ
- 看不懂!
- 本教程作为一篇操作指南,仅关注“操作”部分,至于能否看懂原理,这实在不是本作者能决定的。
- 我没有软路由,作者能否送我一个?
- WireGuard 基于 UDP,在中国大陆使用 WireGuard 是否会被干扰(如限速和丢包等)?
- 视情况而定。不考虑 UDP 天生与中国大陆“水土不服”这一因素,若服务端和客户端不在同一省(市),则有概率会被干扰。运营商以打击 PCDN 为理由(存疑),对跨省(市)流量的限制较为明显,当然这种限制不仅对 WireGuard 有效。
- 为什么有时会出现发送一个或多个握手包后仍然无法握手成功的现象?
- WireGuard 基于 UDP,而 UDP 对网络质量较为敏感,且国内运营商对于来自家用宽带的 UDP 数据包有间歇性主动丢包的嫌疑。当然,若连续发送过多个以上握手包后依旧无法握手成功,请检查服务端和客户端的配置是否正确、DDNS 是否正常工作等。
参考资源
彩蛋
(来自你站聊天室在 2024.11.29 的聊天记录)
