文章

debian9编译安装WireGuard

  编辑于:2019-09-10
文章目录

前言

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/

发表回复