wireguard搭建记录
WireGuard是一款简洁、快速且现代化的VPN。本文记录了利用wireguard搭建内网穿透的步骤。
¶准备工作
首先,需要一台公网服务器,假设其地址是wg-server.com。防火墙放开一个UDP端口给wireguard使用,假设是54321。
再准备一台局域网服务器,作为局域网入口设备。我选择的是immortalWrt旁路由。如果有多个局域网需要穿透,则每个局域网都需要准备一台。下面以两个局域网为例。假如第一个局域网网段是192.168.x.0/24,旁路由IP是192.168.x.51。第二个局域网网段是192.168.y.0/24,旁路由IP是192.168.y.53。需要特别注意的是,这两个局域网网段不能一样。
给wireguard网络选择一个网段,可以任意选择。下面以10.28.0.0/24为例。
对接入wireguard网络的设备,我选择静态分配IP地址。所以需要给所有接入wireguard网络的设备规划IP地址。我有3台移动设备,外加2台旁路由,所以总共5台设备。IP分配参考下表。
| IP | 主机名 | 备注 |
|---|---|---|
| 10.28.0.1 | wg-server.com | 公网服务器 |
| 10.28.0.51 | wrt-x.lan | 第一个局域网旁路由,局域网网段192.168.x.0/24。DNS服务器。 |
| 10.28.0.53 | wrt-y.lan | 第二个局域网旁路由,局域网网段192.168.y.0/24。DNS服务器。 |
| 10.28.0.135 | windows.lan | 接入wireguard网络的Windows电脑 |
| 10.28.0.150 | phone.lan | 接入wireguard网络的手机 |
| 10.28.0.178 | linux.lan | 接入wireguard网络的linux电脑 |
以上所有lan域名,均在两台旁路由的dns服务器添加了解析,解析地址是局域网IP,而不是wireguard网络IP。
最终设置完成后,windows电脑、Linux电脑以及手机,在任意网络环境下接入公网,连上wireguard网络后,就可以使用lan域名访问局域网下面的设备。
以下是设置的详细过程。
¶服务器安装与配置
所有接入wireguard网络的设备,通过这一台公网服务器交换数据。安装命令参考如下,需要root权限。
1 | apt install wireguard |
¶生成私钥与公钥
服务器和所有客户端都需要生成一对私钥和公钥。下面生成了服务器和所有客户端的私钥和公钥。后面编写配置文件的时候会用到。
1 | mkdir -p /etc/wireguard |
¶创建配置文件
创建配置文件/etc/wireguard/wg0.conf。内容参考如下。[Interface]是服务器网卡的配置。PostUp表示启动网卡时执行的指令,这条iptable规则表示允许wireguard进来的流量通过本机转发。随后是5个[Peer]。公钥填入对应客户端的公钥,AllowedIPs填入给客户端分配的IP地址。对于两台旁路由,还需要填入其所在局域网的网段。
1 | [Interface] |
¶启动服务
最后,启动wireguard服务,并打开开机自启动。如果服务启动失败,可以用命令wg-quick up wg0启动,观察log。配置文件修改后,可以使用命令systemctl restart wg-quick@wg0重启服务。服务重启后,客户端如果要立即重连,也需要重启。也可以等待一段时间后,自动重连。取决于客户端设置的PersistentKeepalive参数。
1 | systemctl start wg-quick@wg0.service |
¶客户端
¶immortalwrt系统
两个旁路由的设置过程类型,这里以wrt-x.lan为例。软件包搜索安装 luci-proto-wireguard。安装完成后重启系统。
系统启动后,进入网络->接口->添加新接口,名字写wg0,协议选择WireGuard VPN,点击创建接口,进入接口配置页面。
常规设置选项卡:
- 私钥:步骤 生成私钥与公钥 有给客户端生成私钥,填入即可
- 公钥:步骤 生成私钥与公钥 有给客户端生成公钥,填入即可
- 监听端口:不填
- IP地址:填入规划的IP地址。这是指定客户端网卡的IP地址,最好设置成
/32。
防火墙选项卡,创建防火墙区域wg。对端选项卡,点击添加对端。公钥填入服务器的公钥,私钥填入服务器的私钥,允许的IP填10.28.0.0/24和192.168.x.0/24,勾选为允许的IP创建路由,对端地址填入服务器的地址,对端端口填入服务器的端口,持续保持连接填25。点击保存,回到上一级页面,点击保存并应用。如果再次修改网卡配置,保存后,建议手工点一下重启网卡,确保设置生效。
划重点,
持续保持连接一定要填,如果没有填,客户端不会定时握手,NAT环境下可能会导致网络断连。
接口配置完成后,还需要配置防火墙,进入网络->防火墙,在常规设置选项卡中,找到wg区域,点击编辑,输入、出站数据、区域内转发都选择接受,允许转发到目标区域和允许来自源区域的转发都选择lan区域。这是允许wg区域访问lan区域的网络。最终设置效果如下。

点击NAT规则选项卡,新增一个nat规则。名称填wg-to-lan,出站区域选lan,操作选MASQUERADE。如下图所示。点击保存。这条NAT规则是wireguard网络能访问局域网设备的关键。
至此,immortalwrt wireguard设置完成。登录服务器,10.28.0.51和192.168.x.51,以及192.168.x.0/24局域网下的所有设备都能ping通了。如果旁路由使用SamrtDNS作为主dns服务器,还需要取消smartdns的设备绑定。服务->SmartDNS,高级设置选项卡,取消勾选绑定设备,点击保存。在主服务器,使用指令nslookup wrt-x.lan 10.28.0.51测试DNS服务器是否正常。
¶iphone手机
AppStore搜索并安装 wireguard。注意,需要美区账号才能搜索到。在任意一个Linux系统创建配置文件,示例如下。在[Interface]字段填入手机的私钥、地址和DNS服务器。因为要解析lan域名,所以DNS指向旁路由。[Peer]填入服务器的信息,关键是AllowedIPs的配置,这里决定了手机能访问哪一个局域网。假如手机已经在一个局域网了,那么AllowedIPs只需要加另一个局域网网段。
1 | [Interface] |
使用指令 qrencode -t ansiutf8 < xxx.conf 将配置文件转换成二维码。如果没有qrencode指令,可以使用apt install qrencode 安装。iPhone 打开wireguard,点击右上角的加号,选择扫描二维码,扫描刚刚添加的二维码即可。然后按提示操作即可。激活网络,在浏览器输入局域网网址,测试网络是否能正常访问。
¶Linux系统
我的Linux系统是Mint。安装指令如下,需要root权限。
1 | apt install wireguard |
创建配置文件 /etc/wireguard/wg0.conf,示例配置如下。添加了一条PostUp指令,将网卡wg0的域名设置为lan。确保能解析本地域名。使用指令wg-quick up wg0加入wireguard网络,执行wg-quick down wg0退出wireguard网络。加入和退出都需要root权限。
1 | [Interface] |
¶windows系统
进入https://download.wireguard.com/windows-client/下载安装包,下载完成后安装并打开。首先创建配置文件,示例如下。在wireguard页面,新建隧道,选择刚刚创建的配置文件,点击连接,即可接入wireguard网络。
1 | [Interface] |
¶添加新的客户端
如果未来有新的客户端需要加入,步骤如下:
- 分配IP地址
- 创建私钥和公钥
- 服务器添加peer,并重启服务
- 编写配置文件
- 安装对应系统的客户端,导入配置文件