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 命令会立即执行远程内容;上游依赖也可能变化。