qemu-kvm, поведение сети на гостевых машинах - баг или фича [SOLVED]

Доброго времени суток.
Настраиваю qemu-kvm на своей стационарной машине.
Версия ядра:
2.6.37-gentoo-r4 #15 SMP Fri May 20 22:35:33 MSD 2011 x86_64

Настраивал по мануалу на вики:
http://en.gentoo-wiki.com/wiki/KVM, по варианту сетевой мост в отдельной подсети, доступ в инет получать через NAT.(NAT/Masquerading).

В принципе, все получилось, но, есть один интересный нюанс: тестовая гостевая машина (CentOS 5.4) при запуске прекрасно пингует физический хост и Интернет, но не желает конектиться ни по каким сервисам и наоборот. При попытке зайти, скажем, по ssh, получаю:
ssh_exchange_identification: read: Connection reset by peer

Как только цепляюсь к гостевой машине по vnc и вручную меняю ей MAC-адрес, все сразу начинает работать нормально.

Вот выводы команды ifconfig на физ.хосте:

br0       
          Link encap:Ethernet  HWaddr 50:73:00:12:34:51  
          inet addr:10.0.2.254  Bcast:10.0.2.255  Mask:255.255.255.0
          inet6 addr: fe80::5273:ff:fe12:3451/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:548 errors:0 dropped:0 overruns:0 frame:0
          TX packets:181 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0 
          RX bytes:62964 (61.4 KiB)  TX bytes:19418 (18.9 KiB)

eth0      Link encap:Ethernet  HWaddr 00:04:61:50:3b:bc  
          inet addr:192.168.62.108  Bcast:192.168.62.255  Mask:255.255.255.0
          inet6 addr: fe80::224:1dff:fec7:93df/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:53708 errors:0 dropped:0 overruns:0 frame:0
          TX packets:31415 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000 
          RX bytes:27171315 (25.9 MiB)  TX bytes:4161153 (3.9 MiB)
          Interrupt:40 Base address:0x6000 

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:35856 errors:0 dropped:0 overruns:0 frame:0
          TX packets:35856 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0 
          RX bytes:72735661 (69.3 MiB)  TX bytes:72735661 (69.3 MiB)

tap0      Link encap:Ethernet  HWaddr 50:73:00:12:34:51  
          inet6 addr: fe80::5273:ff:fe12:3451/64 Scope:Link
          UP BROADCAST PROMISC MULTICAST  MTU:1500  Metric:1
          RX packets:382 errors:0 dropped:0 overruns:0 frame:0
          TX packets:108 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:100 
          RX bytes:38768 (37.8 KiB)  TX bytes:9589 (9.3 KiB)

tap1      Link encap:Ethernet  HWaddr 50:73:00:12:34:52  
          inet6 addr: fe80::5273:ff:fe12:3452/64 Scope:Link
          UP BROADCAST RUNNING PROMISC MULTICAST  MTU:1500  Metric:1
          RX packets:5132 errors:0 dropped:0 overruns:0 frame:0
          TX packets:325 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:100 
          RX bytes:3301154 (3.1 MiB)  TX bytes:30854 (30.1 KiB)

Вот конфиг /etc/conf.d/net на физ.хосте:

config_eth0=("192.168.62.108 netmask 255.255.255.0 broadcast 192.168.62.255")
routes_eth0=("default via 192.168.62.1")

bridge_br0="tap0 tap1"
brctl_br0=( "setfd 0" "sethello 1" "stp off" )
RC_NEED_br0="net.tap0 net.tap1"

config_br0=( "10.0.2.254 netmask 255.255.255.0 broadcast 10.0.2.255" )

config_tap0=( "null" )
tuntap_tap0="tap"
tunctl_tap0="-u arrnorets"
mac_tap0="50:73:00:12:34:51"

config_tap1=( "null" )
tuntap_tap1="tap"
tunctl_tap1="-u arrnorets"
mac_tap1="50:73:00:12:34:52"

Стартую гостевую машину так:
qemu-kvm -drive file=/mnt/data/virtmachines/KVM/testVM.img,if=virtio,boot=on -net nic,macaddr=52:54:00:12:34:53 -net tap,ifname=tap1,script=no,downscript=no -net user -m 1024 &

Я так понимаю, что опция -net nic,macaddr=52:54:00:12:34:53 задает параметры сетевой карты для гостевой машины, а -net tap,ifname=tap1,script=no,downscript=no - задает параметры tap1, устройства на стороне физ.хоста, объединенного в мост.
Первоначально я по ошибке запустил гостевую машину с опцией -net nic,macaddr=52:54:00:12:34:52, т.е. МАК-адрес совпал с адресом устройства tap1, подумал что дело в этом и при запуске стал менять мак. Но тем не менее ситуация повторяется: запускаю гостевую систему - пингую всех но не могу ни к кому зацепиться; меняю на гостевой системе мак-адрес - все начинает работать.
Конечно, можно написать скрипт, который будет каждый раз при запуске гостя после запуска сети подменять МАК-адрес, но это не совсем красиво.

