LINUX.ORG.RU

[yet another qemu networking thread]Так как же это сделать? Сеть в qemu


0

1

Хост - DragonFly BSD Гостевая ОС - Debian

Хочу в дебиане иметь сеть, используя какой-то bridge. Делаю так:

Создаю файл qemu-ifup

#!/bin/sh

ifconfig $1 0.0.0.0 up
ifconfig bridge0 create
ifconfig addm nfe0 addm $1 up

nfe0 - мой рабочий сетевой интерфейс

В файл qemu-ifdown:

#!/bin/sh

ifconfig bridge0 destroy

Запускаю: qemu -hda debian.img -net nic,vlan=0 -net tap,vlan=0,script=qemu-up,downscript=qemu-down

На хосте имеем:

[vasily@vonbraun] ~> ifconfig
lp0: flags=8810<POINTOPOINT,SIMPLEX,MULTICAST> mtu 1500
fwe0: flags=8802<BROADCAST,SIMPLEX,MULTICAST> mtu 1500
        ether 02:11:d8:75:16:af
        ch 1 dma -1
nfe0: flags=8943<UP,BROADCAST,RUNNING,PROMISC,SIMPLEX,MULTICAST> mtu 1500
        options=9<RXCSUM,VLAN_MTU>
        inet6 fe80::21e:8cff:fe1c:5790%nfe0 prefixlen 64 scopeid 0x3 
        inet 10.171.62.254 netmask 0xfffffc00 broadcast 10.171.63.255
        ether 00:1e:8c:1c:57:90
        media: Ethernet autoselect (100baseTX <full-duplex>)
        status: active
sl0: flags=c010<POINTOPOINT,LINK2,MULTICAST> mtu 552
faith0: flags=8002<BROADCAST,MULTICAST> mtu 1500
lo0: flags=8049<UP,LOOPBACK,RUNNING,MULTICAST> mtu 16384
        options=3<RXCSUM,TXCSUM>
        inet 127.0.0.1 netmask 0xff000000 
        inet6 ::1 prefixlen 128 
        inet6 fe80::1%lo0 prefixlen 64 scopeid 0x6 
ppp0: flags=8010<POINTOPOINT,MULTICAST> mtu 1500
tap4: flags=8943<UP,BROADCAST,RUNNING,PROMISC,SIMPLEX,MULTICAST> mtu 1500
        inet6 fe80::2bd:c2ff:fe0e:b04%tap4 prefixlen 64 scopeid 0x8 
        inet 0.0.0.0 netmask 0xff000000 broadcast 0.255.255.255
        ether 00:bd:c2:0e:0b:04
        Opened by pid 1631
bridge0: flags=8043<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
        ether 4a:12:5e:8f:0f:a5
        priority 32768 hellotime 2 fwddelay 15 maxage 20
        member: tap4 flags=3<LEARNING,DISCOVER>
        member: nfe0 flags=3<LEARNING,DISCOVER>

На гостевой - один интерфейс lo0. При запуске dhclient создается eth0, но получить адресов и увидеть сеть не удается. Перечитал уже кучу мануалов. Где я дурак?

А не пробовал снифером смотреть что происходит на мосту и входящих в него интерфейсах во время попыток получить по DHCP IP-адрес?

В linux'е пакеты, проходящие между интерфейсами моста, проходят через цепочки iptables и ebtables, так что по умолчанию мост работает _не_ как тупой свич. Может и в DragonFly BSD тоже пакетный фильтр что-нибудь блокирует?

Deleted ()
Ответ на: комментарий от Deleted

А как? Что именно искать?

Сделал логгинг пакетов с помошью ipfw с tap4 и bridge0 - какой-то UDP флуд (идет с локалки, у меня NAT, как видишь).

В линуксе сделал iptables -A INPUT -i eth0 -j LOG

вижу опять UDP флуд с адресов 10.171.x.x. При попытке пропинговать - network is unreacheble

different_thing ()
Ответ на: комментарий от different_thing

