Как запустить сетевой мост при загрузке

12839
Peter Turner

Всякий раз, когда я запускаю свой компьютер, мне нужно перезапускать сетевой сервис (используя перезапуск сервисной сети), чтобы включить мой мост (br0). Как заставить Linux делать это при запуске компьютера, чтобы мне не приходилось делать это вручную?

Сеть запускается, другие 2 адаптера Ethernet работают, когда я загружаюсь.

5
Как вы "перезапускаете сетевой сервис", чтобы включить мост? Вероятно, в ваших сценариях запуска что-то отсутствует или вышло из строя, если мы знаем, что вы делаете, чтобы приступить к работе после запуска, мы могли бы подсказать вам, что лучше проверить / изменить. David Spillett 14 лет назад 0
Я перезагружаю сеть, выполняя «сервисный перезапуск сети» сетевого сценария, каким-то образом знает, как запустить адаптер моста, когда Linux работает, но не при загрузке. Peter Turner 14 лет назад 0
Привет, Пит, если ты получишь секунду, можешь принять мой ответ? Я думаю, что это лучший вариант для вашей проблемы. Благодарю. slm 11 лет назад 0

4 ответа на вопрос

4
slm

Похоже, что это проблема с порядком, в котором приводятся интерфейсы. В /etc/init.d/networkскрипте инициализации есть бит, который создает все интерфейсы:

# find all the interfaces besides loopback. # ignore aliases, alternative configurations, and editor backup files interfaces=$(ls ifcfg* | \ LANG=C sed -e "$__sed_discard_ignored_files" \ -e '/\(ifcfg-lo\|:\|ifcfg-.*-range\)/d' \ -e '/ifcfg-[A-Za-z0-9\._-]\+$/ { s/^ifcfg-//g;s/[0-9]/ &/}' | \ LANG=C sort -k 1,1 -k 2n | \ LANG=C sed 's/ //') 

Вывод этой команды создает этот список:

br0 eth0 

Я не нашел решение этой проблемы, кроме как включать ifup br0в /etc/rc.localсценарии вручную принудительно br0вверх ПОСЛЕeth0 устройство было доведено до.

РЕДАКТИРОВАТЬ

Я только что создал /etc/sysconfig/network-scripts/ifcfg-br0подобное и после перезагрузки имел br0 start ПОСЛЕ eth0!

# ifcfg-br0 DEVICE=br0 TYPE=Bridge BOOTPROTO=static ONBOOT=yes DELAY=0 NM_CONTROLLED=no STP=off IPADDR=192.168.1.200 GATEWAY=192.168.1.1 NETMASK=255.255.255.0 

пример /etc/sysconfig/network-scripts/ifcfg-eth0

# ifcfg-eth0 DEVICE=eth0 #BOOTPROTO=dhcp HWADDR=BC:AE:C5:34:C9:E8 ONBOOT=yes BRIDGE=br0 NM_CONTROLLED=no 

С такими файлами я теперь вижу сетевые устройства, которые выглядят так:

Bringing up interface eth0 [ OK ] Bringing up interface br0 [ OK ] 
1

Убедитесь, что услуга «сеть» включена. вы можете использовать GUI Services (system-config-services) или chkconfig, если вы знакомы с этим. Это решило ту же проблему для меня.

1
Chris Smith

У меня была такая же проблема на физическом компьютере под управлением Centos 7.3 x86_64, и я смог ее решить, сначала переместив физический адаптер в другой слот PCI-X на материнской плате, а затем выполнив все следующие действия:

Удалите файл конфигурации интерфейса моста:

rm -f /etc/sysconfig/network-scripts/ifcfg-br0 

Удалите файл конфигурации подчиненного интерфейса:

rm -f /etc/sysconfig/network-scripts/ifcfg-enp6s0f0 

Где enp6s0f0 было исходным именем подчиненного интерфейса и было единственным подчиненным интерфейсом, назначенным мосту br0

Обязательно полностью удалите исходный мост, убедившись, что все его следы исчезли (brctl show) не должны перечислять интерфейс моста br0.

Отключить мост:

ifconfig br0 down

Отключить раб:

ifdown enp6s0f0 ifconfig enp6s0f0 down 

Остановите сетевой сервис:

systemctl stop network.service 

При необходимости удалите мост вручную: (в моем случае так и было.)

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

brctl delif br0 enp6s0f0 

Как только все подчиненные интерфейсы были удалены, сам мост можно удалить.

