如何配置wireguard服务端及客户端
从19年开始,ss流量已经能被gfw识别并屏蔽,原本打算切换到v2ray,但配置混淆需要域名反而会暴露出更多信息,此外,网上一篇文章指出v2ray开发者失联的同时一项v2ray流量识别的专利被注册,因此决定放弃v2ray并转向另一个被linus盛赞的wireguard。
wireguard是非常简单、现代化、快速的vpn,使用最新的加密技术,udp传输,支持ip漫游等。wireguard没有服务端、客户端的区分,每一台设备都是一个peer
。
安装
添加wireguard的PPA源
1 | sudo add-apt-repository ppa:wireguard/wireguard |
wireguard作为linux内核模块方式加载,内核更新wireguard也会自动重新编译,重启系统或使用modprobe
开启模块
1 | sudo modprobe wireguard |
检查wireguard模块是否成功加载,成功输出与下面类似
1 | vagrant@bionic:~$ lsmod | grep wireguard |
生成keys
wireguard提供了两个命令行工具wg
以及wg-quick
,使用wg
生成公钥和私钥
1 | umask 077 |
类似ssh,需要为每台设备生成一对publickey/privatekey
配置
我们需要生成一个虚拟网卡,名称可以按个人喜好选择,这里选择用wg0
,IP网段使用10.10.0.1/24
,确保该网段没有被你的家庭或公司网络使用,编辑文件/etc/wireguard/wg0.conf
1 | [Interface] |
PrivateKey
填上一步生成的私钥,填入你选择的Address
,这里配置了两个IP4/6的地址,enp0s3
是你服务器主要的网络设备,使用ifconfig
或ip a
查看你的主设备名,ListenPort
默认为51820,建议修改
要注意的是SaveConfig
设置,wireguard配置后不需要restart
或reload
,使用wg
命令添加peer
即可立即生效。但是,这些操作都是直接写入到内存中而不是磁盘,因此如果你重启系统或服务,那么你就会失去添加的配置,所以这里设置为true
,自动保存配置。但这个配置有时候也会让人非常困扰,你可能添加配置后重启服务,然后你发现添加的配置不见了,需要先停止服务再添加配置最后重启。
添加网络配置,使得内核可以正确路由我们的NAT流量
1 | sudo bash -c 'cat << EOF >> /etc/sysctl.conf |
运行命令,开启wg0设备
1 | sudo wg-quick up wg0 |
如果一切顺利,那么运行下面命令你将看到类似的输出
1 | vagrant@bionic:~$ sudo wg |
客户端配置
客户端配置与服务端类似
1 | [Interface] |
填写服务器的publickey、ip、端口,配置0.0.0.0/0, ::/0
将所有流量传输到服务端
在服务端添加客户端配置
1 | sudo wg set wg0 peer <client-public-key> allowed-ips 10.10.0.2/32,fd86:ea04:1111::2/128 |
以上的操作针对的是linux系统,官方推出了可用的iOS/MacOS/Android/Windows图形界面软件,其中有一个选项要注意的是On-Demand
,有Ethernet
和Wi-Fi
选项,如果勾选,那么会在选中网络中会自动开启vpn
设置开机启动
如果你的系统使用systemd,如ubuntu,设置wireguard开机启动命令如下
1 | systemctl enable wg-quick@wg0 |
开放防火墙
UFW
1 | sudo ufw allow 51820/udp |
参考文档
WireGuard: fast, modern, secure VPN tunnel
How to setup your own VPN server using WireGuard on Ubuntu
Setting Up PiHole, Wireguard VPN server and Client (Ubuntu Server)