Почему может быть такое вот поведение? У меня, помимо совпадения МАК-адресов гостевой системы и tap-устройства на физическом хосте, пока мыслей нет к сожалению. Или я неверно понял статью в вики?

app-emulation/virt-manager

Use app-emulation/virt-manager, Luke.

Спасибо за совет, но

Спасибо, за совет, да только не хочу я привязываться к связке libvirt+virt-manager :) До кучи, эта штука тянет за собой dnsmasq в качестве зависимостей, похоже, что она используется для выдачи IP гостевым системам. А у меня на даный момент на машине настроена связка dhcp+named, и дополнительно решать еще тут конфликт тоже не хочется :)

ArRnorets.

Тогда советую поставить

Тогда советую поставить virt-manager с libvirt отдельно и взять оттуда всё полезное: посмотреть, с какими параметрами и как запускаются виртуальные машины, воспользоваться генератором MAC-адресов и тд и тп.

Возможно, вас устроит, кстати, поведение dnsmasq: он работает только на виртуалки, никакого влияния на прочие сети не оказывает.

dnsmasq в зависимостях есть,

dnsmasq в зависимостях есть, но вполне работает без него. :) Так что можно вводить доп. USE флаг. да libvirt можно убрать из зависимостей ебилда virt-manager

P.S.: Linux - это красная таблетка :-) Windows - синяя...

Представьте рабочий вариант

Представьте рабочий вариант ебилда, а то мужики и не знают :)

Compute:
Bosch M2.8.1 -> custom Bosch M2.8.3 clone from Russia.
Speed about 260 km,Ram 2 pers.,HDD - 70 kg,210 FLOPS ;)

это тонко так? #

это тонко так?

# /etc/init.d/libvirtd status
* status: started
# /etc/init.d/dnsmasq status
* status: stopped

# ps axu | grep dns
root 24089 0.0 0.0 9860 596 pts/2 D+ 22:06 0:00 grep --colour=auto dns

ps axu | grep libvirt
root 2481 0.1 0.1 273612 4588 ? Sl May20 3:08 /usr/sbin/libvirtd -d --listen
root 24062 56.2 2.6 923868 103120 ? Sl 22:06 0:15 /usr/bin/qemu-system-x86_64 --enable-kvm -S -M pc-0.13 -cpu phenom,+wdt,+skinit,+osvw,+3dnowprefetch,+misalignsse,+sse4a,+abm,+cr8legacy,+extapic,+cmp_legacy,+lahf_lm,+rdtscp,+pdpe1gb,+popcnt,+cx16,+ht,+vme -enable-nesting -enable-kvm -m 512 -smp 2,sockets=2,cores=1,threads=1 -name gentoo-server -uuid 3d8ac7c6-9dc6-7e45-2cc5-7e6a2f9bcaf0 -nodefconfig -nodefaults -chardev socket,id=charmonitor,path=/var/lib/libvirt/qemu/gentoo-server.monitor,server,nowait -mon chardev=charmonitor,id=monitor,mode=control -rtc base=localtime -boot order=c,menu=off -drive file=/var/lib/libvirt/images/gentoo-server.img,if=none,id=drive-virtio-disk0,boot=on,format=raw,cache=writeback -device virtio-blk-pci,bus=pci.0,addr=0x4,drive=drive-virtio-disk0,id=virtio-disk0 -netdev tap,fd=19,id=hostnet0,vhost=on,vhostfd=20 -device virtio-net-pci,netdev=hostnet0,id=net0,mac=52:54:00:4a:aa:74,bus=pci.0,addr=0x3 -chardev pty,id=charserial0 -device isa-serial,chardev=charserial0,id=serial0 -usb -spice port=5900,addr=0.0.0.0,disable-ticketing -vga qxl -global qxl.vram_size=67108864 -device virtio-balloon-pci,id=balloon0,bus=pci.0,addr=0x5

