Wireguard是一个非常轻量化的VPN,相比臃肿的OpenVPN配置要简单很多。非常适合组建自己家的VPN,这样比较敏感的服务就可以先连接到家里的VPN,然后再访问内网了。
下图是我家的网络拓扑(详见:树莓派4B+安装OpenWrt用作旁路由 | Kunyang’s Blog)是把OpenWrt作为旁路由使用,其他设备的默认网关和DNS指向OpenWrt。
OpenWrt
安装
所需插件:
- kmod-wireguard
- luci-proto-wireguard
- wireguard-tools
配置
-
Network → Interface → Add new interface,创建一个wireguard,名字就叫
wg0
-
点击Generate new key pair,会自动生成一个公钥一个私钥,IP地址可以随便写一个私有地址的网段,我填写
192.168.100.1/24,这就是这个VPN的子网,然后设置默认端口,可以随便写,这里我设置55555
-
然后来到Network → Firewall → General Setting,可以选择为wireguard单独创建一个zone,Input, Output和Forward全部开启,Masq关闭
配置完之后在Interface → wg0 → Firewall Settings就能看到
wg0被单独分配到了自己的zone -
如果OpenWrt是主路由,则需要在Firewall → Traffic Rules中开放端口
-
像我家的情况OpenWrt是旁路由,则需要在主路由上做端口转发
-
在Network → Interface → wg0点击Edit,然后转到Peers,点击Add peer
- 添加Description,比如我的Windows台式机
- 我们可以点击创建新的密钥对
- 建议创建Preshared Key
- Allow IPs就是这个节点在这个VPN网络的IP地址,我输入
192.168.100.2/32,注意掩码一定是32,一个设备应该只含有一个IP地址 - 如果该设备在家里,比如我的台式机,Endpoint填OpenWrt的地址,如果设备在外网,比如我的MacBook,则填家里的公网IP
- Keep Alive可以设置为25
-
Reload一下
wg0接口
Windows或Mac Os
安装
从这里下载Wireguard App
配置
-
在OpenWrt → Network → Interface → wg0 → Edit Peer中可以很方便地为每个终端导出配置文件,复制粘贴在Windows客户端的wireguard中就可以了
-
这是Windows的配置例子
[Interface] PrivateKey = [Windows_PRIVATE_KEY] ListenPort = Port Address = 192.168.100.2/32 # 这个IP是Windows在wireguard子网的IP DNS = [OpenWrt IP] # 可以设置为Wireguard Server(即OpenWrt)的真实IP地址 [Peer] PublicKey = [OpenWrt_PUBLIC_KEY] PresharedKey = [Windows_PSK] AllowedIPs = 192.168.100.0/24 # 我的Windows和主路由在同一个子网,因此可以设置只有192.168.100.0/24的流量经过VPN Endpoint = [OpenWrt IP]:Port PersistentKeepalive = 25
MacBook
我的MacBook一般是带出家门使用的,因此不常常在我家的内网,除了AllowedIPs设置为所有流量经过VPN以外其他与上面相同
[Interface]
PrivateKey = [MacBook_PRIVATE_KEY]
Address = 192.168.100.3/32
ListenPort = PORT
DNS = [OpenWrt IP]
[Peer]
PublicKey = [OpenWrt_PUBLIC_KEY]
PresharedKey = [MacBook_PSK]
AllowedIPs = 0.0.0.0/0, ::/0 # All traffic
Endpoint = [Home Public IP]:Port # Public IP
PersistentKeepAlive = 25
Linux
安装
sudo apt update
sudo apt upgrade
sudo apt install wireguard
配置
-
进入
/etc/wireguard,并生成密钥对,也可以使用OpenWrt的Web manager来生成密钥对(使用OpenWrt集中的管理密钥对更方便,但是不安全)sudo -i cd /etc/wireguard umask 077 wg genkey | tee privatekey | wg pubkey > publickey -
编辑配置文件
wg0.conf[Interface] PrivateKey = [LINUX_PRIVATE_KEY] Address = 192.168.100.4/32 ListenPort = Port DNS = [OpenWrt IP] [Peer] PublicKey = [OpenWrt_PUBLIC_KEY] PresharedKey = [LINUX_PSK] AllowedIPs = 192.168.100.0/24 # 我的Linux作为服务器也一直在家里 Endpoint = [OpenWrt IP]:Port PersistentKeepAlive = 25 -
启动Wireguard
sudo wg-quick up wg0 -
如果需要reloead
sudo wg-quick down wg0 sudo wg-quick up wg0
问题分析
-
如果报错
root@debian:/etc/wireguard# sudo wg-quick up wg0 [#] ip link add wg0 type wireguard [#] wg setconf wg0 /dev/fd/63 [#] ip -4 address add 192.168.100.4/32 dev wg0 [#] ip link set mtu 1420 up dev wg0 [#] resolvconf -a wg0 -m 0 -x /usr/bin/wg-quick: line 32: resolvconf: command not found [#] ip link delete dev wg0没有安装
resolvconf,需要下载sudo apt install resolvconf