如何阻止 openconnect 更改 /etc/resolv.conf?

chx*_*chx 9 vpn cisco-vpn

当我运行 openconnect(使用默认的 vpnc 脚本)时,它会发生变化/etc/resolv.conf,而且真的不应该这样做。我只是将 VPN 用于一些特定的主机,而不是用于完整的 Internet 连接。

小智 11

创建以下脚本/etc/vpnc/no_resolverupdate.sh

#!/bin/sh
#
#
export INTERNAL_IP4_DNS=

. /usr/share/vpnc-scripts/vpnc-script
Run Code Online (Sandbox Code Playgroud)

使其可执行:

chmod +x /etc/vpnc/no_resolverupdate.sh
Run Code Online (Sandbox Code Playgroud)

然后在您的连接配置文件中添加一行(此处为/etc/vpnc/customer.conf

echo 'Script /etc/vpnc/no_resolverupdate.sh' >> /etc/vpnc/customer.conf
Run Code Online (Sandbox Code Playgroud)


Dan*_*ski 8

使用vpn-slice设置分割隧道连接,其中您的 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
Run Code Online (Sandbox Code Playgroud)

这将设置路由表,以便仅通过 VPN 路由到这两个特定主机的流量,并将它们的条目添加到/etc/hosts. 文档有更多详细信息。

(我是 vpn-slice 的作者,也是 OpenConnect 的主要贡献者之一。)

  • 感谢您的贡献!这个问题早于 vpn-slice 好几年了,但现在有了这样的工具真是太棒了! (2认同)
  • 这正是我一直在寻找的,谢谢!另外,现在我的机器在登录 VPN 时也不会转储我的 ssh 会话。 (2认同)

qua*_*nta 7

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
}
Run Code Online (Sandbox Code Playgroud)

“脏”的方法是使/etc/resolv.conf文件不可变:

# chattr +i /etc/resolv.conf
Run Code Online (Sandbox Code Playgroud)

正确的方法是编辑您的 vpnc 脚本,使其不应该更改/etc/resolv.conf.