Многосетевому полю нужен больше чем один восходящий канал, который будет настроен для DHCP. Это должно проигнорировать маршрут по умолчанию и DNS для всех кроме одного восходящего канала DHCP.
Существует подобный вопрос здесь [файл интерфейсов Debian - игнорирует шлюз и записи 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.
(Меня все еще интересуют решения, которые касаются только / 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
должен быть заключен в кавычки, и это должно быть запрос
, а не требуется
) Та же проблема решается путем добавления в /etc/dhcp/dhcliet.conf:[1231 impression}[1232pting] и удаления глобального параметра запроса
из конфигурации
(превращая мои предыдущие комментарии в ответ)
Обновление:
Добавление сценария, как предложено ниже, действительно приводит к рабочей исходной ситуации. Однако есть сценарии (например, отключение, а затем подключение кабеля), когда dhclient с радостью повторно добавит маршрут по умолчанию, и сценарий не будет запущен, поэтому он больше не будет удален. В результате у вас будет два маршрута по умолчанию.
Короче говоря: этот подход (к сожалению) не работает.
Старый ответ - игнорируйте это
Возникновение в dhclient.conf имеет для меня два недостатка
Поэтому я выбрал сценарий в / etc / network / if-up .d
:
#!/bin/sh
if [ x"$IFACE" = x"enp7s4" ]
then
route del default enp7s4
fi
Недостаток: поскольку он запускается после того, как интерфейс действительно активен, будет (короткий) период времени, когда пакеты могут идти в неправильном направлении. Хорошо спроектированные приложения должны иметь возможность справляться с потерей пакетов, так что это не должно быть проблемой :-). Если вы не хотите, чтобы какие-либо пакеты просачивались в неправильную сеть, вам понадобится правило брандмауэра, чтобы заблокировать их.
Вместо использования 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
сверху).