qemu + ethernet bridge (как настроить смотрящую в реальный ethernet виртуалку?)

Обсуждение настройки и работы сервисов, резервирования, сетевых настроек и вопросов безопасности ОС.

Модераторы: SLEDopit, Модераторы разделов

Аватара пользователя
infra_hdc
Сообщения: 376
ОС: GNU/Linux

qemu + ethernet bridge

Сообщение infra_hdc »

1. Постановка задачи

Подсоединить сетевой адаптер виртуальной машины к сети Ethernet, к которой подключен адаптер eth0 host-машины. Получить IP-адрес из этой сети через DHCP и выйти в интернет.
Возможно, в будущем потребуются другие протоколы для общения с физической сетью: IPX/SPX, NetBEUI и т.п. (Знаю, что вообще для виртуалок такое можно, т.к. есть VMWare, у которой есть режим сетевой карточки "Bridged" == этим я реально пользовался, ок работает.)

ОС: Fedora8 i386 + все обновления через yum, kqemu + brctl.

2. Подготавливаем запускающие скрипты

2.1. Скрипт для запуска виртуальной машины

Код:

#!/bin/sh qemu -cdrom /mnt/oldstore/NIX/Ubuntu/8.04/ubuntu-8.04.1-desktop-i386.iso -net nic,vlan=0 \ -net tap,vlan=0,ifname=tap0,script=./ifup-tap0.sh -boot d -localtime -usb -m 512 ./ifdown-tap0.sh


2.2. Скрипт ifup-tap0.sh, для запуска интерфейса tap0

Код:

#!/bin/sh # == скрипт поднятия интерфейса tap0 == # поднимаем интерфейс tap0, смотрящий во vlan=0 ifconfig tap0 0.0.0.0 # опускаем и поднимаем eth0 ifdown eth0 ifconfig eth0 0.0.0.0 echo >> ./ifcfg01.txt echo После опускания интерфейса, `date +%H:%M:%S` >> ./ifcfg01.txt ifconfig eth0 >> ./ifcfg01.txt # создаем мост brctl addbr mybr01 # время обучения == нуль brctl setfd mybr01 0 # добавляем интерфейсы к мосту brctl addif mybr01 tap0 brctl addif mybr01 eth0 # поднимаем мост (получаем айпишник для него, чтобы был инет) echo >> ./ifcfg01.txt echo Перед поднятием бриджа еще раз проверяем состояние eth0, `date +%H:%M:%S` >> ./ifcfg01.txt ifconfig eth0 >> ./ifcfg01.txt #ifconfig mybr01 up 192.168.77.3 netmask 255.255.255.240 #route add default gw 192.168.77.1 dhclient mybr01 echo >> ./ifcfg01.txt echo После поднятия бриджа еще раз проверяем состояние eth0, `date +%H:%M:%S` >> ./ifcfg01.txt ifconfig eth0 >> ./ifcfg01.txt


2.3. Скрипт ifdown-tap0.sh, для остановки интерфейса tap0 и приведения сетевых настроек в предыдущий вид.

Код:

#!/bin/sh # == скрипт опускания интерфейса tap0 == # убиваем клиента DHCP killall -HUP dhclient # опускаем мост ifconfig mybr01 down # удаляем интерфейсы из моста brctl delif mybr01 eth0 #brctl delif mybr01 tap0 # это вообще нужно делать, или уже и так умер? # удаляем мост brctl delbr mybr01 # восстанавливаем связь с инетом ifup eth0


3. Запускаем виртуалку

Код:

su - cd /туда_где_файлы_виртуалки ./главный_скрипт.sh


4. Полученные результаты

4.1. файл ifcfg01.txt

Код:

После опускания интерфейса, 23:22:02 eth0 Link encap:Ethernet HWaddr 00:11:11:5D:62:5B inet6 addr: fe80::211:11ff:fe5d:625b/64 Scope:Link UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 RX packets:373 errors:0 dropped:0 overruns:0 frame:0 TX packets:132 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:1000 RX bytes:28813 (28.1 KiB) TX bytes:18217 (17.7 KiB) Перед поднятием бриджа еще раз проверяем состояние eth0, 23:22:02 eth0 Link encap:Ethernet HWaddr 00:11:11:5D:62:5B inet6 addr: fe80::211:11ff:fe5d:625b/64 Scope:Link UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 RX packets:373 errors:0 dropped:0 overruns:0 frame:0 TX packets:132 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:1000 RX bytes:28813 (28.1 KiB) TX bytes:18217 (17.7 KiB) После поднятия бриджа еще раз проверяем состояние eth0, 23:22:05 eth0 Link encap:Ethernet HWaddr 00:11:11:5D:62:5B inet addr:192.168.77.3 Bcast:192.168.77.15 Mask:255.255.255.240 inet6 addr: fe80::211:11ff:fe5d:625b/64 Scope:Link UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 RX packets:379 errors:0 dropped:0 overruns:0 frame:0 TX packets:148 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:1000 RX bytes:30763 (30.0 KiB) TX bytes:21075 (20.5 KiB)


