在CentOS 8上配置WireGuard VPN

WireGuard 是一款采用尖端加密技术的现代化简易VPN(虚拟专用网络),与IPsec和OpenVPN等同类方案相比,它具有更快的速度、更简化的配置流程和更优越的性能。
WireGuard 具备跨平台特性,可广泛部署于Linux、Windows、Android和macOS等主流操作系统,作为点对点 VPN,它摒弃了传统的客户端-服务器架构。根据配置不同,节点既可充当传统服务器角色,也可作为客户端使用。
WireGuard 通过在每个节点设备上创建虚拟隧道接口实现通信,节点间通过交换并验证公钥完成身份认证,其模式与SSH认证类似。公钥会与允许接入隧道的IP地址列表进行映射,所有VPN数据流量均通过UDP协议进行封装。
# 官方网站(已墙):
https://www.wireguard.com/# github项目镜像:
https://github.com/WireGuard下面详细介绍如何在CentOS 8设备上部署作为VPN服务器运行的WireGuard,同时演示客户端配置方法。通过将客户端流量路由至 CentOS 8服务器,此方案可有效防范中间人攻击、实现匿名网页浏览、突破地域访问限制。
1.部署 WireGuard 服务器
首先需要一台可通过root账户或具备sudo权限的账户访问的CentOS 8服务器,然后在CentOS设备上安装WireGuard并配置为服务器模式,同时设置系统实现客户端流量路由。
1.1在CentOS 8上安装WireGuard
WireGuard工具和内核模块可从Epel和Elrepo存储库安装,要将存储库添加到系统,请运行以下命令:
sudo dnf install epel-release elrepo-release完成后,安装WireGuard软件包:
sudo dnf install kmod-wireguard wireguard-tools系统可能会提示导入软件源的GPG密钥,此时请输入y确认。
1.2配置WireGuard
wireguard-tools软件包包含wg和wg-quick两款命令行工具,用于配置和管理WireGuard接口。
先手动创建配置文件目录/etc/wireguard:
sudo mkdir /etc/wireguard在配置目录中生成公私钥对:
wg genkey | sudo tee /etc/wireguard/privatekey | wg pubkey | sudo tee /etc/wireguard/publickey密钥生成完毕后,接下来需配置用于路由VPN流量的隧道设备。可通过ip与wg命令行工具配置,也可使用文本编辑器创建配置文件。
创建wg0.conf文件并添加以下内容:
sudo vim /etc/wireguard/wg0.conf[Interface]
Address = 10.0.0.1/24
SaveConfig = true
ListenPort = 51820
PrivateKey = 服务器私钥
PostUp = firewall-cmd --zone=public --add-port 51820/udp && firewall-cmd --zone=public --add-masquerade
PostDown = firewall-cmd --zone=public --remove-port 51820/udp && firewall-cmd --zone=public --remove-masquerade上面配置文件接口命名可自定义,但建议使用wg0或wgvpn0等标识性名称。
接口配置段参数说明:
-
Address:wg0接口的IPv4/IPv6地址列表(以逗号分隔),需使用私有地址段(10.0.0.0/8、172.16.0.0/12 或 192.168.0.0/16)。
-
ListenPort:WireGuard 监听接入连接的端口。
-
PrivateKey:由
wg genkey生成的私钥(查看文件内容/etc/wireguard/privatekey)。 -
SaveConfig:设为
true时,接口关闭时当前状态将保存至配置文件。 -
PostUp:接口启动前执行的命令或脚本,本例使用
firewall-cmd开启WireGuard端口并启用伪装,允许流量流出服务器,为 VPN 客户端提供互联网访问。 -
PostDown:接口关闭前执行的命令或脚本,用于清除防火墙规则
使用chmod设置wg0.conf和privatekey文件的访问权限:
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 wg0interface: wg0
public key: My3uqg8LL9S3XZBo8alclOjiNkp+T6GfxS+Xhn5a40I=
private key: (hidden)
listening port: 51820也可使用ip命令验证接口状态:
ip a show wg04: 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最后,设置开机自动启动wg0接口:
sudo systemctl enable wg-quick@wg01.3服务器网络配置
为实现NAT功能,需启用IP转发。创建/etc/sysctl.d/99-custom.conf文件并添加:
sudo nano /etc/sysctl.d/99-custom.confnet.ipv4.ip_forward=1保存后应用配置:
sudo sysctl -p /etc/sysctl.d/99-custom.conf
net.ipv4.ip_forward = 1至此,作为服务器运行的CentOS节点已配置完成。
2.Linux客户端配置
Linux 系统可通过发行版包管理器安装,安装完成后按以下步骤配置客户端设备。
客户端配置流程与服务器配置基本一致。首先生成公私钥对:
wg genkey | sudo tee /etc/wireguard/privatekey | wg pubkey | sudo tee /etc/wireguard/publickey创建wg0.conf文件并添加:
sudo nano /etc/wireguard/wg0.conf[Interface]
PrivateKey = 客户端私钥
Address = 10.0.0.2/24 [Peer]
PublicKey = 服务器公钥
Endpoint = 服务器IP地址:51820
AllowedIPs = 0.0.0.0/0接口配置段参数含义与服务器配置相同:
-
Address:
wg0接口的IPv4/IPv6地址列表 -
PrivateKey:客户端私钥,在
/etc/wireguard/privatekey文件中。
对等节点配置段包含以下字段:
-
PublicKey:目标节点的公钥(服务器
/etc/wireguard/publickey文件内容) -
Endpoint:目标节点的 IP 或主机名,后接监听端口号
-
AllowedIPs:允许该节点接收流量的源
IP范围,以及该节点发出流量的目标IP范围。使用0.0.0.0/0表示路由所有流量并通过服务器节点发送数据包
如需配置更多客户端,重复上述步骤并使用不同私有IP地址即可。
3.Windows 客户端配置
从 WireGuard 官网下载Windows版 msi 安装包并安装。
启动WireGuard程序后,点击 "Add Tunnel" -> "Add empty tunnel...",如下图所示:

