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 - синяя...
и что это доказывает :)
и что это доказывает :) ?
ты заявил, что надо выкинуть этот депенд - я попросил ебилд. Почему я что то должен доказывать ? :)
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
попробуйте 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,
Мне тоже его посоветовали когда-то. В сложных конфигурациях меня оно достало, с мостами как-то все предсказуемее.
Как ни странно, но
С 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 ;)