Несколько восходящих каналов DHCP - Как проигнорировать DNS и маршрут по умолчанию на всех кроме одного?

Многосетевому полю нужен больше чем один восходящий канал, который будет настроен для DHCP. Это должно проигнорировать маршрут по умолчанию и DNS для всех кроме одного восходящего канала DHCP.

Существует подобный вопрос здесь [файл интерфейсов Debian - игнорирует шлюз и записи DNS от dhcp], но ответы там не решают мою проблему:

  • Редактирование глобальной конфигурации клиента DHCP (/etc/dhcp[3]/dhclient.conf) привело бы к маршруту по умолчанию и DNS, проигнорированному на всех восходящих каналах DHCP.
  • ifmetric предложение только имеет дело с маршрутом, не с DNS.

Кроме того, я надеюсь, что вещи изменились с 2009.

Обратите внимание, что я говорю бездисплейные встроенные системы. NetworkManager не является опцией.

Предпочтительное решение было бы/etc/network/interfaces {.d/} только. Я ищу что-то вроде этого:

auto  eth0
iface eth0 inet dhcp

auto  eth1
iface eth1 inet dhcp
    ignore-dhcp-option routers domain-name-servers domain-name

Приложение:

У нас есть десятки этих полей, установленных в различных средах. Сети не находятся под нашим контролем. В некоторых случаях поля должны сделать DHCP больше чем в одном интерфейсе. Маршрут по умолчанию и DNS не обычно известны нам заранее, и даже если бы они были, то они могли бы изменяться со временем без уведомления. Следовательно мы не можем установить их статически, но должны настроить их через 'основного' клиента DHCP.

1
задан 13 April 2017 в 15:14
4 ответа

(Меня все еще интересуют решения, которые касаются только / etc / network / interfaces {,. D /} , но не / etc / dhcp / . В отсутствие таких решений я использую это.)

В /etc/dhcp*/dhclient.conf удалите параметры маршрутизаторы, серверы доменных имен, имя-домена, поиск домена из глобального запроса запроса . Затем добавьте это (предполагая, что eth0 - это устройство, на котором маршрут по умолчанию и DNS должны игнорироваться , а не ):

interface "eth0" {
    also request routers, domain-name-servers, domain-name, domain-search;
}

Это решение работает как минимум для isc-dhcp-client версии 4.2.2 .dfsg.1-5 + deb70u8, поскольку он поставляется с Debian 7. Я предполагаю, что он работает и для более поздних версий.


Изменить:

  • Подтверждено, что исходная идея работает с небольшими изменениями ( eth0 должен быть заключен в кавычки, и это должно быть запрос , а не требуется )
  • Указывает версию dlclient, которая работает для
0
ответ дан 3 December 2019 в 20:58

Та же проблема решается путем добавления в /etc/dhcp/dhcliet.conf:[1231 impression}[1232pting] и удаления глобального параметра запроса из конфигурации

0
ответ дан 3 December 2019 в 20:58

(превращая мои предыдущие комментарии в ответ)

Обновление:

Добавление сценария, как предложено ниже, действительно приводит к рабочей исходной ситуации. Однако есть сценарии (например, отключение, а затем подключение кабеля), когда dhclient с радостью повторно добавит маршрут по умолчанию, и сценарий не будет запущен, поэтому он больше не будет удален. В результате у вас будет два маршрута по умолчанию.

Короче говоря: этот подход (к сожалению) не работает.

Старый ответ - игнорируйте это

Возникновение в dhclient.conf имеет для меня два недостатка

  • Я должен указать каждый интерфейс, для которого я хочу "нормальное" поведение, вместо того, чтобы указывать, для какого интерфейса я хочу игнорировать значения по умолчанию.
  • isc dhclient (пробовал 4.3.3) будет пытаться получить адрес для каждого интерфейса он «знает о», а указание интерфейсов в dhclient.conf заставляет его «знать об этом» (см. документацию по ключевому слову «interface» на странице руководства dhclient.conf). Поскольку сетевой менеджер и ifup / down ожидают, что dhclient получит адрес только для интерфейса, указанного в командной строке, это приводит к сбивающему с толку поведению.

Поэтому я выбрал сценарий в / etc / network / if-up .d :

#!/bin/sh

if [ x"$IFACE" = x"enp7s4" ]
then
    route del default enp7s4
fi

Недостаток: поскольку он запускается после того, как интерфейс действительно активен, будет (короткий) период времени, когда пакеты могут идти в неправильном направлении. Хорошо спроектированные приложения должны иметь возможность справляться с потерей пакетов, так что это не должно быть проблемой :-). Если вы не хотите, чтобы какие-либо пакеты просачивались в неправильную сеть, вам понадобится правило брандмауэра, чтобы заблокировать их.

0
ответ дан 3 December 2019 в 20:58

Вместо использования inet dhcp вы можете использовать inet manual , чтобы затем указать свой собственный вызов dhclient , которому вы можете передать пользовательский файл dhclient.conf (обратите внимание на аргумент -cf <файл> ):

iface eth0 inet manual
    up /sbin/dhclient -4 -v -pf /run/dhclient.${IFACE}.pid \
        -lf /var/lib/dhcp/dhclient.${IFACE}.leases -I \
        -df /var/lib/dhcp/dhclient6.${IFACE}.leases \
        -cf /etc/dhcp/dhclient_no_routers.conf ${IFACE}
    down /sbin/dhclient -4 -v -r -pf /run/dhclient.${IFACE}.pid \
        -lf /var/lib/dhcp/dhclient.${IFACE}.leases -I \
        -df /var/lib/dhcp/dhclient6.${IFACE}.leases \
        -cf /etc/dhcp/dhclient_no_routers.conf ${IFACE}

В вашем пользовательском dhclient.conf ( / etc /dhcp/dhclient_no_routers.conf в этом случае) затем вы можете установить желаемые параметры DHCP.

Чтобы узнать, что еще делает метод inet dhcp , см. inet.defn в исходном коде (именно отсюда я получил часть вызова dhclient сверху).

2
ответ дан 3 December 2019 в 20:58

Теги

Похожие вопросы