背景
为了工作,我必须使用 Appgate SDP,它是一个 VPN 客户端。它创建一个 tun0 设备,添加一堆(300 多个)路由,并应该通过 tun0 的域搜索来设置 DNS 服务器。上周的某个时候,DNS 配置停止工作,我无法再将服务器名称解析为 IP 地址。我怀疑某些更新(无论是 NetworkManager 还是已解决)可能导致此问题,但我真的不知道。
从技术上讲,这是 Appgate 应该解决的问题,但与此同时,如果我可以编写一个目前最适合我的解决方案。
部分解决方案
使用 nmcli 的小脚本,我能够在 tun0 上配置 DNS 和搜索域,并且我的 DNS 解析再次正常工作。
nmcli con mod tun0 ipv4.dns "10.x.x.x"
ncmli con mod tun0 ip4.dns-search "~example.com"
这种方法的唯一问题是,运行我的脚本后,Appgate 添加的所有路由都消失了。我检查了Appgate日志,该应用程序使用ip route add
添加那些运行后不保留的路由的方式nmcli
。
问题
有什么方法可以解析并重新添加这些路由吗nmcli
?
# Setup DNS for tun0
nmcli con mod tun0 ipv4.dns "10.x.x.x"
ncmli con mod tun0 ip4.dns-search "~example.com"
# Code to parse the current tun0 routes into memory
. . .
# Add routes for tun0
for route in "${routes[@]}"
do
nmcli con mod tun0 +ipv4.routes "route"
done
奖金
此时,每次我使用 Appgate 时,我只需要 tun0。我是否可以在连接到 Appgate 时仅通过 tun0 路由所有流量,然后在退出 Appgate 时将所有路由重置为 eth0?
谷歌和一些试验和错误,我能够得到一个工作脚本
正如 Esa 在他们的评论中指出的那样,我的脚本应该在添加 DNS 之前获取路由,因为如果我添加 DNS,它将删除所有路由。
所以经过一些测试我想出了这个: