WireGuard是一个开源的VPN协议,是IPSec、IKEv2和OpenVPN的替代方案。WireGuard专为Linux和Unix操作系统设计,运行在Linux内核空间中,这使得WireGuard更加快速和可靠。WireGuard用于在两台或多台计算机之间创建安全的隧道连接。
WireGuard的目标是取代IPSec、IKEv2和OpenVPN等VPN协议。WireGuard更轻量、更快速、更易于配置,同时效率更高。与此同时,WireGuard并没有在VPN协议的安全性方面做出妥协。WireGuard支持现代加密技术,如Noise协议框架、Curve25519、ChaCha20、Poly1305、BLAKE2、SipHash24、HKDF和安全可信构造。
本教程将向您展示如何在Debian 12服务器上安装WireGuard VPN,以及如何在Linux机器上配置WireGuard客户端。
前提条件
在开始之前,请确保您具备以下条件:
- 运行Debian 12的Linux服务器
- 具有sudo权限的非root用户
- 一台客户端机器 - 本教程使用基于Debian的发行版
准备系统
在安装WireGuard之前,您需要通过以下更改来准备Debian服务器:
- 通过/etc/sysctl.conf启用端口转发
- 安装并配置UFW
启用端口转发
要启用端口转发,您必须启用内核模块net.ipv4.ip_forward(用于IPv4)或net.ipv6.conf.all.forwarding(用于IPv6)。这些内核模块可以通过/etc/sysctl.conf文件来启用。
使用以下nano编辑器命令打开/etc/sysctl.conf文件。
sudo nano /etc/sysctl.conf
插入以下配置以启用IPv4和IPv6的端口转发(如需要)。
# Port Forwarding for IPv4 net.ipv4.ip_forward=1 # Port forwarding for IPv6 net.ipv6.conf.all.forwarding=1
完成后保存文件并退出编辑器。
现在通过以下sysctl命令应用更改。
sudo sysctl -p

安装UFW
Debian上的默认防火墙是iptables,现在您将安装UFW。您将同时使用UFW和iptables来管理WireGuard服务器。
执行以下apt命令来更新软件源并在Debian系统上安装UFW。
sudo apt update && sudo apt install ufw -y

接下来,运行以下ufw命令来添加OpenSSH应用配置并启用UFW。输入y并按ENTER确认,您应该会看到消息"Firewall is active and enabled on system startup"。
sudo ufw allow OpenSSH
sudo ufw enable

最后,使用以下命令验证UFW状态。
sudo ufw status
如果正在运行,您应该看到输出"Status: active"。您还会看到OpenSSH应用配置已添加到UFW中。

安装WireGuard服务器
配置好Debian服务器后,您就可以在Debian机器上创建WireGuard VPN服务器了。完成以下任务来实现:
- 安装WireGuard
- 生成WireGuard服务器密钥
- 生成WireGuard客户端密钥
- 配置WireGuard接口
- 为WireGuard接口设置NAT
安装WireGuard
首先,通过执行以下命令在Debian服务器上安装wireguard软件包。
sudo apt install wireguard
输入y以继续安装。

生成WireGuard服务器密钥
安装wireguard软件包后,接下来的任务是生成服务器证书,这可以使用wg命令行工具来完成。
执行以下命令将wireguard服务器私钥生成到/etc/wireguard/server.key。然后,将服务器私钥的权限更改为0400,这意味着您将禁用对该文件的写访问权限。
wg genkey | sudo tee /etc/wireguard/server.key
sudo chmod 0400 /etc/wireguard/server.key
接下来,运行以下命令将wireguard服务器公钥生成到/etc/wireguard/server.pub。
sudo cat /etc/wireguard/server.key | wg pubkey | sudo tee /etc/wireguard/server.pub

现在您已经将私钥生成到/etc/wireguard/server.key,将公钥生成到/etc/wireguard/server.pub。您可以执行以下cat命令来显示私钥和公钥的内容。
cat /etc/wireguard/server.key
cat /etc/wireguard/server.pub
您的输出可能不同,但生成的密钥类似于以下内容:

