Вопрос или проблема
У меня есть вопрос относительно RedHat 6 Enterprise Network Manager (NM):
Мой Linux подключен к двум сетевым интерфейсам:
1 – eth0: обычный Ethernet, подключенный к корпоративной LAN
2 – eth1: USB-модем, подключенный к сотовой сети (CDC-ECM)
Интерфейс eth0 постоянно подключен, а интерфейс eth1 не постоянный (подключение может быть временным).
Когда оба подключены, NM отдает предпочтение eth0. Это значит, что маршрут по умолчанию (0.0.0.0) всегда определяется через него.
Я хочу изменить политику NM так, чтобы она отдавала предпочтение eth1. Когда интерфейс eth1 не подключен, маршрут по умолчанию должен идти через интерфейс eth0, а когда eth1 подключен — через eth1.
Я искал в интернете, как это сделать, играл со скриптами NM и файлами ifcfg-eth0 / ifcfg-eth1 (пробовал DEFROUTE и другие опции), но безуспешно.
Может кто-нибудь подсказать, как правильно это сделать с помощью NM?
Редактировать: добавлено решение автора из комментариев:
- Удалить eth0 (проводной) из NM
- NM_CONTROLLED=no
- Оставить eth1 (беспроводной) под контролем.
- По умолчанию, когда NM_CONTROLLED не указано
- Установить METRIC=20 для eth1
- Получается 2 маршрута по умолчанию, где eth1 имеет приоритет
Ответ:
Network Manager может всегда выбирать беспроводное или проводное подключение в качестве основного (основываясь на других вопросах здесь), что, кажется, включает взаимодействия с метрикой маршрута и dhcp, рекламными объявлениями маршрутизатора (где NM следовал метрике 1), состоянием интерфейса и специфическими особенностями RedHat.
Предполагая, что вы его используете: DHCP может сбросить ваш маршрут к «лучшему» по метрике маршрута¹. Более высокие значения метрики являются более «дорогими», поэтому предпочитаются менее затратные метрики. В списке Network Manager здесь отмечено, что метрики dhcp для беспроводных сетей наказываются +100, и разработчики NM утверждают, что NM должен просто выбирать правильный маршрут, но также говорят, что метрики могут быть методом лучшего устройства. Не уверен, что это применимо к вашему eth1, но вы можете это контролировать:
Поменяв числа (10 и 20) из этого ответа для ваших интерфейсов, я получаю:
$ sudo vi /etc/sysconfig/network-scripts/ifcfg-eth0
METRIC=20
$ sudo vi /etc/sysconfig/network-scripts/ifcfg-eth1
METRIC=10
Этот ответ говорит, что это должно предпочесть беспроводное и выполнить плавное переключение между интерфейсами.
Если вы хотите, чтобы NM выбирал так, как могут намереваться разработчики, ключевые слова интерфейсов GMambaG также рассматриваются в документации RedHat для статических маршрутов, которые отмечают неожиданные проблемы при использовании множественных шлюзов + GATEWAYDEV. Чтобы протестировать это, запустите оба интерфейса и попробуйте возобновить работу после удаления eth1. Если у вас возникнут проблемы (например, прерывистые таймауты), вы сможете восстановиться, удалив ваши изменения и перезапустив сетевые службы:
$ sudo service network restart
Если ничего не поможет, рекламные объявления маршрутизатора (ICMP типы 9 и 10, по моему мнению) могут влиять на ваши таблицы маршрутов; согласуйте с сетевым администратором перед тем, как пытаться их блокировать.
Редактировать: Уменьшена длина текста этого ответа, решение автора размещено выше.
¹ Если вы не используете DHCP, у вас будет ручной шлюз. Эта статья предлагает использовать NM_CONTROLLED=”no”, чтобы предотвратить автоматическое переключение NM на шлюз этого интерфейса.
Red Hat использует последний включенный интерфейс в качестве устройства шлюза по умолчанию.
Чтобы установить eth1
как шлюз по умолчанию, добавьте это в /etc/sysconfig/network
:
GATEWAYDEV=eth1
См.: https://access.redhat.com/solutions/41459
Это должно обрабатываться при каждом вызове ifup
. Вы можете проверить маршруты с помощью ip route show
Ответ или решение
Для специалистов в области информационных технологий, работающих с Red Hat Enterprise Linux 6 и сталкивающихся с управлением сетевыми интерфейсами посредством Network Manager (NM), важной задачей является корректная настройка приоритета сетевых интерфейсов. Рассмотрим задачу перенастройки приоритета интерфейсов, когда имеется два активных подключения — одно постоянное через LAN и другое временное через сотовую сеть посредством USB-адаптера.
Теория
В стандартной конфигурации Network Manager на Red Hat 6 взаимодействует с несколькими сетевыми интерфейсами, устанавливая приоритеты на основе различных факторов, таких как метрики маршрутов и DHCP. Устройство с приоритетом получает возможность установки маршрута по умолчанию, что определяет, какой интерфейс будет использоваться для исходящего интернет-трафика. Вопрос в том, как поменять политику NM так, чтобы временное подключение (например, сотовая сеть через USB) имело более высокий приоритет, когда доступно, а постоянное LAN-подключение использовалось, когда временное недоступно.
Пример
Предположим, у вас настроена система следующим образом:
- eth0: стандартное подключение через Ethernet, подключенное к корпоративной локальной сети.
- eth1: подключение через USB-адаптер, связанный с сотовой сетью.
По умолчанию NM устанавливает eth0 как интерфейс с более высоким приоритетом, если оба интерфейса активны.
Применение
Чтобы изменить настройки приоритета, следуйте этим шагам:
-
Конфигурация метрик маршрута:
Метрики маршрута позволяют настроить предпочтительность использования того или иного интерфейса. Ваша цель — установить метрику eth1 ниже, чем для eth0, чтобы устройства принимали решение в пользу eth1, если оно доступно.Изменение конфигурационных файлов:
$ sudo vi /etc/sysconfig/network-scripts/ifcfg-eth0 METRIC=20
$ sudo vi /etc/sysconfig/network-scripts/ifcfg-eth1 METRIC=10
Эти метрики маршрутов гарантируют, что eth1 будет использоваться в качестве основного интерфейса, когда оно активно, а при его отключении использование переключится на eth0.
-
Исключение контроля NM над eth0:
Настройте Network Manager так, чтобы он не управлял eth0.$ sudo vi /etc/sysconfig/network-scripts/ifcfg-eth0 NM_CONTROLLED=no
Это обеспечит, что NM не изменяет настройки маршрутизации для eth0, и вы сможете манипулировать ими напрямую и более детерминировано.
-
Указание GATEWAYDEV в глобальной конфигурации:
Если требуется, чтобы eth1 был всегда интерфейсом по умолчанию при наличии двух активных подключений, укажите это в глобальном конфигурационном файле сети.$ sudo vi /etc/sysconfig/network GATEWAYDEV=eth1
Это изменение подскажет системе использовать eth1 в качестве основного устройства шлюза при его подключении.
-
Проверка и тестирование:
После применения изменений обязательно перезапустите сетевые службы, чтобы настройки вступили в силу:$ sudo service network restart
Проверяйте маршруты с помощью команды:
$ ip route show
Это подтвердит, какие маршруты установлены и какой интерфейс в данный момент использует маршрут по умолчанию.
-
Учёт взаимодействия с DHCP:
Обратите внимание на потенциальное влияние DHCP на маршрутизацию. В случае его использования, сервер может перенастроить маршруты в зависимости от предоставленных параметров, таких как метрики маршрутов. Если возникают нежелательные изменения, подумайте о переходе на статические маршруты для лучшего контроля.
Следуя этим шагам, вы сможете эффективно управлять сетевыми интерфейсами в Red Hat Enterprise Linux 6 и гарантировать, что более подходящий интерфейс используется по умолчанию, когда это возможно. Настройки, связанные с контролем Network Manager и указанием GATEWAYDEV, являются особенно критичными для успеха данной конфигурации, так как они напрямую влияют на поведение системы при изменении состояния сетевых интерфейсов.