4.2. В гостевой оси:

4.2.1. IP-адрес клиенту через DHCP не выдается

4.2.2. Тогда конфигурируем вручную интерфейс

Код: Выделить всё

sudo ifconfig eth0 192.168.77.11 netmask 255.255.255.240


4.2.3. Пинги до хост-ос (192.168.77.3) и до роутера (192.168.77.1) -- не идут

4.2.4. arping == и до хост-ос, и до роутера == идут прекрасно

4.3. вывод "/sbin/ifconfig -a" для хост-ос во время выполнения виртуальной машины

Код:

eth0 Link encap:Ethernet HWaddr 00:11:11:5D:62:5B inet addr:192.168.77.3 Bcast:192.168.77.15 Mask:255.255.255.240 inet6 addr: fe80::211:11ff:fe5d:625b/64 Scope:Link UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 RX packets:3512 errors:0 dropped:0 overruns:0 frame:0 TX packets:2197 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:1000 RX bytes:792098 (773.5 KiB) TX bytes:168366 (164.4 KiB) lo Link encap:Local Loopback inet addr:127.0.0.1 Mask:255.0.0.0 inet6 addr: ::1/128 Scope:Host UP LOOPBACK RUNNING MTU:16436 Metric:1 RX packets:5097 errors:0 dropped:0 overruns:0 frame:0 TX packets:5097 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:0 RX bytes:2470840 (2.3 MiB) TX bytes:2470840 (2.3 MiB) mybr01 Link encap:Ethernet HWaddr 00:11:11:5D:62:5B inet addr:192.168.77.3 Bcast:192.168.77.15 Mask:255.255.255.240 inet6 addr: fe80::211:11ff:fe5d:625b/64 Scope:Link UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 RX packets:3223 errors:0 dropped:0 overruns:0 frame:0 TX packets:1643 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:0 RX bytes:726904 (709.8 KiB) TX bytes:127954 (124.9 KiB) tap0 Link encap:Ethernet HWaddr 00:FF:67:1D:5A:7E inet6 addr: fe80::2ff:67ff:fe1d:5a7e/64 Scope:Link UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 RX packets:110 errors:0 dropped:0 overruns:0 frame:0 TX packets:1386 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:500 RX bytes:11277 (11.0 KiB) TX bytes:87992 (85.9 KiB)


5. Вопрос: что я делаю не так?

Почему у eth0 и у mybr01 один и тот же мак и один и тот же ip? Нигде не сказано, чтобы так присваивать, почему например не у mybr01 и tap0 не совпадают маки и ип, а именно у mybr01 и eth0?
Спасибо сказали:
Аватара пользователя
infra_hdc
Сообщения: 376
ОС: GNU/Linux

Re: qemu + ethernet bridge

Сообщение infra_hdc »

уже теплее....

пробую с хостом с живого ubuntu-8.04.1-desktop-i386.iso -- айпишник присваивается теперь только mybr01, хотя у eth0 и mybr01 -- все равно одинаковые маки.
но вот тут гость начинает работать, правда гостевой mn-applet не хочет адрес принимать от роутерского DHCP , приходится делать sudo dhclient eth0.

Незначительное замечание: перед запуском скрипта не делал su - т.к. в главный скрипт перед вызовом qemu просто добавил слово sudo.

Господа, поделитесь плиз если у кого такая же была проблема поднять bridge для QEMU, и все было в шоколаде?
Интересует на каком дистрибутиве :-)
Спасибо сказали:
Аватара пользователя
infra_hdc
Сообщения: 376
ОС: GNU/Linux

Re: qemu + ethernet bridge

Сообщение infra_hdc »

Продолжение темы.
В исходной Fedora8 mybr0 и eth0 получили от DHCP разные IP (сам DHCP иногда жонглирует адресами, т.е. нет жесткой привязки к маку). Само собой, в гостевой ОС не работает, даже не захотел пинговать шлюз, написал что-то типо host prohibited.
Спасибо сказали: