我怎样才能阻止 openconnect 更改 /etc/resolv.conf?

我怎样才能阻止 openconnect 更改 /etc/resolv.conf?

当我运行 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

相关内容