凌峰创科服务平台

centos vpn 服务器搭建

  1. 使用 wireguard(强烈推荐) 性能极高、配置简单、安全性强、协议现代,是当前搭建个人 VPN 的首选。
  2. 使用 OpenVPN:经典稳定,兼容性极好,几乎所有设备和平台都支持客户端,但配置相对复杂一些。

我会以 CentOS 7CentOS 8/Stream/Rocky Linux/AlmaLinux 为例,分别讲解这两种方法的详细步骤。

centos vpn 服务器搭建-图1
(图片来源网络,侵删)

第一步:准备工作(所有方法通用)

在开始之前,请确保你的服务器满足以下条件:

  1. 一台干净的 CentOS 服务器:拥有 rootsudo 权限。
  2. 一个公网 IP 地址:这是必须的,否则你的设备无法连接到服务器。
  3. 已正确配置防火墙:这是最常见的失败原因,我们会在配置过程中开放相应端口。
  4. 更新系统:保持系统软件包是最新的好习惯。
# 更新系统软件包
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: 这些系统的内核较新,可以直接安装。

centos vpn 服务器搭建-图2
(图片来源网络,侵删)
# 安装 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 文件。

centos vpn 服务器搭建-图3
(图片来源网络,侵删)

创建服务端配置文件

创建一个名为 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

你需要将以下文件打包,发给客户端:

  1. /etc/openvpn/server/easy-rsa/pki/ca.crt
  2. /etc/openvpn/server/easy-rsa/pki/issued/client1.crt
  3. /etc/openvpn/server/easy-rsa/pki/private/client1.key
  4. /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 变得非常轻松。

分享:
扫描分享到社交APP
上一篇
下一篇