前言
WireGuard是Jason A. Donenfeld开发的开源VPN协议。目前已经支持Linux, macOS, Android, iOS以及OpenWrt平台。WireGuard被视为下一代VPN协议,用来替代OpenVPN,IPSec等VPN协议。并且WireGuard采用的UDP,对于TCP阻断的服务器有奇效。
注意:WireGuard不支持OVZ架构的虚拟服务器。尽量采用新的系统,因为WireGuard对内核有一些要求。
安装
安装
安装相关依赖
sudo apt-get install libmnl-dev libelf-dev linux-headers-$(uname -r) build-essential pkg-config
获取源代码
直接下载
wget https://git.zx2c4.com/WireGuard/snapshot/WireGuard-0.0.20181218.tar.xz
或者使用GIT克隆
git clone https://git.zx2c4.com/WireGuard
编译并安装
cd WireGuard/src make make install
服务端配置
创建文件夹保存私钥和公钥
cd ~ mkdir wg cd wg wg genkey | tee private | wg pubkey > public cat private cat public
private后面的内容是私钥,public后面是公钥。
在/etc/wireguard
目录下新建wg0.conf
配置文件,内容如下:
[Interface] PrivateKey = 你的私钥 Address = 10.10.10.1/24 ListenPort = 54321 PostUp = iptables -A FORWARD -i %i -j ACCEPT; iptables -A FORWARD -o %i -j ACCEPT; iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE PostDown = iptables -D FORWARD -i %i -j ACCEPT; iptables -D FORWARD -o %i -j ACCEPT; iptables -t nat -D POSTROUTING -o eth0 -j MASQUERADE [Peer] PublicKey = 客户端公钥 AllowedIPs = 10.10.10.2/32
上面的peer是客户端的相关设置,在后面添加,这里实际上客户端的说法实际上不太准确,但是为了便于理解,暂且把VPS叫做服务端,自己的电脑手机等等叫做客户端。
上面配置中的eth0需要替换为你实际中使用的接口,需要使用ifconfig
查看你实际使用的接口。
配置保存后,使用 wg-quick up wg0
根据配置文件快速创建 wg0
虚拟网卡并执行 PostUp
指定操作;使用 wg-quick down wg0
删除虚拟网卡并执行 PostDown
指定操作;使用 wg
查看各个节点的状态。
因为WireGuard需要使用iptables的nat转发,所以在内核里面开启nat转发。
在/etc/sysctl.conf
里面添加
net.ipv4.ip_forward = 1
然后使用sysctl -p
使其生效。
自启动,使wireguard
开机自动启动。
sudo systemctl enable wg-quick@wg0
如果你的配置使其他名字,修改wg0
即可。
客户端配置
这里说一下window下的客户端配置
在https://tunsafe.com/download中下载客户端,可使用RC
版本。
一路接受,信任即可。
创建密钥文件
打开tunsafe→Generate Key Pair,点击Randomize
把里面的内容记录下来,并且把public key的内容添加到服务器的[Peer]
行下面的PublicKey 后面。
编辑客户端设置
创建一个wg0.txt
(也可以用其他名字)的文件。
添加下面的内容
[Interface] PrivateKey = 客户端私钥 Address = 10.10.10.2/24 DNS = 8.8.8.8 [Peer] PublicKey = 服务端公钥 Endpoint = 服务端IP:54321 AllowedIPs = 0.0.0.0/0
将wg0.txt重命名为wg0.conf,打开tunsafe→File→Import File,选择wg0.conf,然后选择wg0,然后connect
即可。
国内外分流
原理是将国内IP写进系统路由表,路由表以外的IP走VPN代理。
1.开启Tunsafe的Pre/Post命令功能。在"Option"选择"Allow Pre/Post Commands"
2.下载route.zip解压到Tunsafe安装目录。
3. Wireguard客户端配置文件加入PreUp,Postdown命令调用批处理文件。
然后我们在[Interface]
字段中加入以下两行代码,注意别加到[Peer]
中!
PreUp = start "" "D:\Program Files\TunSafe\route\routes-up.bat" PostDown = start "" "D:\Program Files\TunSafe\route\routes-up.bat"
自行修改D:\Program Files\TunSafe\route
为你的文件路径。
4.正常使用Tunsafe点击connect就会调用routes-up.bat将国内IP写进系统路由表,断开disconnect则会调用routes-down.bat删除路由表。
连接成功后可上 http://ip111.cn/ 测试自己的IP。
常见问题
wireguard连接成功,但是无法打开网页
MTU的设置可能会导致这种情况,首先在服务端输入ip addr
,查看wg0开头的哪一行,mtu的值为多少,将其记录下来
在客户端的配置[Interface]
下面添加一行
mtu = 小于或等于服务端的mtu值
设置完成之后重新连接到服务端再次测试能否打开网页。
参考链接:
https://github.com/lmc999/auto-add-routes
https://www.wireguard.com/
https://doubibackup.com/t86-fo_1.html
https://blog.lancitou.net/wireguard-setup/
https://medium.com/@xtarin/wireguard%E4%BB%8B%E7%BB%8D%E5%8F%8A%E5%AE%A2%E6%88%B7%E7%AB%AF%E4%BD%BF%E7%94%A8%E6%95%99%E7%A8%8B-2ae1eb4bf670
https://www.linode.com/docs/networking/vpn/set-up-wireguard-vpn-on-ubuntu/