生成WireGuard客户端密钥
WireGuard服务器密钥生成完成后,接下来的任务是为客户端生成密钥。您可以为每个用户生成客户端密钥,也可以多个用户共用一个密钥。
在本示例中,您将为特定用户alice生成客户端密钥。
首先,执行以下命令创建一个新目录来存储客户端密钥。在本例中,用户alice的公钥和私钥将生成到/etc/wireguard/clients/alice目录。
mkdir -p /etc/wireguard/clients/alice
现在,运行以下命令为用户alice生成私钥/etc/wireguard/clients/alice/alice.key和公钥/etc/wireguard/clients/alice/alice.pub。
wg genkey | tee /etc/wireguard/clients/alice/alice.key
cat /etc/wireguard/clients/alice/alice.key | wg pubkey | tee /etc/wireguard/clients/alice/alice.pub

最后,运行以下命令显示用户alice的私钥和公钥内容。
cat /etc/wireguard/clients/alice/alice.key
cat /etc/wireguard/clients/alice/alice.pub
将显示类似以下的输出:

配置WireGuard接口
现在您已经为服务器和客户端生成了私钥和公钥,接下来的任务是配置WireGuard接口和对等节点。您将为WireGuard网络VPN配置接口,以及在客户端和服务器之间建立的对等连接。
使用以下nano编辑器命令创建新的WireGuard配置/etc/wireguard/wg0.conf。
sudo nano /etc/wireguard/wg0.conf
将以下配置插入到文件中。
[Interface] # Wireguard Server private key - server.key PrivateKey = cNBb6MGaKhmgllFxSq/h9BdYfZOdyKvo8mjzb2STbW8= # Wireguard interface will be run at 10.10.0.1 Address = 10.10.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
以下是[Interface]部分中使用参数的详细说明:
- PrivateKey:输入wireguard服务器私钥server.key的内容
- Address:将分配给WireGuard接口的IP地址。在本例中,wireguard接口将使用IP地址10.10.0.1
- ListenPort:客户端连接到wireguard服务器时使用的端口。在本例中,将使用端口51820
- SaveConfig:值为true意味着任何更改都将从接口的当前状态保存到关闭时
现在为wireguard客户端添加以下[Peer]部分。
[Peer] # Wireguard client public key - alice.pub PublicKey = 3ZoaoVgHOioZnKzCrF/XALAv70V4vyJXpl/UO7AKYzA= # clients' VPN IP addresses you allow to connect # possible to specify subnet => [10.10.0.0/24] AllowedIPs = 10.10.0.2/24
以下是[Peer]部分中使用参数的说明:
- PublicKey:将wireguard客户端公钥输入到此参数中。在本例中,输入公钥alice.pub的内容
- AllowedIPs:定义客户端的IP地址并将流量路由到wireguard接口
完成后保存并关闭文件。
最后,运行以下命令开放端口51820/udp以供客户端连接。
sudo ufw allow 51820/udp
为WireGuard接口设置NAT
首先,运行以下命令显示用于连接互联网的默认网关接口。
sudo ip route list default
在本例中,默认网络互联网网关接口是eth0。