brctl delbr br0 

Убедитесь, что остальные файлы конфигурации не имеют ссылки на br0:

grep -i br0 /etc/sysconfig/network-scripts/ifcfg-* 

Не должен возвращать никаких результатов

В моем случае имя нового интерфейса, основанное на перемещении карты вверх на один слот, теперь называется enp5s0f0.

Запустите интерфейс, а затем подтвердите с помощью ethtool или «ip link», которая должна сообщить, что для интерфейса обнаружена ссылка.

[root@phaser ~]# ifconfig enp5s0f0 up [root@phaser ~]# ethtool enp5s0f0 Settings for enp5s0f0: Supported ports: [ TP ] Supported link modes: 10baseT/Half 10baseT/Full 100baseT/Half 100baseT/Full 1000baseT/Full Supported pause frame use: No Supports auto-negotiation: Yes Advertised link modes: 10baseT/Half 10baseT/Full 100baseT/Half 100baseT/Full 1000baseT/Full Advertised pause frame use: No Advertised auto-negotiation: Yes Speed: 1000Mb/s Duplex: Full Port: Twisted Pair PHYAD: 1 Transceiver: internal Auto-negotiation: on MDI-X: on (auto) Supports Wake-on: pumbg Wake-on: d Current message level: 0x00000007 (7) drv probe link Link detected: yes 

Используйте nmcli для создания нового моста.
nmcli запишет необходимые файлы конфигурации интерфейса в / etc / sysconfig / network-scripts /

Создайте интерфейс моста:

nmcli conn add type bridge ifname br0 ip4 10.0.0.16/24 gw4 10.0.0.1 

Добавьте подчиненный интерфейс к мосту:

nmcli conn add type bridge-slave ifname enp5s0f0 master bridge-br0 

Отключите протокол связующего дерева, если в сети уже есть мастер связующего дерева:

nmcli con modify bridge-br0 bridge.stp no 

Убедитесь, что мост настроен на загрузку с помощью nmcli:

nmcli con mod br0 connection.autoconnect yes 

На этом этапе я могу запустить и остановить сетевую службу успешно, и при перезагрузке интерфейс моста запускается правильно.

Примечания по устранению неисправностей:

Я подозреваю, что пропуск строки:

TYPE=Bridge 

из моего исходного файла конфигурации для br0, возможно, привело к этой проблеме. Я также подозреваю, что неиспользование nmcli и ручное создание файлов интерфейса моста также вызывало проблемы. Это может быть потому, что NetworkManager все еще пытается управлять интерфейсом. Это можно подтвердить с помощью:

nmcli dev status 

Эта команда отобразит таблицу, в которой перечислены все сетевые интерфейсы вместе с их STATE. Если Network Manager не контролирует интерфейс, его STATE будет указан как неуправляемый. Любое другое значение указывает, что интерфейс находится под управлением Network Manager.

Если вы в конечном итоге вручную измените файл ifcfg в / etc / sysconfig / network-scripts, обязательно сообщите менеджеру сети об изменениях с перезагрузкой.

nmcli con reload 

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

Я нашел следующее сообщение: Как я могу запретить Network Manager контролировать интерфейс?

Для тех, кто не хочет использовать NetworkManager в RHEL / CENTOS 7.x

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

ls -lZ показал, что автоматически созданные ifcfg-файлы имеют следующий контекст:

system_u: object_r: net_conf_t: s0

В то время как файлы, которые я создал, имели в качестве пользователя undefined_u.

Я использовал chcon, чтобы установить для пользователя system_u

chcon system_u:object_r:net_conf_t:s0 ifcfg-<filename> 

Еще одно наблюдение заключается в том, что при поднятии или отключении нового интерфейса моста теперь systemd правильно сообщает, что интерфейс подключен и отключен. До внесения этих изменений при использовании моих собственных файлов конфигурации, написанных мной, systemd, похоже, не знал интерфейса. Было бы показать, что интерфейс был настроен, но не подключен. Несмотря на обнаружение ссылки на ethtool.

0
Ahmad Kamal EL-Saman

У меня та же проблема, но я обнаружил, что написал имя интерфейса моста / etc / sysconfig / network-scripts / br0 вместо / etc / sysconfig / network-scripts / ifcfg-br0

Я пришел к нему, когда открыл « /etc/init.d/network » и обнаружил, что скрипт загружает только файлы, начинающиеся с « ifcfg- »