Featured image of post Centos 7 搭建 WireGuard 服务器

Centos 7 搭建 WireGuard 服务器

WireGuard 是一个在 Linux 内核中运行的高性能 VPN 协议, 与 OpenVPN 相比, 它的配置更加简洁、运行速度更快, 并且安全性设计更为现代。

自 Linux 内核 5.6 起, WireGuard 已被直接合并进内核, 这意味着系统可原生支持 WireGuard, 无需额外安装内核模块。

更新内核

CentOS 7 默认内核版本为 3.10.0, 版本过低无法直接使用 WireGuard。这里提供一个简单的更新内核示例, 更新完需重启系统。

rpm -ivh kernel-ml-6.9.7-1.el7.elrepo.x86_64.rpm
rpm -ivh kernel-ml-devel-6.9.7-1.el7.elrepo.x86_64.rpm
rpm -ivh kernel-ml-headers-6.9.7-1.el7.elrepo.x86_64.rpm

reboot

# 验证更新是否成功
uname -r

NAT 转发规则

如果仅需通过 WireGuard 建立内网隧道, 可以跳过本节。
若需要让客户端通过 VPN 访问外网, 则必须配置 NAT 转发, 否则会出现 “VPN 已连接但无法上网” 的问题。

首先, 启用 Linux 的 IPv4 转发功能

echo "net.ipv4.ip_forward = 1" >> /etc/sysctl.conf
echo "net.ipv4.conf.all.proxy_arp = 1" >> /etc/sysctl.conf
echo "net.ipv6.conf.all.forwarding = 1" >> /etc/sysctl.conf
sysctl -p

执行以上命令后, 系统会允许数据包在不同网卡之间转发, 从而实现 VPN 客户端访问外网。

安装 WireGuard

安装方式有多种, 由于我们已更新到支持 WireGuard 的内核版本, 因此直接安装内核模块与工具

yum install epel-release elrepo-release -y
yum install yum-plugin-elrepo -y
yum install kmod-wireguard wireguard-tools -y

检查内核模块

# 加载内核模块
modprobe wireguard

# 检查 WireGuard 模块是否加载成功
lsmod | grep wireguard

生成密钥

创建配置文件目录

mkdir -p /etc/wireguard/
cd /etc/wireguard

生成服务端和客户端的公私钥

# 服务端密钥
wg genkey | tee server_private.key | wg pubkey | tee server_public.key

# 客户端密钥
wg genkey | tee client_private.key | wg pubkey | tee client_public.key

创建配置文件

编辑服务端配置文件 (示例文件名: wg-ibgp-home.conf)

vim /etc/wireguard/wg-ibgp-home.conf

示例配置

[Interface]
Address = 172.16.0.1/24
# SaveConfig = true
ListenPort = 52346
PrivateKey = EP3ZQgmMTsKpxQufh7bwDFPtdD6cyXMCiyhr/VXVulI=

[Peer]
PublicKey = d0F1bEFFSgkapZtXu6UlZ0zQNroLtaq51qASL3mKwBY=
AllowedIPs = 172.16.0.2/32

[Peer]
PublicKey = d0F1bEFFSgkapZtXu6UlZ0zQNroLtaq51qASL3mKwBY=
AllowedIPs = 172.16.0.3/32

配置说明

# 服务端配置块
[Interface]
Address      # 服务端内网地址 (需与现有网络不冲突)
             # 可选范围:
             #   10.0.0.0    - 10.255.255.255  (10/8 prefix)
             #   172.16.0.0  - 172.31.255.255  (172.16/12 prefix)
             #   192.168.0.0 - 192.168.255.255 (192.168/16 prefix)
             # 格式示例: 172.16.0.1/24 表示内网地址及子网掩码

SaveConfig   # 是否在服务停止时自动保存当前运行时配置到文件 (true/false)
             # 建议调试阶段设为 false, 避免修改原始配置文件

ListenPort   # WireGuard 监听端口 (UDP), 需在防火墙或路由器中开放
             # 默认端口 51820, 可自定义, 例如 52346

PrivateKey   # 服务端私钥 (通过 wg genkey 生成), 必须与公钥配对

DNS          # 分配给客户端的 DNS 服务器地址, 可填写多个 (用逗号分隔)
             # 示例: 8.8.8.8, 1.1.1.1

PostUp       # 启动 VPN 时执行的命令, 如配置 NAT 转发、iptables 规则等
PostDown     # 关闭 VPN 时执行的命令, 用于清理 PostUp 添加的规则



# 客户端配置块 (可添加多个客户端)
[Peer]
PublicKey    # 客户端的公钥 (通过 wg pubkey 生成)
AllowedIPs   # 客户端允许访问的 IP 地址范围, 通常填写客户端分配的内网 IP
             # 示例: 172.16.0.2/32 表示分配单个固定 IP

设置权限

chmod -R 600 /etc/wireguard/

配置防火墙

方法一

firewall-cmd --permanent --add-port=52346/udp
firewall-cmd --reload
firewall-cmd --list-all
netstat -nlptu

方法二

编辑配置文件

vim /etc/firewalld/services/wireguard.xml

填写以下内容

<?xml version="1.0" encoding="utf-8"?>
<service>
  <short>wireguard</short>
  <description>WireGuard (wg) custom installation</description>
  <port protocol="udp" port="51820"/>
</service>

执行命令

firewall-cmd --add-service=wireguard --permanent
firewall-cmd --add-masquerade --permanent   # 需要 NAT 转发时才需要执行这个
firewall-cmd --reload
firewall-cmd --list-all

启动与管理 WireGuard

启动 VPN

wg-quick up /etc/wireguard/wg-ibgp-home.conf

停止 VPN

wg-quick down /etc/wireguard/wg-ibgp-home.conf

设置开机启动

systemctl enable wg-quick@wg-ibgp-home

不中断连接的情况下重新加载配置

这里的 wg-ibgp-home 是接口名, 来自配置文件名 wg-ibgp-home.conf (去掉路径和 .conf 后的部分)

wg syncconf wg-ibgp-home <(wg-quick strip /etc/wireguard/wg-ibgp-home.conf)

查看当前状态

[root@BGP-US-LV ~]# wg
interface: wg0
  public key: sIPp+stGXBz
  private key: (hidden)
  listening port: 51820

peer: zy3IkHgq6Sd
  allowed ips: 10.10.0.2/32

peer: t6ab6f6j2Rw
  allowed ips: 10.10.0.3/32

原文

WireGuard - Installation
CentOS 7 Wireguard 实践小记
Centos 7 下安装 Wireguard
在CentOS7上安装部署WireGuard
How To Set Up WireGuard on Ubuntu 20.04

最后更新于 2025-08-14
使用 Hugo 构建
主题 StackJimmy 设计