Всякий раз, когда я настраиваю br0 на автоматический запуск при загрузке, это приводит к зависанию системы — обычно на строке, которая говорит что-то вроде «ожидание готовности br0 в течение 2 секунд» или «привязан к xxxx для br0 — обновление в xxxx» (т. е. во время последовательности загрузки, до инициализации каких-либо графических интерфейсов).
Использую Debian Sid с KVM и virt-manager. У меня нет проблем с запуском моста после загрузки, и он работает как часы. Проблема в том, что я хочу, чтобы он автоматически подключался к br0, как и обычный интерфейс. Я не думаю, что это такая уж нелепая идея, но, опять же, у меня нет большого опыта в работе с сетями Linux.
Я перепробовал почти все конфигурации /etc/network/interfaces, которые я нашел, и все они вызывают зависание при загрузке или не запускают br0 автоматически. Единственное, что я не исследовал подробно, это команды "pre-up" и "post-down", которые я иногда видел, но у меня сложилось впечатление, что они не обязательно нужны. Поскольку система полностью зависает и отказывается загружаться дальше, довольно мучительно каждый раз заставлять ее перезапускаться, загружать спасательный дистрибутив и удалять любую конфигурацию в файле interfaces.
Мне удалось успешно настроить его на автоматический запуск, поместив "ifup br0" в /etc/rc.local, но это вызывает несколько других проблем, таких как отсутствие подключения к общим папкам и отсутствие запуска VNC. Хотя я еще не совсем на этой стадии, я беспокоюсь, что мои гости не смогут загрузиться, как только я настрою их на автоматический запуск, если я использую этот метод.
решение1
Это кажется не решением, но, кажется, работает. Я сделал два файла интерфейсов - interfaces_eth0 и interfaces_br0. Затем я добавил
cp "/etc/network/interfaces_br0" "/etc/network/interfaces"
service networking restart
cp "/etc/network/interfaces_eth0" "/etc/network/interfaces"
в /etc/rc.local
Debian загрузится, мои общие папки подключатся, а мои гости получат доступ к сети, даже если настроен автоматический запуск.
решение2
Другое решение, которое, кажется, работает до сих пор, включает следующее. Я создал скрипт в /etc/init.d/network_fix, который содержит следующее:
### BEGIN INIT INFO
# Provides: network_fix
# Required-Start: $remote_fs $syslog $network
# Required-Stop: $remote_fs $syslog $network
# Default-Start: 2 3 4 5
# Default-Stop: 0 1 6
# Short-Description: Fix network for KVM
# Description: Resolve bridging bug causing hang on boot.
### END INIT INFO
#! /bin/sh
# /etc/init.d/blah
#
cp -f /etc/network/interfaces_br0 /etc/network/interfaces
ifdown br0 eth0 eth1
ifup br0
cp -f /etc/network/interfaces_none /etc/network/interfaces
exit 0
А затем обновил свой init.d с помощью update-rc.d
. /etc/network/interfaces_none
содержит только loopback и /etc/network/interfaces_br0
содержит следующее:
auto lo
iface lo inet loopback
auto eth1
allow-hotplug eth1
iface eth1 inet dhcp
auto br0
iface br0 inet dhcp
bridge_ports eth1
bridge_stp off
На этом этапе я добавил дополнительную сетевую карту, поэтому eth1
.