Как определить шлюз по умолчанию с несколькими интерфейсами DHCP?

Вопрос или проблема

Как ifconfig определяет, какой сетевой интерфейс использовать в качестве основного, когда DHCP назначает маршрут по умолчанию для каждого сетевого адаптера? Это похоже на состояние гонки, и мне нужно более надежное решение. Есть ли настройка в /etc/network/interfaces, которая могла бы определить предпочтительный шлюз? Я читал о “метрике”, но это, похоже, не сработало.

10.04 LTS сервер с двумя NIC на управляемой сети. IP-адреса назначаются через DHCP, который я не управляю.

eth0 назначен частный NAT-адрес; eth1 назначен публичный IP.

При настройке подсети используйте опцию маршрутизаторов в dhcpd.conf

option routers 239.252.197.1;

Из http://linux.die.net/man/8/dhcpd

subnet 239.252.197.0 netmask 255.255.255.0 {
  range 239.252.197.10 239.252.197.250;
  default-lease-time 600 max-lease-time 7200;
  option subnet-mask 255.255.255.0;
  option broadcast-address 239.252.197.255;
  option routers 239.252.197.1;
  option domain-name-servers 239.252.197.2, 239.252.197.3;
  option domain-name "isc.org";
}

Если у вас нет доступа к DHCP-серверу, вы можете сделать это в файле /etc/network/interfaces. Это похоже на статическую настройку, только с использованием DHCP и указанием шлюза.

iface eth0 inet dhcp
    gateway 10.21.8.1

Вы спрашивали: “Как ifconfig определяет, какой сетевой интерфейс использовать в качестве основного, когда DHCP назначает маршрут по умолчанию для каждого NIC?”

По крайней мере, при использовании настройки ifup ifdown /etc/network/interfaces вы назначаете метрику (меньшее число предпочтительнее) каждому интерфейсу, и затем инструмент ifup делает правильное дело, устанавливая единственный маршрут по умолчанию для адреса с наименьшей метрикой.

Здесь мне нужен DHCP-адрес для доступа в интернет и статический адрес для общения с определенным устройством, работающим по фиксированному адресу, вероятно, не в пространстве адресов DHCP, и я не хочу, чтобы кто-либо осуществлял маршрутизацию в это пространство.

Если у вас есть несколько dhcp-интерфейсов, вы сделаете то же самое – назначите им метрику, и та, которая меньше, победит. Когда вы не назначаете им метрику, они получают одно и то же значение по умолчанию, и, следовательно, маршрут по умолчанию не устанавливается.

vi /etc/network/interfaces

iface wlan0 inet manual
iface lo inet loopback

auto lo eth0 eth0:1
iface eth0 inet dhcp
  hwaddress 00:ab:c0:ff:ee:01
  metric 100

iface eth0:1 inet static
  hwaddress 00:ac:c0:ff:ee:01
  metric 200
  address 10.250.0.2
  netmask 255.255.255.0

Затем выполните ifup -a
Мы видим:

root@STA01:~# ip r
default via 10.1.4.1 dev eth0 
10.1.4.0/24 dev eth0 proto kernel scope link src 10.1.4.101 
10.250.0.0/24 dev eth0 proto kernel scope link src 10.250.0.2

Ответ или решение

Определение маршрутизатора по умолчанию в условиях нескольких интерфейсов DHCP на сервере с Ubuntu 10.04 LTS может быть достаточно сложной задачей. При наличии нескольких сетевых интерфейсов, каждый из которых получает настройки по DHCP, необходимо обеспечить надежное определение интерфейса, который будет использоваться в качестве предпочтительного маршрута по умолчанию.

Как ifconfig и ifup определяют, какой интерфейс использовать в качестве маршрута по умолчанию

Когда вы используете ifup или ifdown для настройки сетевых интерфейсов на основе DHCP, оба инструмента присваивают каждому интерфейсу значение metric. Это значение указывает на приоритет маршрута: чем меньше значение, тем выше приоритет.

При отсутствии явных указаний для метрики у каждого интерфейса будет назначено одинаковое значение, что может привести к ситуации, когда не получится установить маршрут по умолчанию, так как система не сможет определить, какой интерфейс выбирать.

Решение проблемы с помощью /etc/network/interfaces

Если у вас есть доступ к файлу конфигурации /etc/network/interfaces, вы можете настроить параметры таким образом:

  1. Установите метрики для каждого интерфейса, который использует DHCP. Это позволит вам назначить один интерфейс в качестве предпочтительного.

  2. Настройте статический адрес для одного из интерфейсов, если это необходимо, и также задайте соответствующую метрику.

Пример конфигурации

Вот пример того, как вы можете настроить ваш файл конфигурации:

iface eth0 inet dhcp
    hwaddress 00:ab:c0:ff:ee:01
    metric 100

iface eth1 inet dhcp
    hwaddress 00:ab:c0:ff:ee:02
    metric 200

В этом примере интерфейс eth0 получает более низкую метрику (100), что делает его предпочтительным для маршрутизации по умолчанию, в то время как eth1 имеет более высокую метрику (200) и будет использоваться для нижеприоритетных маршрутов.

Проверка маршрутов

После того как вы внесли изменения, примените их с помощью команды:

sudo ifup -a

Затем выполните команду для проверки текущих маршрутов:

ip r

Этот вывод покажет, какой интерфейс используется в качестве маршрута по умолчанию.

Заключение

Таким образом, для надежного определения маршрута по умолчанию в условиях наличия нескольких интерфейсов DHCP необходимо использовать метрики в конфигурации /etc/network/interfaces. Это обеспечит корректную маршрутизацию трафика без столкновений и неопределенности. Следуя указанным рекомендациям, вы сможете эффективно управлять сетевым трафиком на вашем сервере.

Оцените материал
Добавить комментарий

Капча загружается...