Подсоединить сетевой адаптер виртуальной машины к сети 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.2404.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?