在Linux系统中搭建VPN服务器是实现远程安全访问、数据加密传输的常用方法,以下以主流的OpenVPN为例,详细讲解在CentOS 7系统上的完整搭建流程,包括环境准备、服务端配置、客户端连接及安全优化等关键步骤。

环境准备与依赖安装
首先需要一台具有公网IP的Linux服务器(建议CentOS 7/Ubuntu 18.04+),并确保系统已更新至最新状态,登录服务器后,执行以下命令更新系统并安装必要的依赖包:
# CentOS系统 yum update -y && yum install -y epel-release wget openssl openssl-devel lzo-devel pam-devel # Ubuntu系统 apt update && apt install -y wget openssl libssl-dev liblzo2-dev libpam-dev
安装完成后,关闭防火墙和SELinux(生产环境建议配置规则而非直接关闭):
systemctl stop firewalld && systemctl disable firewalld setenforce 0 && sed -i 's/SELINUX=enforcing/SELINUX=permissive/g' /etc/selinux/config
安装与配置OpenVPN
-
安装OpenVPN及Easy-RSA
Easy-RSA用于生成证书和密钥,是OpenVPN安全通信的基础,从官方源下载并安装:wget https://github.com/OpenVPN/easy-rsa/releases/download/v3.0.8/EasyRSA-3.0.8.tgz tar -zxvf EasyRSA-3.0.8.tgz && mv EasyRSA-3.0.8 /etc/openvpn/easy-rsa cd /etc/openvpn/easy-rsa
-
生成CA证书与服务端密钥
初始化PKI并构建CA证书:
(图片来源网络,侵删)./easyrsa init-pki ./easyrsa --batch build-ca nopass
生成服务端证书(需输入 Common Name,建议填写服务器域名或IP):
./easyrsa gen-req server nopass ./easyrsa sign-req server server
生成Diffie-Hellman参数(增强密钥交换安全性):
./easyrsa gen-dh
生成HMAC密钥(防止攻击):
openvpn --genkey --secret pki/ta.key
-
创建服务端配置文件
在/etc/openvpn/目录下创建server.conf文件,核心配置如下:
(图片来源网络,侵删)port 1194 proto udp dev tun ca /etc/openvpn/easy-rsa/pki/ca.crt cert /etc/openvpn/easy-rsa/pki/issued/server.crt key /etc/openvpn/easy-rsa/pki/private/server.key dh /etc/openvpn/easy-rsa/pki/dh.pem tls-crypt /etc/openvpn/easy-rsa/pki/ta.key server 10.8.0.0 255.255.255.0 ifconfig-pool-persist ipp.txt push "redirect-gateway def1 bypass-dhcp" push "dhcp-option DNS 8.8.8.8" push "dhcp-option DNS 8.8.4.4" keepalive 10 120 cipher AES-256-CBC auth SHA256 user nobody group nobody persist-key persist-tun status /var/log/openvpn-status.log verb 3 explicit-exit-notify 1
配置说明:
server 10.8.0.0 255.255.255.0:定义VPN客户端分配的IP段push指令:强制客户端使用VPN网关并指定DNS服务器cipher与auth:加密算法与认证方式,确保安全性
- 启动OpenVPN服务
将配置文件复制到OpenVPN配置目录并启动服务:cp /etc/openvpn/server.conf /etc/openvpn/ systemctl start openvpn@server systemctl enable openvpn@server
配置客户端密钥与连接
-
生成客户端证书
在服务器端为每个客户端生成独立证书(以客户端名client1为例):cd /etc/openvpn/easy-rsa ./easyrsa gen-req client1 nopass ./easyrsa sign-req client client1
-
打包客户端配置文件
创建客户端配置目录,并将证书、密钥及配置文件打包:mkdir -p /etc/openvpn/clients/client1 cp pki/ca.crt pki/issued/client1.crt pki/private/client1.key pki/ta.key /etc/openvpn/clients/client1/
创建客户端配置文件
client1.ovpn如下:client dev tun proto udp remote your_server_ip 1194 resolv-retry infinite nobind persist-key persist-tun remote-cert-tls server cipher AES-256-CBC auth SHA256 auth-nocache verb 3 <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>
将
your_server_ip替换为服务器公网IP,最后将client1.ovpn下载到客户端设备。
安全优化与故障排查
-
启用防火墙规则
生产环境中需开放1194端口并允许NAT转发:firewall-cmd --permanent --add-port=1194/udp firewall-cmd --permanent --add-masquerade firewall-cmd --reload
-
常见问题排查
- 客户端无法获取IP:检查
server.conf中的ifconfig-pool-persist文件是否正确记录分配的IP - 连接超时:确认服务器防火墙已放行1194端口,且客户端配置的
remote地址正确 - 证书错误:验证客户端证书是否经CA签名,检查
ca.crt是否完整
以下是客户端连接参数配置表,供快速参考:
| 参数 | 说明 | 示例值 |
|---|---|---|
| remote | 服务器IP与端口 | your_server_ip 1194 |
| dev | 虚拟网卡类型 | tun |
| proto | 传输协议 | udp |
| cipher | 加密算法 | AES-256-CBC |
| auth | 认证算法 | SHA256 |
相关问答FAQs
Q1: 如何限制VPN客户端只能访问特定内网资源?
A1: 在server.conf中添加route指令定义允许访问的内网网段,并配置iptables/NAT规则,若客户端仅能访问192.168.1.0/24网段,可添加:
route 192.168.1.0 255.255.255.0 iptables -t nat -A POSTROUTING -s 10.8.0.0/24 -d 192.168.1.0/24 -j MASQUERADE
Q2: 如何实现多用户同时连接且互不干扰?
A2: 为每个用户生成独立证书(如上述client1生成步骤),并在server.conf中配置ccd(Client Config Directory)目录,为不同用户分配固定IP,具体操作:
- 创建
/etc/openvpn/ccd目录 - 为用户创建配置文件(如
client1为ifconfig-push 10.8.0.2 255.255.255.0 - 在
server.conf中添加client-config-dir ccd
这样用户client1连接后将固定获得10.8.0.2 IP地址。