现在使用以下nano编辑器命令打开wireguard配置/etc/wireguard/wg0.conf。
sudo nano /etc/wireguard/wg0.conf
在[Interface]部分下添加以下配置,并确保将接口eth0更改为您的默认互联网网关接口。
[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
完成后保存并关闭文件。
至此,您已经配置好了WireGuard服务器。
管理WireGuard服务
WireGuard服务器安装和配置完成后,您就可以在Debian系统上启动WireGuard服务了。这可以通过systemctl命令或使用wg-quick工具来完成。
要启动并启用wireguard服务器,运行以下systemctl命令。使用服务名称wg-quick@wg0,您将在wg0接口上启动WireGuard,该接口基于配置文件/etc/wireguard/wg0.conf。
sudo systemctl start wg-quick@wg0
sudo systemctl enable wg-quick@wg0
现在使用以下命令验证wireguard@wg0服务。
sudo systemctl status wg-quick@wg0
如果服务正在运行,将显示以下输出。

接下来,运行以下ip命令显示wireguard接口wg0的详细信息。您应该看到wireguard接口wg0的IP地址为10.10.0.1。
sudo ip a show wg0

您还可以通过以下wg-quick命令手动启动或停止wireguard。
sudo wg-quick up /etc/wireguard/wg0.conf
sudo wg-quick down /etc/wireguard/wg0.conf
至此,您已经配置了wireguard服务器并通过systemctl命令在后台启动了它。您的客户端现在可以连接到wireguard服务器了。
在基于Debian的发行版上配置WireGuard客户端
在以下部分中,您将为基于Debian的发行版配置wireguard客户端。您将安装wireguard工具、创建wireguard客户端配置、连接到wireguard服务器、通过wg工具验证连接,并访问互联网。
通过APT在客户端机器上安装wireguard-tools软件包。客户端机器是基于Debian的发行版,因此将使用APT包管理器。
sudo apt install wireguard-tools resolvconf

安装wireguard-tools后,使用以下nano编辑器创建新的wireguard客户端配置/etc/wireguard/wg-alice.conf。
sudo nano /etc/wireguard/wg-alice.conf
将以下配置插入到文件中。
[Interface] # Define the IP address for the client - must be matched with wg0 on the Wireguard Server Address = 10.10.0.2/24 # specific DNS Server DNS = 1.1.1.1 # Private key for the client - alice.key PrivateKey = cPDg6SQHz/3l2R83lMWPzmR6/mMKnKp9PNImbtB6nGI= [Peer] # Public key of the Wireguard server - server.pub PublicKey = APyBQvTkYVm0oakzcQUQViarwx1aIYz5wb/g2v2xdUE= # Allow all traffic to be routed via Wireguard VPN AllowedIPs = 0.0.0.0/0 # Public IP address of the Wireguard Server Endpoint = 192.168.128.15:51820 # Sending Keepalive every 25 sec PersistentKeepalive = 25
完成后保存并关闭文件。
以下是wireguard客户端[Interface]部分中一些参数的说明:
- Address:指定客户端机器上wireguard接口的内部IP地址
- DNS:为客户端设置默认DNS服务器
- PrivateKey:wireguard客户端私钥,在本例中为alice.key
在wireguard客户端配置的[Peer]部分中:
- PublicKey:这是wireguard服务器的公钥,即server.pub
- AllowedIPs:允许所有访问通过wireguard接口路由
- Endpoint:wireguard服务器的IP地址和端口
- PersistentKeepalive:每隔x秒发送保活数据包以保持连接
接下来,运行以下wg-quick命令在接口wg-alice上启动wireguard。
sudo wg-quick up wg-alice
如果一切正常,将显示类似以下的输出。

之后,运行以下ip命令检查接口wg-alice的详细信息。您应该看到wg-alice接口的本地IP地址为10.10.0.2。
sudo ip a show wg-alice

接下来,通过执行以下命令验证客户端机器的互联网连接。
ping -c3 10.10.0.1
ping -c3 1.1.1.1
ping -c3 duckduckgo.com
如果您的wireguard服务器安装成功,您将从每个目标服务器收到响应,如下所示:

此外,您还可以通过在wireguard服务器或客户端机器上执行以下命令来查看wireguard服务器和客户端之间的详细连接信息。
wg show
将显示类似以下的输出。

最后,要停止客户端机器上的wireguard连接,运行以下wg-quick命令。
sudo wg-quick down wg-alice

总结
综上所述,您现在已经一步步完成了在Debian 12服务器上安装WireGuard VPN。您还配置了基于Debian的客户端机器使用WireGuard并连接到了WireGuard服务器。有了这些基础,您现在可以通过添加更多WireGuard密钥和Peer配置来添加更多客户端。