这篇手册解决什么问题
这套流程面向需要通过用户名密码认证接入 OpenVPN 的 CentOS 7 主机,重点是把安装过程做成可重复执行的标准动作。
相比每次手工处理 yum、配置目录、DNS helper 和 systemd 命令,helper.sh 提供的脚本把整套检查清单收敛成一次可控安装流程。
步骤 1:重新导入 EPEL GPG key 并安装 OpenVPN
CentOS 7 这条路线现在不是只导入 EPEL 7 的 GPG key,而是会在需要时自动从 EPEL 7 archive 安装 epel-release、刷新 yum 缓存,然后再安装 openvpn 包。
这一步很关键,因为只导入 GPG key 并不会让 openvpn 包自动出现。更新后的 install_openvpn_client_centos7.sh 已经把 “No package openvpn available” 这种缺仓库场景一起处理掉了。
- sudo rpm --import https://dl.fedoraproject.org/pub/epel/RPM-GPG-KEY-EPEL-7
- sudo yum install -y https://dl.fedoraproject.org/pub/archive/epel/7/x86_64/Packages/e/epel-release-7-14.noarch.rpm
- sudo yum clean all && sudo yum makecache
- yum install -y openvpn
- curl -fsSL helper.sh/install_openvpn_client_centos7.sh | sudo bash
步骤 2:准备 /etc/openvpn/client/client.conf 和 login.txt
脚本默认要求当前目录里已经有 client.conf 和 login.txt,然后会把它们复制到 /etc/openvpn/client/,并在启动服务前收紧权限。
client.conf 里要保留 auth-user-pass login.txt,这样部署后客户端会从同一目录读取认证文件。
- mkdir -p /etc/openvpn/client/
- /etc/openvpn/client/client.conf
- /etc/openvpn/client/login.txt
- chmod 600 /etc/openvpn/client/login.txt
步骤 3:安装 DNS helper 并挂接 up/down hooks
CentOS 7 版本的脚本会安装 /etc/openvpn/update-resolv-conf、补上执行权限,并确保 client.conf 里存在 script-security 2 以及对应的 up/down hook。
默认 helper 会在 VPN 连上时把 10.7.7.53 和 114.114.114.114 写入 /etc/resolv.conf,VPN 断开时再恢复为公网 DNS。
- /etc/openvpn/update-resolv-conf
- chmod +x /etc/openvpn/update-resolv-conf
- script-security 2
- up /etc/openvpn/update-resolv-conf
- down /etc/openvpn/update-resolv-conf
- /var/log/openvpn-dns-update.log
成功安装时,终端里应该看到什么
一条正常的 CentOS 7 安装输出,应该依次看到:系统识别成功、EPEL GPG key 导入成功、在缺仓库时自动安装 epel-release、刷新 yum 缓存、安装 openvpn 及其依赖 pkcs11-helper、复制客户端文件、安装 DNS helper,最后显示 openvpn-client@client 已经 active。
你这次的真实安装过程本身就是一个很好的教程对照:第一次停在 “No package openvpn available”,第二次则继续完成 epel-release 安装、依赖解析、systemd enable 和服务 active,这说明修正后的脚本路径已经打通。
- [OK] Detected system: CentOS Linux 7 (Core)
- [OK] epel-release installed
- [OK] yum metadata refreshed
- [OK] OpenVPN installed
- [OK] DNS helper installed to /etc/openvpn/update-resolv-conf
- [OK] openvpn-client@client is active
步骤 4:启用服务、验证 tun0,并决定是否关闭全代理模式
文件准备好之后,就可以启用并启动 openvpn-client@client,再通过 tun0 地址和公网 IP 变化确认连接是否生效。
如果你不想走全代理,就把 redirect-gateway autolocal 注释掉,加入 route-nopull,然后只声明需要走 VPN 的网段。
- systemctl enable openvpn-client@client
- systemctl start openvpn-client@client
- ip a
- curl ipinfo.im/ip
- route-nopull
- route 10.7.0.0 255.255.0.0
- route 10.2.0.0 255.255.0.0
- route 192.168.1.0 255.255.255.0
步骤 5:只有环境确实需要时,再加每日重启任务
如果远端服务或路由状态在长时间运行后容易漂移,可以通过 cron 增加每天 5 点重启一次服务的兜底动作。
但这应该被视为运维层面的补救措施,而不是默认答案。如果服务频繁需要重启,还是应该回头看 OpenVPN 日志和服务端状态。
- crontab -e
- 0 5 * * * /usr/bin/systemctl restart openvpn-client@client