Я читал различные страницы о том, как настроить сеть для xen. К сожалению, ни один из них не имеет полного примера конфигурации. Они ясно показывают, как должен выглядеть раздел xenbr0, но не как вы должны изменить eth0 после упоминания:
Примечание! Конфигурация IP мостового устройства должна заменить конфигурацию IP базового интерфейса, то есть удалить настройки IP из eth0 и переместить их в интерфейс моста. eth0 будет функционировать исключительно как физическая линия связи от моста, поэтому на нем не может быть никаких настроек IP (L3)!
blockquote>Я перепробовал много конфигураций, которые все не работают (после запуска /etc/init.d/networking перезапуска нет нормального доступа к netowork и не может войти или выйти ssh).
Вот мой текущий конфиг:
auto lo iface lo inet loopback auto xenbr0 iface xenbr0 inet static bridge_ports eth0 address 10.0.0.3 netmask 255.0.0.0 broadcast 10.255.255.255 gateway 10.0.0.1 auto eth0 iface eth0 inet manual
Возможно, это правильно, и мне просто нужно установить некоторые правила пересылки iptables? Я попытался запустить команду
sudo iptables -I FORWARD -m physdev --physdev-is-bridged -j ACCEPT
, но получил сообщение об ошибке, что --physdev-is-bridged не является опознанной опцией.Отладочный вывод перезапуска сети дает следующий вывод:
Reconfiguring network interfaces... Waiting for xenbr0 to get ready (MAXWAIT is 32 seconds). RTNETLINK answers: No such process Failed to bring up xenbr0 ssh stop/waiting ssh start/running, process 3775
Я проверил, что xenbr0 уже существует, потому что когда я пытаюсь создать мост с таким именем, brctl говорит мне, что это не может создать как уже существующее.
Сначала определите eth0, без настройте шлюз и IP. (В противном случае у вас будут возникать ошибки «RTNETLINK answers: файл существует», когда система попытается создать маршрут для интерфейса, поскольку мост попытается создать маршрут с тем же приоритетом и шлюзом, и он недостаточно умен, чтобы понять, что они ' в любом случае идентичны.)
auto lo
iface lo inet loopback
auto eth0
iface eth0 inet manual
auto xenbr0
iface xenbr0 inet static
address 192.168.1.10
netmask 255.255.255.0
gateway 192.168.1.1
bridge_ports eth0
#allow-hotplug xenbr0 #Uncomment if using vSwitches
В качестве альтернативы, ваш мост может использовать DHCP:
auto lo
iface lo inet loopback
auto eth0
iface eth0 inet manual
auto xenbr0
iface xenbr0 inet dhcp
bridge_ports eth0
#allow-hotplug xenbr0 #Uncomment if using vSwitches
По завершении перезагрузите компьютер. В противном случае, поскольку вы меняли eth0
, но не устанавливали новый IP-адрес, ваш мост может работать некорректно, даже если вы используете команду ifup
/ перезапустите сеть. Это потому, что eth0
может случайно сохранить свой IP-адрес.
Наконец, настройте сетевые интерфейсы вашей гостевой ОС, как если бы это был любой другой физический хост в вашей сети. (В примере 1 вы можете использовать 192.168.1.11.) В этот момент другие устройства в вашей сети должны быть в состоянии связаться с гостем.
ping 192.168.1.11
Нет необходимости в iptables или IP-пересылке (sysctl.conf). STP необходим только , если ваша сеть поддерживает STP, и вам нужно избегать петель сети 2-го уровня, и вы не хотите обрабатывать это вручную. (т.е. малым сетям не понадобятся bridge_stp, bridge_fd или bridge_maxwait.)
В конце концов, я просто создал интерфейс и переадресовал через него пакеты с некоторыми правилами iptables, что, похоже, работает для меня. Это НЕ использует параметр 'bridge', который, как кажется, предлагают все уроки, поэтому я не знаю, есть ли фатальный недостаток?
auto lo
iface lo inet loopback
auto xenbr0
iface xenbr0 inet static
bridge_ports none
address 192.168.2.1
netmask 255.255.255.0
network 192.168.2.0
broadcast 192.168.2.255
gateway 10.0.0.3
# The primary network interface
auto eth0
iface eth0 inet static
address 10.0.0.3
netmask 255.0.0.0
network 10.0.0.0
broadcast 10.255.255.255
gateway 10.0.0.1
# dns-* options are implemented by the resolvconf package, if installed
dns-nameservers 8.8.8.8
Вам нужно отредактировать /etc/sysctl.conf и и раскомментируйте следующую строку:
net.ipv4.ip_forward=1
Затем вам нужно создать скрипт для редактирования iptables для пересылки пакетов:
sudo /sbin/iptables --table nat --append POSTROUTING --out-interface eth0 -j MASQUERADE
sudo /sbin/iptables --append FORWARD --in-interface xenbr0 -j ACCEPT
return 0
Затем вам нужно убедиться, что скрипт вызывается Файл rc.local:
sudo vi /etc/rc.local
Добавьте следующую строку:
/bin/sh <path-to-script-you-just-created-here>
Затем перезагрузите компьютер, чтобы все настройки вступили в силу.
Как вы можете заметить, я настроил его так, чтобы виртуальные машины использовали адресную подсеть 192.168.2.x, в то время как внешняя локальная сеть находится на 10.xxx, что, вероятно, отличается от того, что большинство людей захотят, поэтому придется редактировать их в соответствии с вашими личными потребностями.
Обновление
Позже я понял, что отсутствие моста означает, что я не могу получить доступ к своим виртуальным машинам из-за пределов сети (то есть я не могу напрямую подключиться к ним из дома или запустить веб-сайт). от них и т. д.)
Использование конфигурации сети, как это работает:
# The loopback network interface
auto lo
iface lo inet loopback
auto eth0
iface eth0 inet manual
auto xenbr0
iface xenbr0 inet static
address 23.29.115.142
netmask 255.255.255.248
network 23.29.115.136
broadcast 23.29.115.143
gateway 23.29.115.137
bridge_ports eth0
bridge_stp off
bridge_fd 0
bridge_maxwait 0
Я предполагаю, что те дополнительные опции моста заставили его работать, или, возможно, порядок, в котором интерфейсы были перечислены в файле (на этот раз перед мостом eth0)