如何在Debian 10上设置WireGuard VPN

WireGuard是利用最新加密技术的通用VPN(虚拟专用网络)。 与IPsec和OpenVPN等其他流行的VPN解决方案相比,WireGuard通常更快,更易于配置并且占用空间更小。 它是跨平台的,几乎可以在任何地方运行,包括Linux,Windows,Android和macOS。

Wireguard是对等VPN。 它不使用客户端-服务器模型。 根据配置,对等方可以充当传统服务器或客户端。 它通过在充当隧道的每个对等设备上创建网络接口来工作。 对等方通过交换和验证公共密钥来模仿彼此的身份,类似于SSH模型。 公钥与隧道中允许的IP地址列表进行映射。 VPN流量封装在UDP中。

本文介绍了如何在充当VPN服务器的Debian 10上安装和配置WireGuard。 我们还将向您展示如何在Linux,Windows和macOS上将WireGuard配置为客户端。 客户端的流量将通过Debian 10服务器进行路由。

此设置可用于防御中间人攻击,匿名浏览网络,绕过受地域限制的内容或允许在家工作的同事安全地连接到公司网络。

先决条件

要遵循本指南,您需要安装Debian 10的机器。 您还需要root或 [sudo access](https://linuxize.com/post/how-to-create-a-sudo-user-on-debian/安装软件包并更改系统。

设置WireGuard服务器#

我们将从在Debian机器上安装WireGuard软件包开始,并将其设置为充当服务器。 我们还将配置系统以通过它路由客户端的流量。

在Debian 10#上安装WireGuard

可从Debian反向端口存储库中获取WireGuard。 要将存储库添加到您的系统,请运行:

echo 'deb http://ftp.debian.org/debian buster-backports main' | sudo tee /etc/apt/sources.list.d/buster-backports.list

启用存储库后,更新apt缓存并安装WireGuard模块和工具:

sudo apt updatesudo apt install wireguard

WireGuard作为内核模块运行。

配置WireGuard#

您可以使用以下命令配置和管理WireGuard接口: wgwg-quick 命令行工具。

WireGuard VPN网络中的每个设备都需要具有私钥和公钥。 运行以下命令以生成密钥对:

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

这些文件是在 /etc/wireguard 目录。 使用 cat
或者 less
命令来查看文件的内容。 私钥绝不应与任何人共享,并且应始终保持安全。

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

下一步是配置将路由VPN流量的隧道设备。

可以使用命令行从命令行设置设备 ip
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 或者 wgvpn0

界面部分中的设置具有以下含义:

  • 地址-逗号分隔的v4或v6 IP地址列表 wg0 界面。 您可以为专用网络保留一个范围内的IP地址(10.0.0.0/8、172.16.0.0/12或192.168.0.0/16)。

  • ListenPort-侦听端口。

  • PrivateKey-由 wg genkey 命令。 (要查看文件类型的内容: sudo cat /etc/wireguard/privatekey

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

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

    确保更换 ens3-A POSTROUTING 与您的公共网络接口的名称匹配。 您可以通过以下方式轻松找到该接口:

    ip -o -4 route show to default | awk '{print $5}'
  • PostDown-在关闭接口之前执行的命令或脚本。 接口关闭后,iptables规则将被删除。

wg0.confprivatekey 普通用户不应该阅读这些文件。 使用 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

要检查接口状态和配置,请运行:

sudo wg show wg0
interface: wg0
  public key: +Vpyku+gjVJuXGR/OXXt6cmBKPdc06Qnm3hpRhMBtxs=
  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

可以使用Systemd来管理WireGuard。 要在启动时启用WireGuard接口,请运行以下命令:

sudo systemctl enable [email protected]

服务器网络和防火墙配置

必须启用IP转发才能使NAT正常工作。 打开 /etc/sysctl.conf 文件并添加或取消注释以下行:

sudo nano /etc/sysctl.conf

/etc/sysctl.conf

net.ipv4.ip_forward=1

保存文件并应用更改:

sudo sysctl -p
net.ipv4.ip_forward = 1

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

sudo ufw allow 51820/udp

而已。 已经设置了将充当服务器的Debian对等体。

Linux和macOS客户端安装程序#

有关所有受支持平台的安装说明,请访问https://wireguard.com/install/。 在Linux系统上,您可以使用分发软件包管理器来安装软件包,而在macOS上可以 brew

安装完成后,请按照以下步骤配置客户端设备。

设置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 文件)。
  • 端点-您要连接的对等方的IP或主机名,后跟冒号,然后是远程对等方侦听的端口号。
  • AllowedIPs-逗号分隔的v4或v6 IP地址列表,允许从该对等方传入的流量,并定向到该对等方的传出流量。 我们使用0.0.0.0/0是因为我们正在路由流量,并希望服务器对等方发送具有任何源IP的数据包。

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

Windows客户端安装程序#

从WireGuard网站下载并安装Windows msi软件包。

安装后,打开WireGuard应用程序,然后单击“添加隧道”->“添加空隧道…”,如下图所示:

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

WireGuard Windows隧道

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

[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-Debian服务器的公共密钥(/etc/wireguard/publickey 文件)。
  • 端点-Debian服务器的IP地址,后跟冒号和WireGuard端口(51820)。
  • 允许的IP-0.0.0.0/0

完成后,单击“保存”按钮。

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

最后一步是将客户端的公钥和IP地址添加到服务器。 为此,请在Debian服务器上运行以下命令:

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客户端#

运行以下命令以打开界面:

sudo wg-quick up wg0

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

sudo wg
interface: wg0
  public key: gFeK6A16ncnT1FG6fJhOCMPMeY4hZa97cZCNWis7cSo=
  private key: (hidden)
  listening port: 53527
  fwmark: 0xca6c

peer: r3imyh3MCYggaZACmkx+CxlD6uAmICI8pe/PGq8+qCg=
  endpoint: XXX.XXX.XXX.XXX:51820
  allowed ips: 0.0.0.0/0
  latest handshake: 53 seconds ago
  transfer: 3.23 KiB received, 3.50 KiB sent

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

要停止隧穿,请降低 wg0 界面:

sudo wg-quick down wg0

Windows客户端#

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

WireGuard Windows连接隧道

结论 #

我们已经向您展示了如何在Debian 10上安装WireGuard并将其配置为VPN服务器。 通过此设置,您可以通过保持流量数据不公开来匿名浏览Web。

如果您遇到任何问题,请随时发表评论。

VPN安全Debian

Sidebar