OpenVPN 指南

在 CentOS 7 上安裝 OpenVPN 客戶端:含 login.txt 認證、DNS 腳本與路由說明

一篇面向實操的說明,講清楚如何使用 install_openvpn_client_centos7.sh 在 CentOS 7 上導入 EPEL GPG key、安裝 OpenVPN、放置 client.conf 和 login.txt、部署 update-resolv-conf,並啟用 openvpn-client@client。

閱讀約 7 分鐘 · 2026-04-02

這篇手冊解決什麼問題

這套流程面向需要透過使用者名稱密碼認證接入 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

相關專題

OpenVPN 客戶端接入與 DNS 處理

面向 Ubuntu 和 CentOS 7 主機的 OpenVPN 客戶端接入專題,重點覆蓋 client.conf、login.txt、DNS 腳本、systemd 服務和按需路由。

查看專題