如何在GCP环境的OpenVPN Access Server中配置特定外部域名通过VPN隧道路由
实现特定域名通过OpenVPN隧道路由(无需额外软件)
没问题,我来帮你搞定这个需求——在GCP上启用了拆分隧道的OpenVPN Access Server中,让特定域名的流量走VPN隧道,完全不需要额外工具,直接用OpenVPN自带的配置就能实现。下面分两种场景给你详细步骤:
一、静态IP域名(IP固定不常变)
如果目标域名的IP是固定的,直接通过OpenVPN Access Server的管理控制台配置即可:
- 登录OpenVPN Access Server的Admin Web UI(通常是
https://你的VPN服务器公网IP:943/admin) - 导航到 VPN Settings -> Client Settings
- 滚动到Customization区域,找到Additional OpenVPN Config Directives
- 添加针对目标域名IP的路由推送命令:
- 如果是单个IP的域名:
push "route 198.51.100.10 255.255.255.255"(把IP换成你域名解析后的实际地址) - 如果是整个IP网段:
push "route 192.0.2.0 255.255.255.0"(比如目标域名的所有IP都在这个网段内)
- 如果是单个IP的域名:
- 点击Save Settings,然后点击Update Running Server使配置生效
二、动态IP域名(IP频繁变化,比如Cloudflare托管的域名)
如果目标域名的IP经常变动,手动加路由太麻烦,可以用脚本定期自动更新:
1. 编写自动更新脚本
创建一个shell脚本(比如update_vpn_routes.sh),内容如下:
#!/bin/bash # 替换成你要路由的目标域名 TARGET_DOMAIN="example.com" # OpenVPN Access Server配置文件路径(默认路径) CONFIG_FILE="/usr/local/openvpn_as/etc/as.conf" # 获取域名的所有A记录IP TARGET_IPS=$(dig +short A $TARGET_DOMAIN) # 清空旧的路由推送配置 sed -i "/custom_client_config = push \"route/d" $CONFIG_FILE # 生成新的路由推送命令 for IP in $TARGET_IPS; do echo "custom_client_config = push \"route $IP 255.255.255.255\"" >> $CONFIG_FILE done # 重启OpenVPN服务使配置生效 /usr/local/openvpn_as/scripts/openvpn-init --restart
2. 设置定时任务
用crontab让脚本定期执行(比如每小时更新一次):
- 执行
crontab -e编辑定时任务 - 添加一行:
0 * * * * /path/to/update_vpn_routes.sh(替换成你的脚本实际路径) - 保存退出即可
三、验证配置是否生效
客户端连接VPN后,可以通过以下方式验证:
- Windows:执行
tracert 目标域名,查看路由路径是否经过VPN服务器的IP - Linux/macOS:执行
traceroute 目标域名,确认第一跳之后的节点是VPN服务器 - 查看路由表:Windows用
route print,Linux用ip route,macOS用netstat -nr,检查目标域名的IP对应的路由是否指向VPN接口
关键说明
- 完全不需要额外软件,所有操作都是基于OpenVPN Access Server自带的路由推送功能和Linux基础工具实现的
- 拆分隧道模式下,只有你指定的域名IP会走VPN,其他流量依然直接走本地互联网,符合你的需求
内容的提问来源于stack exchange,提问作者Nishchal Dinesh




