如何在 Debian 11 上安装 Wireguard VPN
在此页
- 先决条件
- 安装 Wireguard
- 生成公钥/私钥对
- 为 Wireguard 服务器生成密钥对
- 为客户端生成密钥对
Wireguard 是一种免费的开源 VPN 协议,可替代 IPSec、IKEv2 和 OpenVPN。 Wiruguard 专为 Linux 和 Unix 操作系统设计。它运行在 Linux 内核空间上,这使得 Wireguard 更快、更可靠。 Wireguard 用于在两台或多台计算机之间创建安全隧道连接。
Wireguard 旨在取代 VPN 协议,例如 IPSec、IKEv2 和 OpenVPN。 Wireguard 更轻、更快、易于设置且更高效。同时,Wiregurad 并没有牺牲 VPN 协议的安全性。 Wireguard 支持现代最先进的密码学,如 Noise 协议框架、Curve25519、ChaCha20、Poly1305、BLAKE2、SipHash24、HKDF 和安全、可信的结构。
与OpenVPN、IPSec、IKEv2等其他VPN协议相比,wireguard是一种新的VPN协议。 Wireguard 于 2015 年由 Jason A. Donenfeld 发布,作为替代 VPN 协议,它于 2020 年被 Linus Torvalds 合并到 Linux kernel v5.6,并于同年移植到 FreeBSD 13。
在本教程中,您将通过 Wireguard 在 Debian 11 服务器上安装和设置 VPN 服务器。您将使用 Debian 11 服务器设置 Wireguard VPN 服务器,然后设置客户端计算机以连接到 Wireguard VPN 服务器。
至于客户端机器,您可以使用任何 Linux 发行版,但本示例使用 Debian 机器。
先决条件
要开始学习本教程,您必须满足以下要求:
- Debian 11 服务器 - 此示例使用主机名 wireguard-server 和外部静态 IP 地址 SERVER-IP 的 Debian 服务器。
- 将用作客户端的 Linux 机器 - 您可以使用任何 Linux 发行版,但此示例使用主机名为 client1 的 Debian 机器。
- 具有 sudo/root 管理员权限的非 root 用户。
如果所有这些要求都准备好了,让我们开始吧。
安装 Wireguard
在安装 Wireguard 之前,请运行以下 apt 命令来更新和刷新您的 Debian 软件包索引。
sudo apt update
Debian 存储库更新后,运行以下 apt 命令在您的 Debian 服务器上安装 Wireguard 包。这还将安装用于管理 Wireguard 服务器安装的 wireguard-tools 包。
sudo apt install wireguard
当提示确认时,输入 y 确认并按 ENTER 继续。现在应该开始安装了。
在您的服务器上安装 Wireguard 后,您就可以为 Wireguard 服务器和客户端生成公钥和私钥对了。
生成公钥/私钥对
在此步骤中,您将为 Wireguard 服务器和客户端计算机生成公钥和私钥对。这可以通过 wireguard-tools 包提供的 wg 命令行来完成。
服务器的密钥对将由 Wireguard 服务器使用,客户端计算机将使用客户端的密钥对。如果您有多台客户端计算机,则需要为您的客户端生成多个密钥对。
为 Wireguard 服务器生成密钥对
运行以下 wg genkey 命令为 Wireguard 服务器生成私钥。然后,将私钥的权限修改为0400,这将禁用该组和其他人的读写权限。
在此示例中,您将生成私钥 /etc/wireguard/server.key。
wg genkey | sudo tee /etc/wireguard/server.key
sudo chmod 0400 /etc/wireguard/server.key然后,您将在终端屏幕上收到一个输出的随机 base64 密钥。
接下来,运行以下命令 wg pubkey 生成新的服务器公钥到 /etc/wireguard/server.pub。服务器公钥派生自服务器私钥/etc/wireguard/server.key。
sudo cat /etc/wireguard/server.key | wg pubkey | sudo tee /etc/wireguard/server.pub
然后,您将在终端上收到随机 base64 公钥的输出。
现在您已经为 Wireguard 服务器生成了公钥和私钥对。 私钥位于 /etc/wireguard/server.key,公钥位于/etc/wireguard/server.pub 。
运行以下 cat 命令以显示并验证为 Wireguard 服务器生成的密钥对。
cat /etc/wireguard/server.key
cat /etc/wireguard/server.pub为客户端生成密钥对
对于客户端密钥对,您可以在安装了 wireguard-tools 的任何机器(Wireguard 服务器或客户端)上生成它。在此步骤中,您将从 Wireguard 服务器生成一个客户端密钥对。
服务器端和客户端生成密钥对的过程是一样的,使用wg genkey命令生成私钥,使用wg pubkey生成公钥,这是从私钥派生的。
现在运行以下命令创建一个新目录 /etc/wireguard/clients。该目录将用于存储客户端密钥对。
mkdir -p /etc/wireguard/clients
运行以下 wg genkey 命令生成客户端私钥到 /etc/wireguard/clients/client1.key。然后,通过 wg pubkey 命令生成客户端公钥到 /etc/wireguard/clients/client1.pub。
wg genkey | tee /etc/wireguard/clients/client1.key
cat /etc/wireguard/clients/client1.key | wg pubkey | tee /etc/wireguard/clients/client1.pub现在客户端密钥对已生成,公钥位于/etc/wireguard/clients/client1.pub,私钥为/etc/wireguard/clients/client1.key。运行以下命令以显示并验证生成的密钥对。
cat /etc/wireguard/clients/client1.key
cat /etc/wireguard/clients/client1.pub配置 Wireguard 服务器
在此步骤中,您将为 Wireguard 服务器创建一个新的配置文件。但在此之前,您必须决定要将哪些子网用于 Wireguard VPN 服务器。您还可以决定是否为您的 Wireguard VPN 服务器启用或禁用 IPv6。
在此示例中,Wireguard VPN 服务器的 IP 地址的子网为 10.8.0.2/24,并为 Wireguard VPN 禁用 IPv6。
使用以下 nano 编辑器命令创建一个新的 Wireguard 配置文件 /etc/wireguard/wg0.conf。
sudo nano /etc/wireguard/wg0.conf
首先,将以下行添加到文件中以定义 Wirguard 服务器详细信息。并确保将 PrivateKey 更改为 Wirguard 服务器私钥 server.key。这样,Wireguard 服务器接口将在 IP 地址 10.8.0.1 上运行,打开可供客户端连接的 UDP 端口 51820,并且 SaveConfig 参数将确保任何更改都将保存到配置文件中,即使 Wireguard 接口已关闭。
[Interface]
# Wireguard Server private key - server.key
PrivateKey = SIybp8GHtKIPtHPBOQFP1kbQg4UCLCMyNIfCLBQR2EA=
# Wireguard interface will be run at 10.8.0.1
Address = 10.8.0.1/24
# Clients will connect to UDP port 51820
ListenPort = 51820
# Ensure any changes will be saved to the Wireguard config file
SaveConfig = true接下来,添加以下行来定义客户端对等连接。使用客户端公钥 client1.pub 更改 PublicKey 参数。 AllowedIPs 参数将指定哪个 Wireguard 客户端允许访问此对等方。在此示例中,仅允许 IP 为 10.8.0.2 的客户端访问此对等连接。但是,您也可以允许子网范围,例如 10.8.0.0/24。
[Peer]
# Wireguard client public key - client1.pub
PublicKey = ENokvIsS2euXrmM4OVFHPmTdCZ4wfEIR/UHuGCW64lw=
# clients' VPN IP addresses you allow to connect
# possible to specify subnet ⇒ [10.8.0.0/24]
AllowedIPs = 10.8.0.2/24完成后保存文件并退出编辑器。
创建 Wireguard 服务器配置文件并添加客户端对等连接后,接下来您将在 Weireguard 服务器上设置端口转发并设置防火墙以设置流量路由。
通过 /etc/sysctl.conf 启用端口转发
在此步骤中,您将通过文件 /etc/sysctl.conf 在 Wireguard 服务器上启用端口转发。您可以在 Wireguard 守卫服务器上为 IPv4 和 IPv6 启用端口转发。
首先,使用以下 nano 编辑器命令打开配置文件 /etc/sysctl.conf。
sudo nano /etc/sysctl.conf
将以下行添加到文件中。这将在您的 Wireguard 服务器上启用端口转发。您可以同时使用 IPv4 和 IPv6,或者如果您在 Wireguard 服务器上禁用了 IPv6,则可以使用 IPv4。
# Port Forwarding for IPv4
net.ipv4.ip_forward=1
# Port forwarding for IPv6
net.ipv6.conf.all.forwarding=1完成后保存文件并退出编辑器。
接下来,运行以下 sysctl 命令实用程序以应用更改。
sudo sysctl -p
您将收到这样的输出 - 应立即启用端口转发。
在 Wireguard 服务器上启用端口转发后,您接下来将设置防火墙,将 Wireguard 客户端的流量路由到特定的网络接口。
为 Wireguard 服务器配置防火墙
在此步骤中,您将设置将用于 Wireguard 服务器的防火墙,以将客户端连接路由到将用于访问 Internet 的适当网络接口。这也将允许 Wireguard 客户端通过 Wireguard 服务器上的特定接口访问互联网。
首先,运行以下 apt 命令在您的 Debian 服务器上安装 ufw 防火墙包。
sudo apt install ufw
出现提示时输入 y,然后按 ENTER 继续。
ufw安装完成后,运行以下命令开启SSH服务并启用ufw防火墙。
sudo ufw allow OpenSSH
sudo ufw enable当提示确认启用 ufw 防火墙时,输入 y 并按 ENTER。 ufw 防火墙现在应该在您的系统上运行并且它也已启用。
现在通过以下命令验证 ufw 防火墙状态。您应该收到诸如 Status: active 之类的输出,这意味着 ufw 防火墙状态正在运行。
sudo ufw status
随着 ufw 防火墙的运行,您接下来将配置它以将 Wireguard 客户端连接路由到特定的网络接口。
现在运行以下命令来检查 Wireguard 服务器上的默认路由表接口。大多数情况下,这将检测用于访问互联网的接口或在其上提供公共 IP 地址的接口。
ip route list default
你会收到这样的输出——这个例子是接口 eth0 是 Wireguard 服务器的默认路由表。这是用于访问互联网的接口。您可能有不同的接口名称。
接下来,使用以下 nano 编辑器命令打开 Wireguard 服务器配置文件 /etc/wireguard/wg0.conf。
sudo nano /etc/wireguard/wg0.conf
将以下行添加到 [Interface] 部分。
[Interface]
...
....
PostUp = ufw route allow in on wg0 out on eth0
PostUp = iptables -t nat -I POSTROUTING -o eth0 -j MASQUERADE
PostUp = ip6tables -t nat -I POSTROUTING -o eth0 -j MASQUERADE
PreDown = ufw route delete allow in on wg0 out on eth0
PreDown = iptables -t nat -D POSTROUTING -o eth0 -j MASQUERADE
PreDown = ip6tables -t nat -D POSTROUTING -o eth0 -j MASQUERADE完成后保存文件并退出编辑器。
- 只要 Wirguard 服务器启动 VPN 隧道,就会执行 PostUp 参数。
- 只要 Wireguard 服务器停止 VPN 隧道,就会执行 PreDown 参数。
- 命令 ufw route allow in on wg0 out on eth0 允许将来自 wg0 接口的流量转发到互联网接口 eth0。
- 命令 iptables -t nat -I POSTROUTING -o eth0 -j MASQUERADE 将启用伪装并重写来自 wg0 接口的 IPv4 流量,使其看起来像是来自 Wireguard 服务器的直接连接。
- 命令 ip6tables -t nat -I POSTROUTING -o eth0 -j MASQUERADE 将启用伪装并重写来自 wg0 接口的 IPv46 流量,使其看起来像是来自 Wireguard 服务器的直接连接。
现在运行下面的 ufw 命令打开客户端将连接到的 UDP 端口 51820。
sudo ufw allow 51820/udp
最后,运行以下命令重新加载 ufw 防火墙并应用更改。然后,通过以下命令验证 ufw 规则列表。
sudo ufw reload
sudo ufw status您将收到类似此屏幕截图的输出 - Wireguard 服务器将用于添加到 ufw 防火墙的客户端连接的 UDP 端口 51820。
现在,您已经启用了端口转发并在 Wireguard 服务器上配置了防火墙。您现在已准备好启动 Wireguard 服务器。
启动 Wireguard 服务器
在此步骤中,您将启动并启用 Wireguard 服务器。您还将验证 Wireguard 服务器并验证将由 Wireguard 服务创建的 wg0 接口。
运行以下 systemctl 命令实用程序以启动和启用 Wireguard 服务。 [email 服务将在您的 Wireguard 服务器上创建并启用 Wireguard 接口 wg0。
sudo systemctl start
现在通过以下命令验证 Wireguard 服务。
sudo systemctl status
您将收到类似于以下屏幕截图的输出 - Wireguard 服务[email 正在运行并已启用。这也意味着 wg0 接口已创建并正在运行。
运行以下命令以验证 Wireguard 服务器上的 wg0 接口。
ip a show wg0
您应该会收到如下输出 - Wireguard 接口 wg0 获得 IP 地址 10.8.0.1,如 Wireguard 配置文件 /etc/wireguard/wg0.conf 中所述。
此外,您还可以通过 wg-quick 命令启动和停止 Wireguard,如下所示。 wg-quick up 命令将启动 Wireguard 服务器,wg-quick down 命令将停止 Wireguard 服务器。
sudo wg-quick up /etc/wireguard/wg0.conf
sudo wg-quick down /etc/wireguard/wg0.conf随着 Wireguard 服务器的运行,您接下来将设置客户端计算机并将其连接到 Wireguard 服务器。
设置客户端机器并连接到 Wireguard 服务器
在此步骤中,您将通过安装 worguard-tools 来设置客户端计算机,为客户端创建新的 Wireguard 配置,连接到 Wireguard VPN 服务器,最后验证连接并确保客户端计算机可以访问互联网和本地 VPN 网络.
在客户端机器上安装 wireguard-tools 包。这使用 Debian 作为客户端,因此将使用 APT 命令。
sudo apt install wireguard-tools
安装应该会自动开始。
安装 wireguard-tools 后,使用以下 nano 编辑器命令创建一个新的配置文件 /etc/wireguard/wg-client1.conf。
sudo nano /etc/wireguard/wg-client1.conf
将以下行添加到文件中。
[Interface]
# Define the IP address for the client - must be matched with wg0 on Wireguard Server
Address = 10.8.0.2/24
# specific DNS Server
DNS = 1.1.1.1
# Private key for the client - client1.key
PrivateKey = KPI59QH0jwc9wkUsW5Byci9ojXhz1322QXK52fQCE3E=
[Peer]
# Public key of the Wireguard server - server.pub
PublicKey = Qt6oRLtlfAR490lTNb2K8TlbpwADV1j8NX7D5HY38EM=
# Allow all traffic to be routed via Wireguard VPN
AllowedIPs = 0.0.0.0/0
# Public IP address of the Wireguard Server
Endpoint = SERVER-IP:51820
# Sending Keepalive every 25 sec
PersistentKeepalive = 25完成后保存并关闭文件。
在 [Interface] 部分,您必须定义以下内容:
- 客户端的 IP 地址必须与 Wireguard 服务器的子网相匹配。在此示例中,Wireguard 客户端将获得 IP 地址 10.8.0.2。
- 为客户端指定 DNS 服务器。
- 使用您生成的客户端私钥 client1.key 更改 PrivateKey 参数。
在 [Peer] 部分,您必须添加以下内容: - Wireguard 服务器公钥 server.pub 到 PublicKey 参数。
- 指定 AllowedIPs 以限制对 VPN 对等方的访问,您可以指定网络子网或仅放置 0.0.0.0/0 以通过 VPN 隧道传输所有流量。
- 使用 Wireguard 服务器的公共 IP 地址或使用域名指定 Endpoint 参数。
创建客户端配置后,运行以下命令在客户端计算机上启动 Wireguard。
wg-quick up wg-client1
您应该会收到类似于此屏幕截图的输出 - 将创建新的 Wireguard 接口 wg-client1,并且客户端计算机应连接到在 SERVER-IP:51820 上运行的 Wireguard 服务器。
运行以下命令来验证 Wireguard 接口 wg-client1。
ip a show wg-client1
您应该会收到如下输出 - wg-client1 接口的 IP 地址为 10.8.0.2,它是 Wireguard 服务器 10.8.0.0/24 子网的一部分。
您还可以通过 wg show 命令验证 Wireguard 连接。
在客户端机器上运行下面的 wg show 命令,您应该会收到这样的输出。
wg show
如果您连接到正确的 Wireguard 服务器,您应该在端点部分看到 Wirguard 服务器 IP 地址,并看到 Wirguard 服务器公钥 server.pub。
现在转到 Wireguard 服务器并运行 wg show 命令。
wg show
您应该会收到类似于此的输出 - 在端点部分,您会看到客户端公共 IP 地址,在对等部分,您会看到客户端公钥 client1.pub。
最后,运行以下命令以确保客户端计算机可以访问互联网或访问 Wireguard VPN 的内部网络子网。
ping -c5 10.8.0.1
ping -c5 1.1.1.1
ping -c5 duckduckgo.com以下是您应该收到的输出:
客户端机器可以连接到 IP 地址为 10.8.0.1 的 Wireguard 服务器。
客户端机器可以访问互联网。所有流量都通过 Wireguard 服务器公共 IP 地址路由。
现在如果你想停止客户端机器上的 Wrieguard,你可以运行下面的 wg-quick down 命令
wg-quick down wg-client1
你会收到这样的输出。此外,接口 wg-client1 将从客户端机器上消失。
现在您已经在客户端计算机上配置了 Wirguard VPN。您还验证了客户端计算机与 Wireguard 服务器之间的连接。
结论
在本教程中,您已经在 Debian 11 服务器上安装并配置了 Wireguard VPN。您还配置了一台 Debian 机器并成功连接到 Wireguard VPN 服务器。
详细地说,您已经安装了 Wireguard VPN 包,为服务器和客户端生成密钥对公钥和私钥,配置 UFW 防火墙以将 VPN 流量路由到特定的网络接口,并通过 /etc/sysctl.conf 启用端口转发文件。
考虑到这一点,您现在可以通过为客户端生成另一个密钥对,在 Wireguard 服务器上定义对等连接,然后创建客户端计算机将使用的新 Wireguard 配置文件,将更多客户端添加到您的 Wireguard VPN 服务器。要了解有关 Wireguard 的更多信息,请访问 Wireguard 官方文档。