在Linux系统中搭建VPN服务器是一项实用的网络配置任务,通常可通过OpenVPN、WireGuard或PPTP等协议实现,本文将以主流的OpenVPN为例,详细讲解在CentOS 7系统上的完整搭建流程,包括环境准备、安装配置、证书生成、服务启动及安全加固等步骤,同时辅以表格说明关键参数,并在文末提供常见问题解答。

环境准备与基础配置
首先需要一台具有公网IP的Linux服务器(推荐CentOS 7/Ubuntu 18.04+),确保系统已更新至最新状态,并关闭防火墙和SELinux(生产环境建议正确配置而非直接关闭),执行以下命令更新系统并安装必要依赖:
sudo yum update -y # CentOS系统 # sudo apt update && sudo apt upgrade -y # Ubuntu系统 sudo yum install -y epel-release wget openssl tar curl
接着关闭防火墙和SELinux(临时关闭):
sudo systemctl stop firewalld && sudo systemctl disable firewalld sudo setenforce 0 sudo sed -i 's/SELINUX=enforcing/SELINUX=permissive/g' /etc/selinux/config
安装OpenVPN与EasyRSA
OpenVPN依赖EasyRSA管理证书,需先下载并安装二者,执行以下命令获取最新版本:
wget https://github.com/OpenVPN/easy-rsa/releases/download/v3.0.8/EasyRSA-3.0.8.tgz tar xzf EasyRSA-3.0.8.tgz && sudo mv EasyRSA-3.0.8 /etc/openvpn/easy-rsa
然后安装OpenVPN服务端:

sudo yum install -y openvpn
生成CA证书与服务器证书
证书是VPN安全通信的核心,需按以下步骤生成:
- 初始化PKI目录:
cd /etc/openvpn/easy-rsa sudo ./easyrsa init-pki
- 构建CA证书:
sudo ./easyrsa build-ca nopass
- 生成服务器证书:
sudo ./easyrsa gen-req server nopass sudo ./easyrsa sign-req server server
- 生成Diffie-Hellman参数(耗时较长):
sudo ./easyrsa gen-dh
- 生成HMAC密钥:
sudo openvpn --genkey --secret pki/ta.key
所有证书将生成在
/etc/openvpn/easy-rsa/pki/目录下,需将其复制到OpenVPN配置目录:sudo cp pki/ca.crt pki/issued/server.crt pki/private/server.key pki/dh.pem pki/ta.key /etc/openvpn/server/
配置OpenVPN服务器
创建服务器配置文件/etc/openvpn/server/server.conf如下(关键参数说明见表1):
port 1194 proto udp dev tun ca ca.crt cert server.crt key server.key dh dh.pem 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 tls-crypt ta.key cipher AES-256-CBC auth SHA256 user nobody group nogroup persist-key persist-tun status openvpn-status.log verb 3 explicit-exit-notify 1
表1:OpenVPN关键配置参数说明
| 参数 | 说明 | 示例值 |
|------|------|--------|
| port | 服务器监听端口 | 1194 |
| proto | 传输协议(udp/tcp) | udp |
| server | VPN分配的子网 | 10.8.0.0 255.255.255.0 |
| push redirect-gateway | 客户端所有流量通过VPN | redirect-gateway def1 |
| cipher | 加密算法 | AES-256-CBC |
| tls-crypt | 防止TLS攻击 | ta.key |

启动服务与配置转发
- 启用IP转发:
编辑
/etc/sysctl.conf,添加net.ipv4.ip_forward=1,然后执行:sudo sysctl -p
- 配置NAT转发:
添加iptables规则(假设公网网卡为eth0):
sudo iptables -t nat -A POSTROUTING -s 10.8.0.0/24 -o eth0 -j MASQUERADE sudo iptables-save > /etc/sysconfig/iptables
- 启动OpenVPN服务:
sudo systemctl start openvpn-server@server sudo systemctl enable openvpn-server@server
生成客户端配置文件
客户端配置文件需包含证书、服务器地址等信息,创建/etc/openvpn/client/client.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-user-pass tls-crypt ta.key verb 3
将ca.crt、client.crt、client.key(需单独生成)与client.ovpn打包提供给客户端,或使用easyrsa为每个客户端生成独立证书。
安全加固建议
- 启用双因素认证:结合Google Authenticator实现动态口令。
- 限制访问IP:通过防火墙规则仅允许特定IP连接VPN端口。
- 定期轮换证书:设置证书过期时间,定期重新签发。
- 日志监控:通过
status log和syslog监控连接状态。
常见问题FAQs
问题1:客户端连接提示“authentication failed”如何解决?
解答:通常由证书错误或配置文件问题导致,检查步骤:
- 确认客户端配置文件中的
remote地址为服务器公网IP; - 验证
ca.crt、client.crt、client.key是否完整且路径正确; - 检查服务器端
/var/log/openvpn/server.log,查看具体错误信息(如证书链不匹配或密钥错误)。
问题2:VPN连接后无法访问互联网,但内网资源正常?
解答:多为NAT转发或DNS配置问题,解决方法:
- 确认服务器已开启IP转发(
sysctl net.ipv4.ip_forward值为1); - 检查iptables MASQUERADE规则是否正确应用(
iptables -t nat -L -v); - 客户端配置文件中的DNS服务器是否有效(如Google DNS
8.8.8),可尝试替换为运营商DNS或服务器本地DNS。
