這篇手冊解決什麼問題
這套流程面向需要透過使用者名稱密碼認證接入 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