OpenVPN 客戶端維護

disable_openvpn_client_dns.sh

適用於既有 CentOS 7 風格 OpenVPN 用戶端,希望保留隧道但停用 DNS 鉤子的情況。腳本會先備份目標設定,再註解符合條件的鉤子。使用 --set-dns 時,會依主機環境修改作用中的 NetworkManager 連線設定或覆寫 /etc/resolv.conf;腳本不提供自動回復。

一鍵命令

curl -fL 'https://www.helper.sh/disable_openvpn_client_dns.sh' -o './disable_openvpn_client_dns.sh'

此命令只會下載本站檔案,不會執行。請先檢查儲存的原始碼並核對版本,再決定是否執行。

核對已下載檔案

與本頁面建置時內建的確切位元組比較。檔案僅在目前分頁處理,此工具不上傳、不持久儲存檔案。上限2 MiB。

預期 SHA-256
72aa960429bb6bc1ca576a42de7f9441969d999838972f30828b9bff120cd2ac

內建檔案位元組數: 5339

儲存校驗檔案

將腳本與校驗檔案儲存在同一目錄。Linux 安裝 GNU Coreutils 後可用下方命令僅檢查位元組,不執行腳本;使用此命令時需保留原檔名。

sha256sum --check './disable_openvpn_client_dns.sh.sha256'

尚未比較。

校驗值與腳本來自同一網站,不是獨立簽章。一致不證明安全、上游相依項目真實可信或適合本機;可變遠端相依項目需單獨審閱。

查看驗證與限制

執行要求

  • CentOS 7(或相容系統)
  • 需要 root 權限或 sudo
  • 已存在客戶端設定 /etc/openvpn/client/client.conf

適用場景

  • 保持 VPN 隧道連通,但不讓它強制使用內網 DNS(如 10.7.7.53)
  • 在用不到內網域名解析的主機上,換回自己的公網 DNS
  • 無需重裝即可撤銷 install_openvpn_client_centos7.sh 加的 DNS 鉤子

腳本亮點

  • 改動前先把 client.conf 備份成帶時間戳的 .bak
  • 註解符合條件的 script-security / up / down DNS 鉤子;每次執行都會建立備份
  • 重啟 openvpn-client@client,改動立即生效
  • 可選 --set-dns "ns1 ns2",順手幫你寫好 /etc/resolv.conf
  • 支援 --config-dir / --config-name,適配非預設安裝路徑
  • 需手動復原:還原保存的設定或取消鉤子註解,再重新啟動用戶端服務

推薦流程

  1. 先下載並審閱腳本,確認目標設定與 DNS 管理方式;僅在核准的維護時段以 root 權限執行。
  2. 腳本備份設定、註解符合條件的 DNS 鉤子,接著嘗試重新啟動指定的 OpenVPN 用戶端服務。
  3. 確認 NetworkManager 是否管理 DNS 後再考慮使用 --set-dns。不帶此參數時,腳本不會修改 /etc/resolv.conf。
  4. 檢查服務狀態與解析設定,再測試需要的內部及公開網域名稱。隧道執行中不代表 DNS 正確。

安全提示

  • 停用鉤子後可能無法解析內部網域名稱。
  • 保留時間戳設定備份,回復需手動完成。
  • --set-dns 依管理狀態更改 NetworkManager 或覆寫 resolv.conf。

相容範圍與限制

  • 依 CentOS 7 的 OpenVPN 用戶端服務慣例編寫;需要 root、systemctl 和既有用戶端設定。預設目標是 /etc/openvpn/client/client.conf 與 openvpn-client@client;可用 --config-dir、--config-name 指定其他目標。
  • 沒有 dry-run。腳本會建立含時間戳的設定副本,但不會自動回復。使用 --set-dns 時,腳本可能修改作用中的 NetworkManager 連線設定,或截斷並重寫 /etc/resolv.conf。
  • 腳本不會驗證 DNS 位址格式。直接寫入 resolv.conf 可能與 NetworkManager 或其他解析服務衝突。

受影響的檔案、服務與資料

  • 註解目標設定中符合條件的 script-security 2、up /etc/openvpn/update-resolv-conf 與 down /etc/openvpn/update-resolv-conf 行。
  • 若 systemctl 可辨識目標服務,就會嘗試重新啟動;重新啟動命令失敗會被忽略,之後再檢查服務是否為 active。
  • NetworkManager 執行中、nmcli 可用,且作用中的連線符合預設路由網卡時,會將該連線的 DNS 重設為 DHCP 或 --set-dns 值;否則 --set-dns 會覆寫 /etc/resolv.conf。不帶 --set-dns 時不會修改該檔案。

唯讀核驗

  • 執行前檢查目標設定與 DNS 管理方式:`sudo grep -nE "^(#?script-security 2|#?up /etc/openvpn/update-resolv-conf|#?down /etc/openvpn/update-resolv-conf)" /etc/openvpn/client/client.conf`、`systemctl status openvpn-client@client`、`readlink -f /etc/resolv.conf`。
  • 經核准的維護操作後,檢查 `systemctl status openvpn-client@client`、`nmcli connection show --active` 與 `cat /etc/resolv.conf`;分別測試所需的內部與公開網域名稱,並審閱產生的 .bak 和 NetworkManager DNS 設定。

失敗後的下一步

若 DNS 或隧道異常,保留設定備份,檢查 `sudo journalctl -u openvpn-client@client -n 100 --no-pager` 與 `nmcli connection show`。必要時手動還原設定鉤子並重新啟動服務。先確認由哪個解析服務管理 resolv.conf,再透過該管理器復原;不要盲目覆寫受管理檔案或符號連結。

先下載、審閱並核對版本,再決定是否執行。雜湊只能識別這一版位元組,不能證明安全。pipe 命令會立即執行遠端內容;上游依賴也可能變動。