- 使用
wireguard:(强烈推荐) 性能极高、配置简单、安全性强、协议现代,是当前搭建个人 VPN 的首选。 - 使用
OpenVPN:经典稳定,兼容性极好,几乎所有设备和平台都支持客户端,但配置相对复杂一些。
我会以 CentOS 7 和 CentOS 8/Stream/Rocky Linux/AlmaLinux 为例,分别讲解这两种方法的详细步骤。

第一步:准备工作(所有方法通用)
在开始之前,请确保你的服务器满足以下条件:
- 一台干净的 CentOS 服务器:拥有
root或sudo权限。 - 一个公网 IP 地址:这是必须的,否则你的设备无法连接到服务器。
- 已正确配置防火墙:这是最常见的失败原因,我们会在配置过程中开放相应端口。
- 更新系统:保持系统软件包是最新的好习惯。
# 更新系统软件包 sudo yum update -y
使用 WireGuard 搭建高性能 VPN(推荐)
WireGuard 是 Linux 内核 5.6+ 自带的模块,在 CentOS 7/8 上安装非常方便。
安装 WireGuard
对于 CentOS 7: CentOS 7 的内核较老,需要从 EPEL 仓库安装。
# 安装 EPEL 仓库 sudo yum install -y epel-release # 安装 WireGuard sudo yum install -y wireguard-dkms wireguard-tools
对于 CentOS 8 / Stream / Rocky Linux / AlmaLinux: 这些系统的内核较新,可以直接安装。

# 安装 EPEL 仓库 (CentOS 8/Stream 需要) sudo dnf install -y epel-release # 安装 WireGuard sudo dnf install -y wireguard-tools
生成服务端和客户端密钥
我们需要为服务器和每个需要连接的客户端生成一对公钥和私钥。
生成服务端密钥:
# 进入 WireGuard 配置目录 cd /etc/wireguard/ # 生成服务端的私钥和公钥 umask 077 wg genkey | tee server_private.key | wg pubkey > server_public.key
生成第一个客户端密钥(手机或电脑):
# 生成客户端的私钥和公钥 wg genkey | tee client1_private.key | wg pubkey > client1_public.key
现在你的 /etc/wireguard/ 目录下应该有四个 .key 文件。

