OpenWrt 搭建 WireGuard 服务端使用指南

WireGuard 是一个易于配置、快速且安全的开源 VPN,被称为下一代 VPN 协议,旨在取代 OpenVPN 、IPsec 等传统 VPN 协议,其最初是为 Linux 系统开发,后被集成到 Linux 内核,现在已可全平台使用。

基础概念

WireGuard 属于一种点对点二层网络协议,不区分客户端或服务端,每个运行 WireGuard 的设备被称为节点,并不要求每个设备都有公网 IP 地址,只需要其中一个节点有公网 IP 即可完成组网。

如果所有组网节点都有公网 IP ,则可以互相实现点对点连接,如果只有一个节点具备公网 IP ,则所有组网流量都需要通过这个公网 IP 的节点进行中转。

为了方便理解,我们把拥有公网 IP 地址的节点称为服务端,其它节点称为客户端,各类客户端通过连接同一个服务端来完成组网。

常用 WireGuard 命令示例

生成私钥:wg genkey > /etc/private.key
生成公钥:wg pubkey > /etc/public.key
生成预共享密钥:wg genpsk > /etc/shared.key

准备工作

1、确认路由器具备公网 IP 地址。(IPv4 或 IPv6 均可)
2、为路由器安装 WireGuard 接口:luci-proto-wireguard

OpenWrt 配置 WireGuard 服务端

1、首先确认路由器是否已经安装 WireGuard,前往“系统”-“软件包”,检索 WireGuard 软件是否已经安装。

注意:WireGuard 接口安装完毕后,需要重启一次路由器,然后才能在接口中看到选项。

2、前往“网络”-“接口”界面,添加新接口,接口名称可按需自定义,协议则选择 WireGuard VPN 协议。

3、为 wg 接口配置“私钥”、“公钥”、“监听端口”、“IP 地址”。

如果你已经有准备好的“私钥”、“公钥”,则直接粘贴进去即可。
如果没有,则可以点击界面上的“生成新的密钥对”按钮,会自动随机生成密钥并填充。

监听端口:按需自定义一个公网能访问的端口号。

IP 地址:按需自定义一个 IP 地址,这个 IP 是路由器自身作为一个 WireGuard 节点所使用的 IP,不可与路由器上的其它网段相同,书写格式需要附带 IP 掩码位,例如:10.0.0.1/24

4、为这个 wg 接口配置防火墙区域,一般为了方便日常使用,选择 lan 即可,也可按需创建其它防火墙区域。

然后点击“保存”按钮。

5、打开 wg 所需的防火墙端口,前往“网络”-“防火墙”-“通信规则”界面,按需添加所需规则。

6、如果路由器拥有的是动态公网 IP 地址,那么可以启用 DDNS 服务来方便后续使用,如何创建 DDNS 服务本文不做介绍。

OpenWrt 配置对端节点参数

1、随后转到对端配置界面,按需添加对端参数,即客户端参数。

如果客户端尚无任何配置,则可以使用 OpenWrt 的对端配置界面生成所需参数,然后通过二维码等方式导出参数给客户端使用,以便快速配置客户端。

公钥:输入对端设备(客户端) wg 接口的公钥。(必需项)

私钥:如果要导出参数给对端设备使用,则输入对端 wg 接口的私钥,配置完对端设备后,则此项可以删除。

预共享密钥:可选项,嫌麻烦可以不填。所有组网节点应使用一个相同的预共享密钥。(点击界面按钮可自动随机生成一个)

允许的 IP:指定哪些网段需要通过 WireGuard 接口转发,如果为空,则默认为 0.0.0.0/0, ::/0
路由器上的此项参数要格外注意,一般不要为空,否则所有流量都将被转发给 WG 对端设备,这会导致路由器的网络故障。
注意:路由端此参数也不要输入路由器自身局域网的网段,例如输入 192.168.9.0/24 ,否则会导致逻辑错误,使得路由器自身局域网变得不可访问。(因为流量被转发至对端设备了)

路由允许的 IP:按需勾选,勾选后,对端节点即可访问此路由器上的其它网段。

