云网牛站
所在位置:首页 > Linux云服务器 > 在Ubuntu 18.04系统中安装和配置WireGuard的方法

在Ubuntu 18.04系统中安装和配置WireGuard的方法

2020-04-22 11:54:52作者:戴进稿源:云网牛站

本文介绍在Ubuntu 18.04系统中安装和配置WireGuard的方法。将在充当VPN服务器的Ubuntu 18.04计算机上设置WireGuard,还将向您展示如何将WireGuard配置为客户端,客户端的流量将通过Ubuntu 18.04服务器进行路由。此设置可用于防御中间人攻击、匿名浏览网络、绕过受地域限制的内容,或允许您的同事在远程工作时安全地连接到公司网络。参考在Linux系统中安装及使用Wireguard建立虚拟专用网络

 

在Ubuntu 18.04上安装WireGuard

WireGuard维护自己的APT存储库,我们将从该存储库中安装软件包,并在有新版本可用时对其进行更新。

更新软件包列表,并安装管理系统存储库所需的工具,您的机器上可能已经装有该软件包:

sudo apt update

sudo apt install software-properties-common

添加WireGuard存储库:

sudo add-apt-repository ppa:wireguard/wireguard

出现提示时,按Enter键继续,add-apt-repository也将自动更新软件包列表。

安装WireGuard软件包:

sudo apt install wireguard

WireGuard作为内核模块运行,该模块被编译为DKMS模块,成功完成后,您将看到以下输出:

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模块。

 

配置WireGuard

WireGuard附带了两个名为wg和wg-quick的命令行工具,可用于配置和管理WireGuard接口。

运行以下命令以生成公钥和私钥:

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

这些文件将在/etc/wireguard目录中生成,您可以使用cat或更少的字体查看文件,私钥绝对不能与任何人共享。

生成密钥后,我们需要配置将路由VPN流量的隧道设备。

可以使用ip和wg从命令行设置设备,也可以使用文本编辑器创建配置文件。

创建一个名为wg0.conf的新文件,并添加以下内容。

运行:

sudo nano /etc/wireguard/wg0.conf

增加的内容:

[Interface]

Address = 10.0.0.1/24

SaveConfig = true

ListenPort = 51820

PrivateKey = SERVER_PRIVATE_KEY

PostUp = iptables -A FORWARD -i %i -j ACCEPT; iptables -t nat -A POSTROUTING -o ens3 -j MASQUERADE

PostDown = iptables -D FORWARD -i %i -j ACCEPT; iptables -t nat -D POSTROUTING -o ens3 -j MASQUERADE

该接口可以命名为任何名称,但是建议使用诸如include wg0或wgvpn0之类的名称,界面部分中的设置具有以下含义:

Address-wg0接口的以逗号分隔的v4或v6 IP地址列表,使用专用于专用网络的范围内的IP(10.0.0.0/8、172.16.0.0/12或192.168.0.0/16)。

ListenPort-WireGuard接受传入连接的端口。

PrivateKey-由wg genkey命令生成的私钥(要查看文件内容,请运行:sudo cat /etc/wireguard/privatekey)。

SaveConfig-设置为true时,关闭时接口的当前状态将保存到配置文件中。

PostUp-在启动界面之前执行的命令或脚本,在此示例中,我们使用iptables启用伪装,这将允许流量离开服务器,从而使VPN客户端可以访问Internet。

确保在-A POSTROUTING之后替换ens3以匹配公共网络接口的名称,您可以通过运行以下命令轻松找到该接口:

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

PostDown-在关闭接口之前执行的命令或脚本,接口关闭后,iptables规则将被删除。

wg0.conf和privatekey文件对普通用户不可读,使用chmod将权限设置为600:

sudo chmod 600 /etc/wireguard/{privatekey,wg0.conf}

完成后,使用配置文件中指定的属性启动wg0接口:

sudo wg-quick up wg0

该命令将产生类似于以下内容的输出:

