WireGuard 简介
WireGuard是具有最新加密技术的现代VPN(虚拟专用网)技术。与IPsec和OpenVPN等其他类似解决方案相比,WireGuard更快,更易于配置且性能更高。它是一个跨平台,几乎可以在任何地方运行,包括Linux,Windows,Android和macOS。 Wireguard是对等VPN。它不使用客户端-服务器模型。根据其配置,对等方可以充当传统的服务器或客户端。 WireGuard通过在充当隧道的每个对等设备上创建网络接口来工作。对等体通过交换和验证公共密钥(类似于SSH模型)来相互认证。公钥与隧道中允许的IP地址列表进行映射。 VPN流量封装在UDP中。在本教程中,我们将在充当VPN服务器的Ubuntu 18.04计算机上设置WireGuard。我们还将向您展示如何将WireGuard配置为客户端。客户端的流量将通过Ubuntu 18.04服务器进行路由。此设置可用于防御中间人攻击,匿名浏览网络,绕过受地域限制的内容,或允许您的同事在远程工作时安全地连接到公司网络。
WG安装
- 更新软件包列表,并安装管理系统存储库所需的工具:
1
2
| sudo apt update
sudo apt install software-properties-common
|
- 添加 WireGuard 仓库:
1
| sudo add-apt-repository ppa:wireguard/wireguard
|
出现提示时,按Enter键继续。 add-apt-repository也将自动更新软件包列表。
- 安装WireGuard软件包:
1
| sudo apt install wireguard
|
WireGuard作为内核模块运行,该模块被编译为DKMS
模块。成功完成后,您将看到以下输出:
1
2
3
4
5
6
7
8
9
10
| wireguard:
Running module version sanity check.
- Original module
- No original module exists within this kernel
- Installation
- Installing to /lib/modules/4.15.0-88-generic/updates/dkms/
depmod...
DKMS: install completed.
|
更新内核时,需要将针对新内核编译WireGuard模块。
配置WG
WireGuard 程序包附带了两个名为wg
和wg-quick
的命令行工具,可用于配置和管理WireGuard接口。
运行以下命令以生成公钥和私钥:
1
| wg genkey | sudo tee /etc/wireguard/privatekey | wg pubkey | sudo tee /etc/wireguard/publickey
|
:information_source: 公私钥放置于/etc/wireguard
目录,其中私钥绝对不能与任何人共享
生成密钥后,我们需要配置路由VPN的隧道设备
可以使用ip和wg从命令行设置设备,也可以使用文本编辑器创建配置文件。
创建一个名为wg0.conf
(文件名可以随意)的新文件,并添加以下内容:
1
2
3
4
5
6
7
8
9
| cat >> /etc/wireguard/wg0.conf << EOF
[Interface]
Address = 192.168.159.0/24 # 填写网络地址段
SaveConfig = true # 关闭时,接口的当前状态将保存到配置文件中
ListenPort = 51820 # 监听端口
PrivateKey = QNKQCtPo2E5saDnXORaIORhZH6NtcvIJPHqF9EdEL1o= # 私钥文件,即/etc/wireguard/privatekey
PostUp = iptables -A FORWARD -i %i -j ACCEPT; iptables -t nat -A POSTROUTING -o ens33 -j MASQUERADE # 在启动之前执行的命令或脚本,使用iptables启用伪装,允许流量离开服务器,从而使VPN客户端可以访问Internet。
PostDown = iptables -D FORWARD -i %i -j ACCEPT; iptables -t nat -D POSTROUTING -o ens33 -j MASQUERADE # 在启动之后执行的命令或脚本,接口关闭后,iptables规则将被删除
EOF
|
修改privatekey
和wg0.conf
的权限, 保证其安全性:
1
| sudo chmod 600 /etc/wireguard/{privatekey,wg0.conf}
|
完成后,使用配置文件中指定的属性启动wg0
接口:
1
2
3
4
5
6
7
8
| $ sudo wg-quick up wg0
* 输出内容如下所示:
[#] ip link add wg0 type wireguard
[#] wg setconf wg0 /dev/fd/63
[#] ip -4 address add 192.168.159.0/24 dev wg0
[#] ip link set mtu 1420 up dev wg0
[#] iptables -A FORWARD -i wg0 -j ACCEPT; iptables -t nat -A POSTROUTING -o ens33 -j MASQUERADE
|
运行wg show wg0
检查接口状态和配置:
1
2
3
4
5
6
7
| $ sudo wg show wg0
* 输出内容如下所示:
interface: wg0
public key: uD6Xex2eP5CEUVcVP3EZB5csh2JReWXthoVZMzURwCQ=
private key: (hidden)
listening port: 51820
|
也可以运行ip a show wg0
来验证接口状态:
1
2
3
4
5
6
7
| $ ip a show wg0
* 输出内容如下所示:
4: wg0: <POINTOPOINT,NOARP,UP,LOWER_UP> mtu 1420 qdisc noqueue state UNKNOWN group default qlen 1000
link/none
inet 192.168.159.0/24 scope global wg0
valid_lft forever preferred_lft forever
|
设置wireguard 开机自启:
1
| sudo systemctl enable wg-quick@wg0
|
服务器网络和防火墙配置
为了使NAT
正常工作,我们需要启用IP转发,打开/etc/sysctl.conf
文件,并添加或取消注释以下行:
1
2
3
| ...
net.ipv4.ip_forward=1
...
|
修改完成之后, 执行sudo sysctl -p
使配置永久生效
如果你使用UFW
来管理防火墙,则需要在端口51820上打开UDP通信:
1
| sudo ufw allow 51820/udp
|
至此,WG SERVER 已完成配置
客户端配置
Linux & macOS
去往官方下载站点(https://wireguard.com/install/), 查看如何安装WireGuard
设置Linux和macOS客户端过程基本相同, 首先生成公钥与私钥
1
| wg genkey | sudo tee /etc/wireguard/privatekey | wg pubkey | sudo tee /etc/wireguard/publickey
|
创建/etc/wireguard/wg0.conf
并添加以下内容:
1
2
3
4
5
6
7
8
9
| [Interface]
PrivateKey = CLIENT_PRIVATE_KEY # /etc/wireguard/privatekey
Address = 192.168.43.0/24
[Peer]
PublicKey = SERVER_PUBLIC_KEY # /etc/wireguard/publickey
Endpoint = SERVER_IP_ADDRESS:51820 # 对方wireguard server的ip和端口
AllowedIPs = 0.0.0.0/0
|
Windows
直接下载客户端工具: https://download.wireguard.com/windows-client/wireguard-amd64-0.1.0.msi
安装好软件之后, 点击左下角的Add Tunnel
, 创建一个新的隧道Create new tunnel
name
随便起喽, 内容如下:
1
2
3
4
5
6
7
8
| [Interface]
PrivateKey = MOeXEby5OG1xQBCP9AJEJEsxmxYDG1FHHzlcOgi/ClI=
Address = 192.168.43.0/24
[Peer]
PublicKey = uD6Xex2eP5CEUVcVP3EZB5csh2JReWXthoVZMzURwCQ= # 服务器端公钥
Endpoint = 192.168.159.132:51820 # 服务器ip以及端口
AllowedIPs = 0.0.0.0/0
|
将客户端对等方添加到服务器
最后一步是将客户端公钥和IP地址添加到服务器:
1
2
3
| # sudo wg set wg0 peer CLIENT_PUBLIC_KEY allowed-ips 10.0.0.2
sudo wg set wg0 peer T5ZTibLaWh9/3EzA1ZfCdiojM0HfXvh99mfVlqHpaU0= allowed-ips 192.168.43.0/24
sudo wg set wg0 peer UqF/BDwShHFulAUN4yx0latMIiIW0Cbb+IuNHEYEBj0= allowed-ips 192.168.43.0/24
|
确保使用在客户端计算机上生成的公用密钥·(sudo cat /etc/wireguard/publickey
)·更改CLIENT_PUBLIC_KEY
并调整客户端IP地址(如果不同的话),Windows用户可以从WireGuard软件当中复制公钥
Linux 和 macos 客户端
在Linux客户端上,运行以下命令以打开界面:
现在,应该已连接到Ubuntu服务器,并且来自客户端计算机的流量应通过该服务器进行路由,可以使用以下方法检查连接:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
| $ sudo wg
* 输出内容如下所示:
interface: wg0
public key: sZThYo/0oECwzUsIKTa6LYXLhk+Jb/nqK4kCCP2pyFg=
private key: (hidden)
listening port: 48052
fwmark: 0xca6c
peer: r3imyh3MCYggaZACmkx+CxlD6uAmICI8pe/PGq8+qCg=
endpoint: XXX.XXX.XXX.XXX:51820
allowed ips: 0.0.0.0/0
latest handshake: 1 minute, 22 seconds ago
transfer: 58.43 KiB received, 70.82 KiB sent
|
停止和关闭隧道:
Windows 客户端
点击软件上的Activate
即可
一键安装 wireguard
参考链接