关于 WireGuard

WireGuard 是2017年新出现的一个开源 VPN 方案,其代码简单高效,基于 Linux 内核实现并且采用了更先进的加密协议。

WireGuard 项目官方网站

WireGuard 源代码 Github 镜像

安装

WireGuard 官方网站上已经有极为详尽的各发行版的安装指导,在此我就不再赘述了。

WireGuard Installation Guide

服务端配置

开启 IPv4 NAT 转发

1
sudo sysctl -w net.ipv4.ip_forward=1

生成服务端密钥对

1
2
umask 077
wg genkey | tee privatekey | wg pubkey > publickey

编写服务端配置文件

1
sudo vim /etc/wireguard/wg0.conf 
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
[Interface]
Address = 10.0.0.1/24
SaveConfig = true
PostUp = iptables -A FORWARD -i wg0 -j ACCEPT; iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
PostDown = iptables -D FORWARD -i wg0 -j ACCEPT; iptables -t nat -D POSTROUTING -o eth0 -j MASQUERADE
ListenPort = 51820
PrivateKey = {Server Private Key}

[Peer]
PublicKey = {Client Private Key}
AllowedIPs = 10.0.2.0/24

启动 WireGuard

1
sudo wg-quick up wg0

客户端配置

在 WireGuard 中,服务端和客户端都是 peer,可以说是基本平等的,只是哪一方主动连接另一方而已,所以客户端的配置文件与服务端是十分相近的。

首先是同服务端一样生成客户端的私钥和公钥,然后编辑 /etc/wireguard/wg0.conf

1
2
3
4
5
6
7
8
9
[Interface]
PrivateKey = {Client Private Key}
Address = 10.0.2.1/24
DNS = 8.8.8.8

[Peer]
PublicKey = {Server Public Key}
Endpoint = {server_ip}:{server_port}
AllowedIPs = 0.0.0.0/0

之后同样执行

1
sudo wg-quick up wg0

来启动 WireGuard。

可以分别在服务端和客户端执行

1
sudo wg show

来观察隧道的运行状况。

如果要关闭 WireGuard,执行

1
sudo wg-quick down wg0