DHCP перезаписывает Cisco VPN resolv.conf в Linux
Вопрос
Я использую компьютер с Ubuntu 8.04 (x86_64) для подключения к Cisco VPN моего работодателя.(Клиент не компилировался из коробки, но я нашел патчи для обновления клиента для компиляции на ядрах, выпущенных за последние два года.) Все это работает отлично, пока мой DHCP-клиент не решит продлить аренду и не обновит /etc/resolv.conf, заменив DNS-серверы, специфичные для VPN, моими общими сетевыми серверами.
Есть ли хороший способ запретить моему DHCP-клиенту обновлять /etc/resolv.conf, пока моя VPN активна?
Решение
Если вы используете Ubuntu по умолчанию с NetworkManager, попробуйте удалить клиент CiscoVPN и использовать плагин NetworkManager vpnc для подключения к Cisco VPN.Это позволит избежать всех проблем, поскольку NetworkManager узнает о вашем VPN-соединении.
Другие советы
Если вы работаете без NetworkManager, обрабатывающего соединения, используйте пакет resolvconf в качестве посредника для программ, настраивающих /etc/resolv.conf: sudo apt-get install resolvconf
Если вы используете NetworkManager, он сделает это за вас, поэтому избавьтесь от пакета resolvconf: sudo apt-get remove resolvconf
Я узнал об этом при настройке VPN в Ubuntu на прошлой неделе.A search for vpn resolv.conf
на ubuntuforums.org есть 250 результатов, многие из которых очень похожи!
Я бы посоветовал последовать совету @Sean, но если по какой-либо причине это не удастся, можно настроить dhclient так, чтобы он не запрашивал DNS-серверы в /etc/dhcp3/dhclient.conf.
chattr +i /etc/resolv.conf должен работать.(-i, чтобы отменить)
Но лучше всего настроить dhclient.conf:https://calomel.org/dhclient.htmlПосмотрите на заменяющие серверы доменных имен и доменное имя.
Также посмотрите на «Отправить имя хоста»; Если он работает на вашем рабочем месте, у вас будет крутое имя хоста для вашего ПК, а не какое -то странное имя, которое назначают серверы DHCP.
Кажется, vpnc поступает правильно в отношении концентратора Cisco моего работодателя.Я включаю и выключаю VPN, и вроде все обновляется гладко.
Демону DHCPclient можно приказать не обновлять resolv.conf с помощью переключателя командной строки.(-r я думаю, в зависимости от клиента)
Это менее динамично, поскольку вам придется перезапускать/перенастраивать DHCP при подключении, но это не слишком сложно.Точно так же вы можете просто остановить службу, но при этом вы можете потерять свой IP-адрес, поэтому я бы не рекомендовал это делать.
Альтернативно вы можете запустить dhcpclient из задания cron, добавив соответствующие проверки процесса.
Эта проблема гораздо более заметна в сетях с низким сроком аренды DHCP.На панели запуска пакета dhcp3 Ubuntu обнаружена ошибка:
https://bugs.launchpad.net/ubuntu/+source/dhcp3/+bug/90681
В описание которого входит этот патч:
--- /sbin/dhclient-script.orig 2007-03-08 19:19:56.000000000 +0000
+++ /sbin/dhclient-script 2007-03-08 19:19:46.000000000 +0000
@@ -13,6 +13,10 @@
# The alias handling in here probably still sucks. -mdz
make_resolv_conf() {
+ # don't overwrite resolv.conf at RENEW time, since a VPN/PPTP tunnel may
+ # have updated it with remote DNS servers
+ [ "$reason" = "RENEW" ] && return
+
if [ -n "$new_domain_name" -o -n "$new_domain_name_servers" ]; then
# Find out whether we are going to mount / rw
exec 9>&0 </etc/fstab
Это изменение на /sbin/dhcp-script
запрещает DHCP-клиенту перезаписывать /etc/resolv.conf
когда он продлит аренду.