# ps axu | grep qemu
root 24062 48.4 2.6 932064 104440 ? Sl 22:06 0:15 /usr/bin/qemu-system-x86_64 --enable-kvm -S -M pc-0.13 -cpu phenom,+wdt,+skinit,+osvw,+3dnowprefetch,+misalignsse,+sse4a,+abm,+cr8legacy,+extapic,+cmp_legacy,+lahf_lm,+rdtscp,+pdpe1gb,+popcnt,+cx16,+ht,+vme -enable-nesting -enable-kvm -m 512 -smp 2,sockets=2,cores=1,threads=1 -name gentoo-server -uuid 3d8ac7c6-9dc6-7e45-2cc5-7e6a2f9bcaf0 -nodefconfig -nodefaults -chardev socket,id=charmonitor,path=/var/lib/libvirt/qemu/gentoo-server.monitor,server,nowait -mon chardev=charmonitor,id=monitor,mode=control -rtc base=localtime -boot order=c,menu=off -drive file=/var/lib/libvirt/images/gentoo-server.img,if=none,id=drive-virtio-disk0,boot=on,format=raw,cache=writeback -device virtio-blk-pci,bus=pci.0,addr=0x4,drive=drive-virtio-disk0,id=virtio-disk0 -netdev tap,fd=19,id=hostnet0,vhost=on,vhostfd=20 -device virtio-net-pci,netdev=hostnet0,id=net0,mac=52:54:00:4a:aa:74,bus=pci.0,addr=0x3 -chardev pty,id=charserial0 -device isa-serial,chardev=charserial0,id=serial0 -usb -spice port=5900,addr=0.0.0.0,disable-ticketing -vga qxl -global qxl.vram_size=67108864 -device virtio-balloon-pci,id=balloon0,bus=pci.0,addr=0x5

# netstat -apn | grep libvirt
tcp 0 0 192.168.2.254:16509 0.0.0.0:* LISTEN 2481/libvirtd
tcp 0 0 192.168.2.254:16509 192.168.2.1:41304 ESTABLISHED 2481/libvirtd
unix 2 [ ACC ] STREAM LISTENING 2099778 24062/qemu-system-x /var/lib/libvirt/qemu/gentoo-server.monitor
unix 2 [ ACC ] STREAM LISTENING 4635 2481/libvirtd /var/run/libvirt/libvirt-sock
unix 2 [ ACC ] STREAM LISTENING 4636 2481/libvirtd /var/run/libvirt/libvirt-sock-ro
unix 3 [ ] STREAM CONNECTED 2099784 24062/qemu-system-x /var/lib/libvirt/qemu/gentoo-server.monitor
unix 3 [ ] STREAM CONNECTED 2099783 2481/libvirtd
unix 3 [ ] STREAM CONNECTED 1581163 2481/libvirtd /var/run/libvirt/libvirt-sock
unix 3 [ ] STREAM CONNECTED 4639 2481/libvirtd

если вы считаете, что без dnsmasq оно работать не может - то почему я должен чего-то доказывать?

P.S.: Linux - это красная таблетка :-) Windows - синяя...

и что это доказывает :)

и что это доказывает :) ?

если вы считаете, что без dnsmasq оно работать не может - то почему я должен чего-то доказывать?

ты заявил, что надо выкинуть этот депенд - я попросил ебилд. Почему я что то должен доказывать ? :)

Compute:
Bosch M2.8.1 -> custom Bosch M2.8.3 clone from Russia.
Speed about 260 km,Ram 2 pers.,HDD - 70 kg,210 FLOPS ;)

Да, дело действительно не в том

Дело то не в том, действительно, работает или не работает без dnsmasq, а в том, что потом эта приблуда будет болтаться как ненужная, по сути-то, как вы, Aladdin, показали, зависимость. И таскать ее за собой постоянно не особо охота.

Ушел собирать qemu с поддержкой vde.

ArRnorets.

/usr/portage/app-emulation/libvirt/libvirt-0.9.1.ebuild

virt-network? ( net-dns/dnsmasq                                                                                                                                  
        >=net-firewall/iptables-1.4.10                                                                                                                               
        net-firewall/ebtables                                                                                                                                        
        sys-apps/iproute2 )

попробуйте emerge

попробуйте
emerge virt-manager
он много чего умеет. и удаленно к виртулке цепляться тоже.

P.S.: Linux - это красная таблетка :-) Windows - синяя...

Use vde, Luke

Use vde, Luke

Compute:
Bosch M2.8.1 -> custom Bosch M2.8.3 clone from Russia.
Speed about 260 km,Ram 2 pers.,HDD - 70 kg,210 FLOPS ;)

Slepnoga, спасибо за совет.

Как доберусь до машины - попробую, отпишусь.

ArRnorets.

slepnoga написал(а): Use vde,

slepnoga написал(а):
Use vde, Luke

Мне тоже его посоветовали когда-то. В сложных конфигурациях меня оно достало, с мостами как-то все предсказуемее.

Как ни странно, но

С vde вроде пока полет нормальный. Всем спасибо, вопрос можно закрыть.

ArRnorets.

a vde и есть мост, но

a vde и есть мост, но навороченный

Compute:
Bosch M2.8.1 -> custom Bosch M2.8.3 clone from Russia.
Speed about 260 km,Ram 2 pers.,HDD - 70 kg,210 FLOPS ;)

Настройки просмотра комментариев

Выберите нужный метод показа комментариев и нажмите "Сохранить установки".