Назад | Перейти на главную страницу

Как я могу запретить openconnect изменять /etc/resolv.conf?

Когда я запускаю openconnect (со скриптом vpnc по умолчанию), он меняется /etc/resolv.conf и этого действительно не должно быть. Я просто использую VPN для нескольких конкретных хостов, а не для полного подключения к Интернету.

Создайте следующий скрипт /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

Как выглядит vpnc-скрипт этот? Если да, то приведенный ниже код объясняет, почему он меняет ваш /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-скрипт, чтобы он не изменял /etc/resolv.conf.

Использовать vpn-slice для настройки раздельного туннельного соединения, при котором ваша конфигурация DNS не изменяется, и только трафик к нескольким хостам или IP-подсетям маршрутизируется через VPN.

Он был создан для именно эта цель:

Я просто использую VPN для нескольких конкретных хостов, а не для полного подключения к Интернету.

После того, как вы установили vpn-slice, используйте его с OpenConnect в качестве замены стандартного vpnc-скрипта (вы можете удалить -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.)