Вопрос или проблема
Как 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
, вы можете настроить параметры таким образом:
-
Установите метрики для каждого интерфейса, который использует DHCP. Это позволит вам назначить один интерфейс в качестве предпочтительного.
-
Настройте статический адрес для одного из интерфейсов, если это необходимо, и также задайте соответствующую метрику.
Пример конфигурации
Вот пример того, как вы можете настроить ваш файл конфигурации:
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
. Это обеспечит корректную маршрутизацию трафика без столкновений и неопределенности. Следуя указанным рекомендациям, вы сможете эффективно управлять сетевым трафиком на вашем сервере.