创建服务端配置文件
创建一个名为 wg0.conf 的文件:
sudo nano /etc/wireguard/wg0.conf
粘贴进去,并根据你的实际情况修改:
[Interface] # 服务器私钥,从文件中读取 PrivateKey = $(cat /etc/wireguard/server_private.key) # VPN 服务器的内网 IP 地址,用于客户端分配 Address = 10.0.0.1/24 # 设置一个 DNS 服务器,避免客户端使用本地运营商的 DNS DNS = 8.8.8.8, 1.1.1.1 # 开启 IPv4 转发功能,这是 VPN 路由数据所必需的 PostUp = echo 1 > /proc/sys/net/ipv4/ip_forward # 关闭 IPv4 转发功能 PostDown = echo 0 > /proc/sys/net/ipv4/ip_forward # 端口,建议使用 51820 (UDP) ListenPort = 51820 # 客户端的公钥,将从文件中读取 # 格式:[Peer] # PublicKey = <客户端公钥> # AllowedIPs = <允许客户端访问的IP范围>
添加客户端配置
我们需要在服务端配置文件中添加客户端信息,回到 wg0.conf 文件,在 [Interface] 部分下方添加:
[Peer] # 客户端1的公钥 PublicKey = $(cat /etc/wireguard/client1_public.key) # 为客户端分配的内网IP地址,/24 网段中的第二个地址 AllowedIPs = 10.0.0.2/32 # (可选) 限制客户端的带宽,100Mbps 上行,50Mbps 下行 # LimitRate = 100Mbit, 50Mbit
说明:
AllowedIPs = 10.0.0.2/32表示这个客户端只拥有0.0.2这个 IP 地址。- 如果你想让客户端通过 VPN 访问整个服务器所在网络,可以设置为
AllowedIPs = 10.0.0.2/32, 192.168.1.0/24(假设你的服务器内网是168.1.0/24)。 - 如果你想让客户端通过 VPN 访问整个互联网,可以设置为
AllowedIPs = 10.0.0.2/32, 0.0.0.0/0。
配置防火墙和 NAT (网络地址转换)
这是让客户端能够访问外网的关键一步。
# 开放 WireGuard 的端口 (51820) sudo firewall-cmd --permanent --add-port=51820/udp # 开启 NAT 转发 sudo firewall-cmd --permanent --add-masquerade # 重新加载防火墙使配置生效 sudo firewall-cmd --reload
启动并启用 WireGuard 服务
# 启动 wg0 接口 sudo wg-quick up wg0 # 设置开机自启 sudo systemctl enable wg-quick@wg0
检查服务状态:
sudo wg
你应该能看到服务端的配置和已连接的客户端信息。
创建客户端配置文件
你需要一个配置文件来连接到你的 VPN 服务器,在客户端设备(电脑、手机)上创建一个名为 client.conf 的文件,内容如下:
[Interface] # 客户端的私钥 PrivateKey = <你的客户端1_private.key内容> # 客户端在VPN网络中的IP地址 Address = 10.0.0.2/24 # DNS 设置 DNS = 8.8.8.8 # 保持连接,如果60秒没有流量,则发送一个空的包 PersistentKeepalive = 25 [Peer] # 服务器的公钥 PublicKey = <你的服务器server_public.key内容> # 服务器的外网IP和端口 Endpoint = <你的服务器公网IP>:51820 # 所有流量都通过VPN隧道 AllowedIPs = 0.0.0.0/0
将 <...> 中的内容替换为你自己生成的密钥和服务器 IP。
连接 VPN
- Windows: 下载并安装 WireGuard 官方客户端,导入
client.conf文件即可。 - Android/iOS: 在应用商店下载 "WireGuard" 应用,导入配置文件。
- macOS: 同样使用官方客户端。
- Linux (客户端): 安装
wireguard-tools,然后运行:sudo wg-quick up /path/to/your/client.conf
连接成功后,你的设备 IP 地址应该会变成服务器的公网 IP。
使用 OpenVPN 搭建经典 VPN
OpenVPN 的配置更复杂,因为它依赖于 Easy-RSA 来管理证书和密钥。
安装 OpenVPN 和 Easy-RSA
# CentOS 7 sudo yum install -y openvpn easy-rsa # CentOS 8 / Stream / Rocky Linux / AlmaLinux sudo dnf install -y openvpn easy-rsa
初始化 PKI (Public Key Infrastructure)
PKI 是管理证书的框架。
# 创建一个用于存放证书的目录 sudo mkdir -p /etc/openvpn/server/easy-rsa/ # 将 easy-rsa 的模板文件复制过来 sudo cp -rf /usr/share/easy-rsa/3/* /etc/openvpn/server/easy-rsa/ # 进入证书目录 cd /etc/openvpn/server/easy-rsa/ # 初始化 PKI sudo ./easyrsa init-pki # 创建 CA (证书颁发机构) sudo ./easyrsa build-ca nopass # 这里会生成 ca.crt 和 ca.key,一路回车即可。 # 创建服务器证书 sudo ./easyrsa gen-req server nopass # 会生成 server.req,一路回车。 # 使用 CA 签名服务器证书 sudo ./easyrsa sign-req server server # 会提示输入 `yes`,然后输入 CA 的密码(如果设置了的话,我们这里没设置,直接回车)。 # 创建 Diffie-Hellman 密钥,用于增强安全性 sudo ./easyrsa gen-dh # 创建 HMAC 密钥,用于增强 TLS 安全 sudo openvpn --genkey --secret pki/ta.key
创建服务端配置文件
sudo nano /etc/openvpn/server/server.conf
并根据需要修改:
# 端口和协议 port 1194 proto udp # 使用 tun 网络设备,这是 VPN 的标准 dev tun # CA 证书 ca /etc/openvpn/server/easy-rsa/pki/ca.crt # 服务器证书 cert /etc/openvpn/server/easy-rsa/pki/issued/server.crt # 服务器私钥 key /etc/openvpn/server/easy-rsa/pki/private/server.key # DH 文件 dh /etc/openvpn/server/easy-rsa/pki/dh.pem # HMAC 文件 tls-crypt /etc/openvpn/server/easy-rsa/pki/ta.key # 网络配置 server 10.8.0.0 255.255.255.0 # 推给客户端的 DNS push "redirect-gateway def1 bypass-dhcp" push "dhcp-option DNS 8.8.8.8" push "dhcp-option DNS 1.1.1.1" # 允许客户端之间互相通信 client-to-client # 保持客户端连接 keepalive 10 120 # 使用 LZO 压缩 comp-lzo # 用户和权限 user nobody group nobody # 日志 log-append /var/log/openvpn.log # 提高安全性 cipher AES-256-CBC auth SHA256 # 使用 cryptv2 协议 ncp-ciphers AES-256-GCM # 每个客户端使用独立的证书文件 duplicate-cn # 运行在守护进程模式 daemon
配置防火墙和 NAT
# 开放 OpenVPN 端口 (1194/udp) sudo firewall-cmd --permanent --add-port=1194/udp # 开启 NAT sudo firewall-cmd --permanent --add-masquerade # 重新加载防火墙 sudo firewall-cmd --reload
启动并启用 OpenVPN 服务
# 启动服务 sudo systemctl start openvpn-server@server # 设置开机自启 sudo systemctl enable openvpn-server@server
检查状态:
sudo systemctl status openvpn-server@server
创建客户端配置文件和证书
这部分比较繁琐,你需要为每个用户生成一个证书,这里以创建一个名为 client1 的用户为例。
# 回到 easy-rsa 目录 cd /etc/openvpn/server/easy-rsa/ # 为客户端1生成证书请求 sudo ./easyrsa gen-req client1 nopass # 使用 CA 签名客户端1的证书 sudo ./easyrsa sign-req client client1
你需要将以下文件打包,发给客户端:
/etc/openvpn/server/easy-rsa/pki/ca.crt/etc/openvpn/server/easy-rsa/pki/issued/client1.crt/etc/openvpn/server/easy-rsa/pki/private/client1.key/etc/openvpn/server/easy-rsa/pki/ta.key
客户端配置文件 (client1.ovpn):
在客户端设备上创建一个 client1.ovpn 文件:
client dev tun proto udp remote <你的服务器公网IP> 1194 resolv-retry infinite nobind persist-key persist-tun remote-cert-tls server cipher AES-256-CBC auth SHA256 comp-lzo verb 3 key-direction 1 <ca> -----BEGIN CERTIFICATE----- ... (粘贴 ca.crt 的内容) ... -----END CERTIFICATE----- </ca> <cert> -----BEGIN CERTIFICATE----- ... (粘贴 client1.crt 的内容) ... -----END CERTIFICATE----- </cert> <key> -----BEGIN PRIVATE KEY----- ... (粘贴 client1.key 的内容) ... -----END PRIVATE KEY----- </key> <tls-crypt> -----BEGIN OpenVPN Static key V1----- ... (粘贴 ta.key 的内容) ... -----END OpenVPN Static key V1----- </tls-crypt>
连接 VPN:
- Windows: 下载 OpenVPN GUI,导入
client1.ovpn文件。 - Android/iOS: 在应用商店下载 "OpenVPN Connect" 应用,导入配置文件。
- Linux: 安装
openvpn,然后运行sudo openvpn client1.ovpn。
总结与对比
| 特性 | WireGuard | OpenVPN |
|---|---|---|
| 性能 | 极高,基于现代内核技术 | 良好,但低于 WireGuard |
| 配置 | 非常简单,配置文件清晰 | 相对复杂,涉及证书管理 |
| 安全性 | 极高,代码库小,审计容易 | 高,但历史悠久,代码库庞大 |
| 兼容性 | 良好,主流平台都有支持 | 极佳,几乎所有平台都支持 |
| 协议 | 专有协议,但已标准化 | 经典的 SSL/TLS 协议 |
| 推荐场景 | 个人使用、对性能有要求的场景 | 企业环境、需要兼容老旧设备、有复杂需求的场景 |
对于绝大多数个人用户来说,WireGuard 是毫无疑问的最佳选择。 它的简单、快速和安全会让你搭建和维护 VPN 变得非常轻松。