公钥对会自动创建并显示在屏幕上。

输入隧道名称并按以下格式编辑配置:
[Interface]
PrivateKey = 客户端私钥
Address = 10.0.0.2/24 [Peer]
PublicKey = 服务器公钥
Endpoint = 服务器IP地址:51820
AllowedIPs = 0.0.0.0/0在接口配置段添加客户端隧道地址,在对等节点配置段添加:
-
PublicKey:CentOS服务器的公钥(/etc/wireguard/publickey 文件内容)
-
Endpoint:CentOS服务器IP地址后接WireGuard端口号(51820)
-
AllowedIPs:0.0.0.0/0
完成后点击 "Save" 保存。
4.将客户端节点添加至服务器
最后一步是将客户端公钥和IP地址添加到服务器:
sudo wg set wg0 peer 客户端公钥 allowed-ips 10.0.0.2这里"客户端公钥"替换为客户端生成的公钥(在/etc/wireguard/publickey文件中),若客户端IP不同则需相应调整。Windows用户可从WireGuard 程序中复制公钥。
完成后返回客户端设备启动隧道接口。
4.1Linux客户端
在Linux客户端执行以下命令启动接口:
sudo wg-quick up wg0此时应已成功连接CentOS服务器,客户端流量将通过该服务器路由,可通过以下命令验证连接:
sudo wginterface: wg0
public key: sZThYo/0oECwzUsIKTa6LYXLhk+Jb/nqK4kCCP2pyFg=
private key: (hidden)
listening port: 60351
fwmark: 0xca6c peer: My3uqg8LL9S3XZBo8alclOjiNkp+T6GfxS+Xhn5a40I=
endpoint: XXX.XXX.XXX.XXX:51820
allowed ips: 0.0.0.0/0
latest handshake: 41 seconds ago
transfer: 213.25 KiB received, 106.68 KiB sent打开浏览器访问:
https://whatismyipaddress.com/此时显示的IP地址应为CentOS服务器的公网IP。
停止隧道服务可执行下面命令关闭wg0接口:
sudo wg-quick down wg04.2Windows客户端
在WireGuard程序中点击 "Activate" 按钮。节点连接成功后,隧道状态将显示为Active。

5.总结
本文完整演示了在CentOS 8系统上部署WireGuard VPN服务器的全流程,涵盖从环境准备、软件安装、密钥生成、服务端配置到各平台客户端的对接配置。通过此方案建立的安全隧道,能够将所有网络流量进行端到端加密传输,有效保障数据传输的隐私性与完整性,实现匿名网页浏览,同时为远程访问企业内网资源提供了可靠的安全通道。