如何在Ubuntu 22.04安装WireGuard VPN

一个爱折腾的人 Lv1

快速开始

WireGuard是一种现代VPN虚拟私有网络技术,它利用最新的加密技术。 与其他流行的VPN解决方案,例如IPsec和OpenVPN相比,WireGuard更快,如果是5.6 及以上内核则已经集成了”WireGuard“ 就不需要安装了,只需要安装wireguard工具就行。

要安装它,请运行apt 命令 sudo apt update && sudo apt install wireguard

1
2
sudo apt update
sudo apt install wireguard

这将安装WireGuard工具。

配置WireGuard

wgwg-quick命令行工具可帮助您配置和管理WireGuard接口,WireGuard接口是虚拟网卡。WireGuard VPN网络中的每个设备都需要具有私钥和公钥。

我们可以使用wiregurad的工具wg genkeywg pubkey/etc/wireguard/目录中生成私钥/etc/wireguard/privatekey和公钥/etc/wireguard/publickey

以下命令将使用wg genkeywg pubkeytee命令 以及管道同时生成私钥和公钥并存储在/etc/wireguard/目录。

1
wg genkey | sudo tee /etc/wireguard/privatekey | wg pubkey | sudo tee /etc/wireguard/publickey

您可以使用cat命令less命令查看私钥和公钥文件的内容。请不要把私钥与任何人共享,并且应始终保证私钥的安全。

Wireguard还支持预共享密钥,这增加了对称密钥加密的附加层。预共享密钥是可选的,并且对于每个对等设备都必须是唯一的。

下一步是配置虚拟接口。可以使用ip命令 wg命令配置接口。

使用你喜欢的文本编辑器 创建配置文件/etc/wireguard/wg0.conf,在本教程中我们将使用vim创建文件

复制黏贴 以下内容到/etc/wireguard/wg0.conf文件中,然后保存并退出vim编辑器

sudo vim /etc/wireguard/wg0.conf

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
[Interface]
Address = 10.0.0.1/24
Address = 2000::1/48
#SaveConfig = true
PostUp = iptables -A FORWARD -i wg0 -j ACCEPT; iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE; ip6tables -A FORWARD -i wg0 -j ACCEPT;ip6tables -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; ip6tables -D FORWARD -i wg0 -j
ACCEPT;ip6tables -t nat -D POSTROUTING -o eth0 -j MASQUERADE
ListenPort = 57123
PrivateKey = ubuntu私钥
Mtu = 1280

[Peer]
PublicKey = win公钥
AllowedIPs = 10.0.0.2/32, 2000::2/128
PersistentKeepalive = 25

/etc/wireguard/wg0.conf

接口的命名可以是任何你喜欢的名称,但是建议使用诸如wg0wgvpn0之类的名称。可以让我们能快速分清是物理接口还是虚拟接口即可。

这里说明一下/etc/wireguard/wg0.conf配置文件定义接口的每个字段含义。

Address wg0接口的IP v4或IP v6的地址。请使用保留给私有网络范围内的IP地址,比如10.0.0.0/8、172.16.0.0/12或192.168.0.0/16。

ListenPort 是接口监听的端口。PrivateKeywg genkey命令生成的私钥。你可以使用sudo cat /etc/wireguard/privatekey命令要查看私钥文件的内容。

SaveConfig 设置为true时,当关闭接口时将当前配置将保存到配置文件中。PostUp 在启动接口之前执行的命令或脚本。

在此示例中,在PostUp钩子启用iptables伪装。这允许流量离开服务器,使VPN客户端可以访问互联网。

请记得使用您可访问网络的接口名称替换-A POSTROUTING后面的ens3。您可以通过以下ip命令方式轻松找到可访问网络的接口。

1
ip -o -4 route show to default | awk '{print $5}'

启用Wireguard接口

完成以上步骤后,我们可以通过wg-quick启动wireguard服务器。这在wireguard中就是将接口状态设置为开启,运行wg-quick up命令将启用wg0接口。

1
sudo wg-quick up wg0
1
2
3
4
5
6
7
8
[#] ip link add wg0 type wireguard
[#] wg setconf wg0 /dev/fd/63
[#] ip -4 address add 10.0.0.1/32 dev wg0
[#] ip -6 address add 2000::1/128 dev wg0
[#] ip link set mtu 1280 up dev wg0
[#] ip -6 route add 2000::2/128 dev wg0
[#] ip -4 route add 10.0.0.2/32 dev wg0
[#] iptables -A FORWARD -i wg0 -j ACCEPT; iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE; ip6tables -A FORWARD -i wg0 -j ACCEPT; ip6tables -t nat -A POSTROUTING -o eth0 -j MASQUERADE

要检查接口状态和配置,请运行wg show命令。因为wg0是一个虚拟网卡,因此您也可以运行ip a show wg0来验证wg0接口状态。

1
2
sudo wg show wg0
ip a show wg0
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
interface: wg0
public key: (hidden)
private key: (hidden)
listening port: 57123

peer: (hidden)
endpoint: (hidden)
allowed ips: 10.0.0.10/32, 2000::10/128
latest handshake: 1 minute, 29 seconds ago
transfer: 180 B received, 220 B sent
persistent keepalive: every 25 seconds

peer: (hidden)
endpoint: (hidden)
allowed ips: 10.0.0.3/32, 2000::3/128
latest handshake: 1 minute, 40 seconds ago
transfer: 6.60 KiB received, 15.46 KiB sent
persistent keepalive: every 25 seconds

peer: (hidden)
allowed ips: 10.0.0.2/32, 2000::2/128
persistent keepalive: every 25 seconds

peer: (hidden)
allowed ips: 10.0.0.5/32, 2000::5/128
persistent keepalive: every 25 seconds

wireguard作为内核模块运行,默认情况wireguard会自动启动,但接口wg0虚拟网卡不会自动启动。

你可以通过systemctl命令将wg0设置为自动启动。要在启动时启用WireGuard的wg0接口。请运行sudo systemctl enable wg-quick@wg0命令。

1
sudo systemctl enable wg-quick@wg0

开启内核转发

通过开启转发可以通过wireguaed访问互联网

1
sudo vim /etc/sysctl.conf

在文件末尾加入

1
2
net.ipv4.ip_forward = 1
net.ipv6.conf.all.forwarding=1

立即生效

1
sysctl -p /etc/sysctl.conf

客户端配置

win上,可以直接去官网下载客户端,配置示例如下。

1
2
3
4
5
6
7
8
9
[Interface]
PrivateKey = win私钥
Address = 10.0.0.2/32, 2000::2/128

[Peer]
PublicKey = ubuntu公钥
AllowedIPs = 192.168.1.0/24
Endpoint = (hidden)
PersistentKeepalive = 25
  • 标题: 如何在Ubuntu 22.04安装WireGuard VPN
  • 作者: 一个爱折腾的人
  • 创建于 : 2023-08-18 22:00:00
  • 更新于 : 2023-09-02 04:26:26
  • 链接: https://www.izeka.eu.org/2023/08/18/如何在Ubuntu 22.04安装WireGuard VPN/
  • 版权声明: 本文章采用 CC BY-NC-SA 4.0 进行许可。