剪藏#Python运维实践#剪藏

在CentOS 8上配置WireGuard VPN

2025 年 12 月 22 日1 分钟
分享Twitter / XTelegram微博
在CentOS 8上配置WireGuard VPN 封面

WireGuard 是一款采用尖端加密技术的现代化简易VPN(虚拟专用网络),与IPsec和OpenVPN等同类方案相比,它具有更快的速度、更简化的配置流程和更优越的性能。

WireGuard 具备跨平台特性,可广泛部署于Linux、Windows、Android和macOS等主流操作系统,作为点对点 VPN,它摒弃了传统的客户端-服务器架构。根据配置不同,节点既可充当传统服务器角色,也可作为客户端使用。

WireGuard 通过在每个节点设备上创建虚拟隧道接口实现通信,节点间通过交换并验证公钥完成身份认证,其模式与SSH认证类似。公钥会与允许接入隧道的IP地址列表进行映射,所有VPN数据流量均通过UDP协议进行封装。

# 官方网站(已墙):

JAVASCRIPT
https://www.wireguard.com/

# github项目镜像:

JAVASCRIPT
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存储库安装,要将存储库添加到系统,请运行以下命令:

JAVASCRIPT
sudo dnf install epel-release elrepo-release

完成后,安装WireGuard软件包:

JAVASCRIPT
sudo dnf install kmod-wireguard wireguard-tools

系统可能会提示导入软件源的GPG密钥,此时请输入y确认。

1.2配置WireGuard

wireguard-tools软件包包含wgwg-quick两款命令行工具,用于配置和管理WireGuard接口。

先手动创建配置文件目录/etc/wireguard

JAVASCRIPT
sudo mkdir /etc/wireguard

在配置目录中生成公私钥对:

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

密钥生成完毕后,接下来需配置用于路由VPN流量的隧道设备。可通过ipwg命令行工具配置,也可使用文本编辑器创建配置文件。

创建wg0.conf文件并添加以下内容:

JAVASCRIPT
sudo vim /etc/wireguard/wg0.conf
JAVASCRIPT
[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

上面配置文件接口命名可自定义,但建议使用wg0wgvpn0等标识性名称。

接口配置段参数说明:

  • 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.confprivatekey文件的访问权限:

JAVASCRIPT
sudo chmod 600 /etc/wireguard/{privatekey,wg0.conf}

完成后,使用配置文件中的参数启动wg0接口:

JAVASCRIPT
sudo wg-quick up wg0

该命令输出的内容示例如下:

JAVASCRIPT
[#] 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命令:

JAVASCRIPT
sudo wg show wg0
JAVASCRIPT
interface: wg0
  public key: My3uqg8LL9S3XZBo8alclOjiNkp+T6GfxS+Xhn5a40I=
  private key: (hidden)
  listening port: 51820

也可使用ip命令验证接口状态:

JAVASCRIPT
ip a show wg0
JAVASCRIPT
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

最后,设置开机自动启动wg0接口:

JAVASCRIPT
sudo systemctl enable wg-quick@wg0

1.3服务器网络配置

为实现NAT功能,需启用IP转发。创建/etc/sysctl.d/99-custom.conf文件并添加:

JAVASCRIPT
sudo nano /etc/sysctl.d/99-custom.conf
JAVASCRIPT
net.ipv4.ip_forward=1

保存后应用配置:

JAVASCRIPT
sudo sysctl -p /etc/sysctl.d/99-custom.conf
net.ipv4.ip_forward = 1

至此,作为服务器运行的CentOS节点已配置完成。

2.Linux客户端配置

Linux 系统可通过发行版包管理器安装,安装完成后按以下步骤配置客户端设备。

客户端配置流程与服务器配置基本一致。首先生成公私钥对:

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

创建wg0.conf文件并添加:

JAVASCRIPT
sudo nano /etc/wireguard/wg0.conf
JAVASCRIPT
[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...",如下图所示:

Notion image

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

Notion image

输入隧道名称并按以下格式编辑配置:

JAVASCRIPT
[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地址添加到服务器:

JAVASCRIPT
sudo wg set wg0 peer 客户端公钥 allowed-ips 10.0.0.2

这里"客户端公钥"替换为客户端生成的公钥(在/etc/wireguard/publickey文件中),若客户端IP不同则需相应调整。Windows用户可从WireGuard 程序中复制公钥。

完成后返回客户端设备启动隧道接口。

4.1Linux客户端

在Linux客户端执行以下命令启动接口:

JAVASCRIPT
sudo wg-quick up wg0

此时应已成功连接CentOS服务器,客户端流量将通过该服务器路由,可通过以下命令验证连接:

JAVASCRIPT
sudo wg
JAVASCRIPT
interface: 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

打开浏览器访问:

JAVASCRIPT
https://whatismyipaddress.com/

此时显示的IP地址应为CentOS服务器的公网IP。

停止隧道服务可执行下面命令关闭wg0接口:

JAVASCRIPT
sudo wg-quick down wg0

4.2Windows客户端

在WireGuard程序中点击 "Activate" 按钮。节点连接成功后,隧道状态将显示为Active。

Notion image

5.总结

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

原文地址: https://mp.weixin.qq.com/s?__biz=MzUyMTYwMDYxMA==&mid=2247505951&idx=1&sn=838b6fbc7ab997ddf3a328e0e7fded19&chksm=f8345c020838b75275dccd8556fd69d615d8c13c96df72c3b95d128641f07ab595b0351bf894&mpshare=1&scene=1&srcid=1222LMjpsyA8RroJKutZNW0J&sharer_shareinfo=2767b7fcffc309009c9a7218d4617b19&sharer_shareinfo_first=2767b7fcffc309009c9a7218d4617b19#rd

相关文章