[#] ip link add wg0 type wireguard

[#] wg setconf wg0 /dev/fd/63

[#] ip -4 address add 10.0.0.1/24 dev wg0

[#] ip link set mtu 1420 up dev wg0

[#] iptables -A FORWARD -i wg0 -j ACCEPT; iptables -t nat -A POSTROUTING -o ens3 -j MASQUERADE

运行wg show wg0检查接口状态和配置:

sudo wg show wg0

输出:

interface: wg0

public key: r3imyh3MCYggaZACmkx+CxlD6uAmICI8pe/PGq8+qCg=

private key: (hidden)

listening port: 51820

您也可以运行ip a show wg0来验证接口状态:

ip a show wg0

输出:

4: wg0: <POINTOPOINT,NOARP,UP,LOWER_UP> mtu 1420 qdisc noqueue state UNKNOWN group default qlen 1000

link/none 

inet 10.0.0.1/24 scope global wg0

valid_lft forever preferred_lft forever

要在启动时启用WireGuard接口,请运行以下命令:

sudo systemctl enable wg-quick@wg0

 

服务器网络和防火墙配置

为了使NAT正常工作,我们需要启用IP转发,打开/etc/sysctl.conf文件,并添加或取消注释以下行。

运行:

sudo nano /etc/sysctl.conf

增加的行:

net.ipv4.ip_forward=1

保存文件并应用更改:

sudo sysctl -p

输出:

net.ipv4.ip_forward = 1

如果使用UFW管理防火墙,则需要在端口51820上打开UDP通信:

sudo ufw allow 51820/udp

参考:Debian、Ubuntu、Linux Mint系统中的UFW防火墙入门教程

至此,已设置将充当服务器的Ubuntu对等端。

 

Linux和macOS客户端设置

有关所有受支持平台的安装说明,请访问:https://wireguard.com/install/,在Linux系统上,您可以使用分发软件包管理器来安装软件包,而在带有brew的macOS上也可以安装软件包。安装WireGuard后,请按照以下步骤配置客户端设备。

设置Linux和macOS客户端的过程几乎与服务器相同,首先生成公钥和私钥:

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

创建文件wg0.conf并添加以下内容。

运行:

sudo nano /etc/wireguard/wg0.conf

增加的内容:

[Interface]

PrivateKey = CLIENT_PRIVATE_KEY

Address = 10.0.0.2/24

[Peer]

PublicKey = SERVER_PUBLIC_KEY

Endpoint = SERVER_IP_ADDRESS:51820

AllowedIPs = 0.0.0.0/0

接口部分中的设置与设置服务器时的含义相同:

Address-wg0接口的以逗号分隔的v4或v6 IP地址列表。

PrivateKey-要在客户端计算机上查看文件的内容,请运行:sudo cat /etc/wireguard/privatekey。

对等部分包含以下字段:

PublicKey-您要连接的对等方的公共密钥(服务器的/etc/wireguard/publickey文件的内容)。

Endpoint-您要连接的对等方的IP或主机名,后跟冒号,然后是远程对等方侦听的端口号。

AllowedIPs-v4或v6 IP地址的逗号分隔列表,从该列表允许对等方的传入流量,并定向到该对等方的传出流量,我们使用0.0.0.0/0是因为我们正在路由流量,并希望服务器对等方发送具有任何源IP的数据包。

如果您需要配置其他客户端,只需使用其他专用IP地址重复相同的步骤即可。

 

Windows客户端安装程序

从WireGuard网站下载并安装Windows msi软件包,地址:https://wireguard.com/install/。

安装完成后,打开WireGuard应用程序,然后单击“添加隧道”->“添加空隧道…”(“Add Tunnel” -> “Add empty tunnel…”),如下图所示:

在Ubuntu 18.04系统中安装和配置WireGuard的方法

将自动创建一个公钥对并将其显示在屏幕上:

在Ubuntu 18.04系统中安装和配置WireGuard的方法

输入隧道的名称,并按如下所示编辑配置:

[Interface]

PrivateKey = CLIENT_PRIVATE_KEY

Address = 10.0.0.2/24

[Peer]

PublicKey = SERVER_PUBLIC_KEY

Endpoint = SERVER_IP_ADDRESS:51820

AllowedIPs = 0.0.0.0/0

在接口部分中,添加新行以定义客户端隧道地址。

在对等部分中,添加以下字段:

PublicKey-Ubuntu服务器的公共密钥(/etc/wireguard/publickey文件)。

Endpoint-Ubuntu服务器的IP地址,后跟冒号和WireGuard端口(51820)。

AllowedIPs-0.0.0.0/0

完成后,单击保存按钮。

 

将客户端对等方添加到服务器

最后一步是将客户端公钥和IP地址添加到服务器:

sudo wg set wg0 peer CLIENT_PUBLIC_KEY allowed-ips 10.0.0.2

确保使用在客户端计算机上生成的公用密钥(sudo cat/etc/wireguard/publickey)更改CLIENT_PUBLIC_KEY并调整客户端IP地址(如果不同),Windows用户可以从WireGuard应用程序复制公钥。

完成后,返回客户端计算机并打开隧道接口。

 

Linux和macOS客户端

在Linux客户端上,运行以下命令以打开界面:

sudo wg-quick up wg0

现在,您应该已连接到Ubuntu服务器,并且来自客户端计算机的流量应通过该服务器进行路由,您可以使用以下方法检查连接:

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

您也可以打开浏览器,键入“what is my ip”,然后您应该会看到Ubuntu服务器的IP地址。

要停止隧道,请关闭wg0接口:

sudo wg-quick down wg0

 

Windows客户端

如果您在Windows上安装了WireGuard,请单击激活按钮,连接对等体后,隧道状态将更改为Active:

在Ubuntu 18.04系统中安装和配置WireGuard的方法

 

结论

上面我们向您展示了如何在Ubuntu 18.04计算机上安装WireGuard并将其配置为VPN服务器。通过此设置,您可以通过保持流量数据私有来匿名浏览Web。

 

相关主题

搭建VPN工具Algo,Streisand,OpenVPN,StrongSwan,SoftEther,WireGuard

精选文章
热门文章