出差在外想访问家里的 NAS、公司内网要连回办公室、担心公共 WiFi 不安全想加密上网——OpenVPN 是最成熟、兼容性最好的 VPN 方案之一:服务端跑在你的 VPS 上,手机、电脑、路由器都能一键接入,流量全程加密。这篇文章用最简单的方式,在 CentOS 上从零搭好 OpenVPN 服务端,并配置 Windows 和手机客户端。
一、OpenVPN 是什么?和 WireGuard 有什么区别
OpenVPN 基于 SSL/TLS 加密隧道,兼容性极好,几乎所有平台都有官方客户端;配置相对复杂但非常成熟稳定。
| 对比 | OpenVPN | WireGuard |
|---|---|---|
| 内核/实现 | 用户态软件 | 内核模块,性能更高 |
| 配置复杂度 | 较高(证书体系) | 简单(密钥对) |
| 客户端支持 | 全平台,支持极好 | 主平台支持,部分旧设备不行 |
| 适用场景 | 需要兼容老设备、企业环境 | 追求性能、设备较新 |
VPS 搭建个人 VPN,两者都可以;想稳定兼容所有设备,OpenVPN 是老牌稳妥选择。
二、安装 OpenVPN(CentOS 7 示例)
第 1 步:安装软件包
yum install -y epel-release
yum install -y openvpn easy-rsa
第 2 步:初始化 easy-rsa(用于签发证书)
mkdir -p /etc/openvpn/easy-rsa
cp -r /usr/share/easy-rsa/3/* /etc/openvpn/easy-rsa/
cd /etc/openvpn/easy-rsa
./easyrsa init-pki
第 3 步:创建 CA 证书(按提示设置密码/名称)
./easyrsa build-ca nopass
第 4 步:生成服务端证书和密钥
./easyrsa gen-req server nopass
./easyrsa sign-req server server
./easyrsa gen-dh
openvpn --genkey secret ta.key
第 5 步:复制证书到 openvpn 目录
cp pki/ca.crt /etc/openvpn/
cp pki/issued/server.crt /etc/openvpn/
cp pki/private/server.key /etc/openvpn/
cp pki/dh.pem /etc/openvpn/dh.pem
cp ta.key /etc/openvpn/
三、配置服务端
编辑 /etc/openvpn/server.conf:
port 1194
proto udp
dev tun
ca ca.crt
cert server.crt
key server.key
dh dh.pem
tls-auth ta.key 0
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 223.5.5.5"
keepalive 10 120
cipher AES-256-GCM
user nobody
group nobody
persist-key
persist-tun
status openvpn-status.log
log-append /var/log/openvpn.log
verb 3
关键参数:
| 参数 | 作用 |
|---|---|
| server 10.8.0.0 | 给客户端分配的虚拟网段 |
| redirect-gateway | 客户端所有流量走 VPN(全局代理) |
| push DNS | 客户端使用指定 DNS |
| cipher AES-256-GCM | 加密算法 |
开启内核转发并放行端口:
echo 'net.ipv4.ip_forward = 1' >> /etc/sysctl.conf
sysctl -p
iptables -t nat -A POSTROUTING -s 10.8.0.0/24 -o eth0 -j MASQUERADE
iptables-save > /etc/iptables.rules
iptables -A INPUT -p udp --dport 1194 -j ACCEPT
启动并开机自启:
systemctl start openvpn@server
systemctl enable openvpn@server
systemctl status openvpn@server # 确认 active (running)
四、生成客户端证书与配置
第 1 步:签发客户端证书(每个客户端一个)
cd /etc/openvpn/easy-rsa
./easyrsa gen-req client1 nopass
./easyrsa sign-req client client1
第 2 步:生成客户端配置文件 client1.ovpn
client
dev tun
proto udp
remote 你的VPS公网IP 1194
resolv-retry infinite
nobind
persist-key
persist-tun
remote-cert-tls server
cipher AES-256-GCM
verb 3
<ca>
[粘贴 ca.crt 内容]
</ca>
<cert>
[粘贴 client1.crt 内容]
</cert>
<key>
[粘贴 client1.key 内容]
</key>
<tls-auth>
[粘贴 ta.key 内容]
</tls-auth>
key-direction 1
快捷生成方法:把证书内容拼进一个脚本自动生成 .ovpn 文件,然后下载到本地使用。
五、客户端连接
Windows 客户端:
- 官网下载安装 OpenVPN GUI;
- 把 client1.ovpn 放入
C:\Program Files\OpenVPN\config\; - 右键托盘图标 -> 连接,输入用户名密码(如果配置了)即可。
手机端(Android/iOS):
- 应用商店搜索安装 OpenVPN Connect;
- 导入 client1.ovpn 文件;
- 点击连接,出现"已连接"就是成功了。
Linux 客户端:
yum install -y openvpn
openvpn --config client1.ovpn
六、验证 VPN 是否正常工作
客户端连上后,检查:
# 客户端上执行,能看到 10.8.0.1(服务端虚拟 IP)说明隧道通了
ping 10.8.0.1
然后访问一个网站或查 IP:
curl ifconfig.me
显示的是 VPS 的公网 IP,说明流量已经走 VPN 加密隧道了。
七、常见问题排查
1. 客户端连接超时
- 确认服务端在跑:
systemctl status openvpn@server; - 确认 1194 UDP 端口放行:
ss -ulnp | grep 1194,防火墙检查; - 用客户端日志看卡在哪一步(连接->验证证书->隧道建立)。
2. 连上了但无法上网
一般是内核转发没开或 NAT 规则没加:
sysctl net.ipv4.ip_forward # 应为 1
iptables -t nat -L -n | grep MASQUERADE # 应有 10.8.0.0/24 的规则
3. TLS error: verify error(证书问题)
客户端和服务端的 ca.crt 不一致,或证书过期。重新生成并替换。
4. 忘记服务端密码
建 CA 时如果用了 nopass 就不会有密码;否则所有证书都要重新签发。建议直接 nopass 重新生成。
总结
OpenVPN 搭建流程就是四步:easy-rsa 签发证书 -> 配置 server.conf -> 放行端口和转发 -> 生成客户端 .ovpn 导入连接。一次搭好之后,手机、电脑、路由器都能随时接入,出差在外访问家里和公司内网非常方便。记得把 1194 端口只对你的客户端开放、证书文件别泄露,VPN 才能真正安全。