А как?

Снифером. Tcpdump, wireshark.

Что именно искать?

DHCP-запросы, которые посылает система из виртуальной машины.

В линуксе сделал iptables -A INPUT -i eth0 -j LOG

вижу опять UDP флуд с адресов 10.171.x.x.

Значит мост всё-таки работает.

Такой вопрос: у тебя в сети вообще dhcp-сервер работает?

Deleted ()
Ответ на: комментарий от different_thing

Может как-то вручную eth0 на гостевой ОС настроить? Только какой ip дать?

А как у тебя вообще сеть настроена?

Deleted ()
Ответ на: комментарий от different_thing

Да, приходят на странный адрес - 255.255.255.255

Это броадкаст-адрес локальной сети. DHCP-запросы должны уходить на этот адрес, так как адрес DHCP-сервера заранее не известен. Тот флуд который ты видел скорее всего генерируют венды или samba-машины (NetBT).

Deleted ()
Ответ на: комментарий от Deleted

Сеть что-то типа локалки с выходом в интернет.

На хосте у меня вообще каждый раз dhclient nfe0 вызывается. Или можно так:

ifconfig nfe0 10.171.62.254 netmask 255.255.252.0
route add default gw 10.171.60.1

Проделал всё это в гостевой ОС - внутренние адреса вроде пингуются, внешние - нет. Сеть в хосте также отвалилась? Вообще, интерфейс eth0 внутри и nfe0 снаружи должны иметь одинаковый ip? (Оба интерфейсы сетевой карты)

different_thing ()

Ну и ещё вопросы: какие должны быть netmask у tap4/bridge0? Совпадающими с nfe0 или без разницы? А ip адреса? Касательно tap4 увидел 0.0.0.0 из какого-то примера, почему так - хз.

different_thing ()
Ответ на: комментарий от different_thing

Вообще, интерфейс eth0 внутри и nfe0 снаружи должны иметь одинаковый ip? (Оба интерфейсы сетевой карты)

А если ты втыкаешь провода от двух компьютеров в свич, они должны иметь одинаковый IP? Почитай что-нибудь про сетевые мосты.

Deleted ()
Ответ на: комментарий от different_thing

Ну и ещё вопросы: какие должны быть netmask у tap4/bridge0? Совпадающими с nfe0 или без разницы? А ip адреса? Касательно tap4 увидел 0.0.0.0 из какого-то примера, почему так - хз.

Счас я попробую объяснить попроще...

В простейшем случае мост работает как обычный сетевой свитч. Когда ты объединяешь интерфейсы nfe0 и tap4 в мост bridge0, это эквивалентно тому, что ты берёшь свич и стыкаешь в него три провода: один идёт в локалку (nfe0), второй в виртуальную машину (tap4) и третий в хост-систему (bridge0). Со стороны хост-системы, IP-адрес должен быть только у bridge0, так как остальные интерфейсы как бы уже не принадлежат этой системе, ведь они с другой стороны свича. Соответственно и IP-адреса у системы (bridge0) и у виртуальной машины (eth0) должны быть разные.

Логика примерно такая.

Deleted ()
Ответ на: комментарий от Deleted

Спасибо, почитаю обязательно. Сегодня вообще только услышал о существовании такого)

different_thing ()

Оставлю тут на всякий случай

Ура, я нашел ответ! Однако чувствую себя полным идиотом)

Сделал с помощью NAT.

Из хоста:

ifconfig tap4 192.168.5.1 netmask 255.255.255.0 # пусть tap4 будет принадлежать моей локальной сети 192.168.5.0/24
echo map nfe0 from 192.168.5.0/24 to any -> 10.171.62.254/32 # FIXME: Все пакеты с этой локальной сети будут отправляться как если бы они шли с 10.171.62.254

Из гостя (DragonFly vkernel):

ifconfig vke0 192.168.5.2 netmask 255.255.255.0 # очевидно

route add default 192.168.5.1 # FIXME:ставим роутером внешний tap

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