当我运行 openconnect(使用默认 vpnc 脚本)时,它会发生变化/etc/resolv.conf
,但实际上它不应该这样。我只是将 VPN 用于一些特定主机,而不是用于完整的 Internet 连接。
答案1
使用VPN 切片设置拆分隧道连接,其中您的 DNS 配置不会被修改,并且只有到少数主机或 IP 子网的流量通过 VPN 路由。
它是为了这个确切的目的:
我只是将 VPN 用于几个特定主机,而不是用于完整的互联网连接。
安装 vpn-slice 后,使用它与 OpenConnect 来替代标准的 vpnc-script(-v --dump
确认其正常工作后,可以将其删除):
$ openconnect --script "vpn-slice -v --dump host.you.need.to.access some.other.host" \
vpn-server.your.company.com
这将设置路由表,以便只有发往这两个特定主机的流量通过 VPN 路由,并将为它们添加条目/etc/hosts
。文档有更多详细信息。
(我是 vpn-slice 的作者,也是 OpenConnect 的主要贡献者之一。)
答案2
创建以下脚本/etc/vpnc/no_resolverupdate.sh
#!/bin/sh
#
#
export INTERNAL_IP4_DNS=
. /usr/share/vpnc-scripts/vpnc-script
使其可执行:
chmod +x /etc/vpnc/no_resolverupdate.sh
然后在连接配置文件中添加一行(此处/etc/vpnc/customer.conf)
echo 'Script /etc/vpnc/no_resolverupdate.sh' >> /etc/vpnc/customer.conf
或者,您可以使用脚本钩子,创建/etc/vpnc/connect.d/no_resolverupdate.sh包含内容
#!/bin/sh
export INTERNAL_IP4_DNS=
适用于每一个连接。
答案3
vpnc-script 看起来像什么这如果是这样,下面的代码就是为什么它会改变你的/etc/resolv.conf
:
if [ -x /sbin/resolvconf ]; then # Optional tool on Debian, Ubuntu, Gentoo
MODIFYRESOLVCONF=modify_resolvconf_manager
RESTORERESOLVCONF=restore_resolvconf_manager
elif [ -x /sbin/modify_resolvconf ]; then # Mandatory tool on Suse earlier than 11.1
MODIFYRESOLVCONF=modify_resolvconf_suse
RESTORERESOLVCONF=restore_resolvconf_suse
else # Generic for any OS
MODIFYRESOLVCONF=modify_resolvconf_generic
RESTORERESOLVCONF=restore_resolvconf_generic
fi
modify_resolvconf_manager() {
NEW_RESOLVCONF=""
for i in $INTERNAL_IP4_DNS; do
NEW_RESOLVCONF="$NEW_RESOLVCONF
nameserver $i"
done
if [ -n "$CISCO_DEF_DOMAIN" ]; then
NEW_RESOLVCONF="$NEW_RESOLVCONF
domain $CISCO_DEF_DOMAIN"
fi
echo "$NEW_RESOLVCONF" | /sbin/resolvconf -a $TUNDEV
}
“肮脏”的方法是使/etc/resolv.conf
文件不可变:
# chattr +i /etc/resolv.conf
正确的方法是编辑你的 vpnc-script 以使其不会改变/etc/resolv.conf
。