剩下的三项参数:端点主机、端点端口、连接保活间隔,通常无需设置,因为对端(客户端)无法通过公网访问。
如果对端设备具备公网 IP 地址和固定的端口号(且打开了防火墙端口),则可以根据实际情况添加这三项参数。

2、各项必要参数添加完毕后,点击底部的“生成配置”按钮,即可打开一个二维码界面,如果是手机客户端,则直接打开手机的 WireGuard 应用程序,选择“扫描二维码”的方式来添加配置,其它不支持二维码的 WireGuard 应用程序,可通过复制粘贴的方式导入配置。

注意:对端参数不能多个设备共用,应给每个设备添加不同的对端参数。

3、给客户端导入了配置后,应返回对端配置界面,稍加修改部分参数,以便正式投入使用。

确认各项配置无误后,最后再点击“保存并应用”按钮以使修改生效。

如果要排除所有局域网地址段通过 WireGuard 接口,则将下列地址段添加至“允许的 IP”选项即可。

0.0.0.0/5, 8.0.0.0/7, 11.0.0.0/8, 12.0.0.0/6, 16.0.0.0/4, 32.0.0.0/3, 64.0.0.0/2, 128.0.0.0/3, 160.0.0.0/5, 168.0.0.0/6, 172.0.0.0/12, 172.32.0.0/11, 172.64.0.0/10, 172.128.0.0/9, 173.0.0.0/8, 174.0.0.0/7, 176.0.0.0/4, 192.0.0.0/9, 192.128.0.0/11, 192.160.0.0/13, 192.169.0.0/16, 192.170.0.0/15, 192.172.0.0/14, 192.176.0.0/12, 192.192.0.0/10, 193.0.0.0/8, 194.0.0.0/7, 196.0.0.0/6, 200.0.0.0/5, 208.0.0.0/4, ::/0, /32

配置其它 WireGuard 节点

配置接口参数

本示例中以另外一台安卓手机为例,先安装 WireGuard 应用程序,然后打开并创建配置。

点击右下角的圆形“加号”按钮,选择“扫描二维码”,可快速完成配置相关参数,由上面提到的 OpenWrt 对端配置界面获得二维码,通过二维码可导入大部分参数,但仍然需要手动配置几项必要的参数。

名称:按需自定义即可。

局域网 IP 地址:此设备作为一个 WireGuard 节点所使用的 IP 地址(需要附带 IP 掩码位),需要与服务端同网段,但不能与其它设备冲突。

监听端口:作为客户端的 WireGuard 节点不需要输入端口。

DNS 服务器:一般填对端(服务端)的节点地址即可。

配置对端参数(Peers)

这个对端节点指的就是服务端节点,这台设备通过访问这个服务端节点来完成组网。

对端:即服务端的公网 IP 地址和端口号,也可使用域名。

路由的 IP 地址(段):指定哪些网段需要通过 WireGuard 接口转发,如果想进行全局代理,则输入: 0.0.0.0/0, ::/0

全局代理的情况下,所有客户端流量都通过 WireGuard 接口转发,其效果等同于身处服务端的物理局域网中。

如果你只是希望通过 WireGuard 访问远端的局域网,则输入(示例):10.0.0.0/24, 192.168.9.0/24
这时客户端的上网流量仍然按正常路径转发,只有当访问指定的局域网 IP 段时才会经由 WireGuard 节点转发。

开始使用

注意:OpenWrt 要使 WireGuard 配置修改生效,需要重启一次 wg 接口,如果添加了新的对端参数,也需要重启一次 wg 接口。

示例的安卓设备客户端,只需要点击右侧的滑块按钮,启用已经配置好的参数即可。

配置无误的情况下,稍等数秒即可连接成功,在此界面也能看到流量详情。

提示:如果未看到流量信息,则表示连接失败,请自行排查故障原因。

通过 WireGuard 组网成功后,即可随意访问远端路由器上的局域网,如同身处物理局域网一样,没有任何限制。

路由端可以通过“状态”-“WireGuard”来查看节点连接情况。

提示:如果需要添加更多设备进行 WireGuard 组网,则在 OpenWrt 服务端继续增加对端节点参数即可。