WireGuard 是一种采用最先进加密技术的现代 VPN(虚拟专用网络)技术。与其他类似解决方案(例如 IPsec 和)相比OpenVPN ,WireGuard 更快、更容易配置且性能更高。它是跨平台的,几乎可以在任何地方运行,包括 Linux、Windows、Android 和 macOS。 Wireguard 是一种点对点 VPN;它不使用客户端-服务器模型。根据其配置,对等方可以充当传统服务器或客户端。
线卫 其工作原理是在每个对等设备上创建一个充当隧道的网络接口。对等点通过交换和验证公钥来相互验证,模仿 SSH 模型。公钥与隧道中允许的 IP 地址列表进行映射。 VPN 流量封装在 UDP 中。
在本教程中,我们将在 Ubuntu 18.04 计算机上设置 WireGuard,该计算机将充当 VPN 服务器。我们还将向您展示如何将 WireGuard 配置为客户端。客户端的流量将通过 Ubuntu 18.04 服务器进行路由。
此设置可用于防御中间人攻击、匿名上网、绕过地理限制内容或允许您的同事在远程工作时安全连接到公司网络。
先决条件#
您需要一个 Ubuntu 18.04 服务器,您可以使用 root 或帐户访问该服务器须藤权限
.
设置 WireGuard 服务器#
在本节中,我们将在 Ubuntu 计算机上安装 WireGuard 并将其设置为充当服务器。我们还将配置系统以通过它路由客户端的流量。
在 Ubuntu 18.04 上安装 WireGuard#
WireGuard 包含在默认的 Ubuntu 存储库中。要安装它,请运行以下命令:
sudo apt update
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
and wg-quick
允许您配置和管理 WireGuard 接口。
运行以下命令生成公钥和私钥:
wg genkey | sudo tee /etc/wireguard/privatekey | wg pubkey | sudo tee /etc/wireguard/publickey
这些文件将生成在/etc/wireguard
目录。您可以使用以下命令查看文件cat
or less 。私钥不应与任何人共享。
现在密钥已生成,我们需要配置用于路由 VPN 流量的隧道设备。
可以使用以下命令从命令行设置该设备ip
and wg
或通过使用文本编辑器创建配置文件。
创建一个新文件,名为wg0.conf
并添加以下内容:
sudo nano /etc/wireguard/wg0.conf
/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
该接口可以命名为任何名称,但建议使用类似的名称wg0
or wgvpn0
。界面部分的设置含义如下:
地址 - 以逗号分隔的 v4 或 v6 IP 地址列表wg0
界面。使用为专用网络保留的 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 客户端能够访问互联网。
确保更换ens3
after -A POSTROUTING
以匹配您的公共网络接口的名称。您可以通过运行以下命令轻松找到该接口:
ip -o -4 route show to default | awk '{print $5}'
PostDown - 在关闭接口之前执行的命令或脚本。一旦接口关闭,iptables 规则将被删除。
The wg0.conf
and 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
Run 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
/etc/sysctl.conf
保存文件并应用更改:
sudo sysctl -p
net.ipv4.ip_forward = 1
如果您使用 UFW 来管理您的firewall 您需要在端口上打开 UDP 流量51820
:
sudo ufw allow 51820/udp
就是这样。充当服务器的 Ubuntu 对等点已设置。
Linux 和 macOS 客户端设置#
所有受支持平台的安装说明可在以下位置找到:https://wireguard.com/install/ 。在 Linux 系统上,您可以使用分发包管理器安装该包,在 macOS 上,可以使用brew
。安装 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
/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
界面部分的设置与设置服务器时的含义相同:
地址 - 以逗号分隔的 v4 或 v6 IP 地址列表wg0
界面。
PrivateKey - 要查看客户端计算机上文件的内容,请运行:sudo cat /etc/wireguard/privatekey
对等部分包含以下字段:
PublicKey - 您想要连接的对等方的公钥。 (服务器的内容/etc/wireguard/publickey
file).
端点 - 您要连接的对等点的 IP 或主机名,后跟冒号,然后是远程对等点侦听的端口号。
AllowedIPs - 以逗号分隔的 v4 或 v6 IP 地址列表,允许对等点的传入流量以及该对等点的传出流量定向到该地址。我们使用 0.0.0.0/0 是因为我们正在路由流量并希望服务器对等方发送具有任何源 IP 的数据包。
如果您需要配置其他客户端,只需使用不同的私有 IP 地址重复相同的步骤即可。
Windows 客户端设置#
从以下位置下载并安装 Windows msi 软件包WireGuard 网站
.
安装后,打开 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
file).
端点 - Ubuntu 服务器的 IP 地址,后跟冒号和 WireGuard 端口 (51820)。
允许的IP - 0.0.0.0/0
完成后单击“保存”按钮。
将客户端对等点添加到服务器#
最后一步是将客户端公钥和 IP 地址添加到服务器:
sudo wg set wg0 peer CLIENT_PUBLIC_KEY allowed-ips 10.0.0.2
确保更改CLIENT_PUBLIC_KEY
使用您在客户端计算机上生成的公钥(sudo cat /etc/wireguard/publickey
)并调整客户端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 并将其配置为 VPN 服务器。此设置允许您通过保持流量数据的私密性来匿名上网。
如果您遇到任何问题,请随时发表评论。