LINUX.ORG.RU
ФорумAdmin

Qemu и сеть


0

0

Система - Mandriva 2009.0

есть два интерфейса - tap0 и eth0 И виртуальная машина qemu. хочется простого - эта машина была в сети с реальным ипишником. задача так же в том чтобы инет был и на обычной машине.

т.е. на физическом интерфейсе eth0 висело два ипишника - один который бы полностью ассоциировался с qemu второй - с физической машиной. итак.

Насколько я понимаю нужно сделать bridge интерфейсам - eth0 и tap0. и этого достаточно чтобы оба уже смогли достучаться в сеть и получить по dhcp ip adress. (вот <a href="http://m-ivanov.livejournal.com/3384.html?view=31544#t31544">подобная процедура</a> описана для FreeBSD)

как это делаю я: 1. Создается виртуальный интерфейс tap0 для юзера user tunctl -b -u user ifconfig tap0 promisc up 2. Задается chmod на dev/net/tun chmod -R 777 /dev/net/tun 3. Дальше (насколько я понимаю) создается интерфейс моста (в данном случае- br0): brctl addbr br0 и в него включаются два интерфейса eth0 и tap0 (важен ли здесь порядок включения?) brctl addif br0 eth0 tap0 4. далее qemu просто запускается из командной строки qemu -m 256 -net nic -net tap,ifname=tap0,script=/etc/qemu-ifup /media/disk/images/image

*в скрипте прописано что то типа sudo ifconfig tap0 0.0.0.0 (ибо без скрипта оно не запускается)

Насколько я понимаю после подобного если в виртуалке сделать dhclient eth0 то она должна достучаться до dhcp сервера и получить внешний адрес. На самом деле выходит иначе - с интерфейса eth0 на физической машине пингуется интерфейс на виртуальной (если ручками выставить ипишник этой же подсети) и только. Изнутри (виртуалки) не пингуется вообще ничего (притом ).

Что бы еще можно посмотреть? Я правильно понимаю принцип работы bridge - при поступлении пакета на него он транслируется на все интерфейсы (порты) включенные в него? ("Порты. У каждого моста есть подключённые к нему порты. Трафик, который приходит через любой из этих портов, прозрачно отправляется на другие; мост остаётся невидимым для остальной сети (в частности, его не видно через traceroute). " <a href="http://beneficium.ru/mediawiki/index.php/Man:brctl">тут</a>;) Как пакет идет наружу из внутреннего интерфейса?

кросспост.


вот скрипт, который поднимет тоже самое:

#!/bin/sh

chmod 0666 /dev/net/tun

# create a tap
./tunctl -t tap0 -u user
ip link set up dev tap0

#configure eth0
ifconfig eth0 0.0.0.0 up

# create the bridge
brctl addbr br0
brctl addif br0 tap0 eth0

## set the IP address and routing
ip link set up dev br0
ip addr add XXX.XXX.XXX.XXX/24 dev br0
#dhcpcd br0

он работает, хотя не так уж красив...

> На самом деле выходит иначе - с интерфейса eth0 на физической

> машине пингуется интерфейс на виртуальной


после поднятия бриджа, вы работаете с интерфейсом br0, про eth0 вы типа ничего не знаете. Мост работает на канальном уровне. eth0 для вас типа нет. Именно поэтому мост не видно через traceroute, он работает на более высоком уровне.

samson ★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.