Я хотел назначить внешний IP-адрес своему гостю KVM и пошел по мостовой сети. К сожалению, у гостя нет подключения к сети, и я не знаю почему. После расследования выяснилось, что он не получает никакого ответа на свои запросы ARP.
У меня один физический интерфейс: eth0, мостовой интерфейс: br0 и интерфейс tap: tap0, созданный сценарием qemu-ifup от kvm. На хост-машине установлена последняя версия Ubuntu Server. На гостевой машине работает GKRML live-cd (на основе Slackware).
Что может быть потенциальной проблемой, так это то, что хост-машина и гостевая машина находятся в разных сетях. К сожалению, оба IP-адреса были назначены мне центром обработки данных, и я не могу их изменить.
Подробности конфигурации приведены ниже. Ниже xx.xx
одинаковы как для хозяина, так и для гостя.
/ Etc / network / interfaces хоста:
# Loopback device:
auto lo
iface lo inet loopback
# Device: eth0
auto eth0
iface eth0 inet manual
# Device: br0
auto br0
iface br0 inet static
address xx.xx.110.69
netmask 255.255.255.224
network xx.xx.110.64
broadcast xx.xx.110.95
gateway xx.xx.110.65
bridge_ports eth0
bridge_fd 9
bridge_hello 2
bridge_maxage 12
bridge_stp off
Таблица маршрутизации хоста:
Destination Gateway Genmask Flags Metric Ref Use Iface
xx.xx.110.64 0.0.0.0 255.255.255.224 U 0 0 0 br0
0.0.0.0 xx.xx.110.65 0.0.0.0 UG 100 0 0 br0
/ Etc / qemu-ifup scirpt хоста (без изменений, поставляется с пакетом qemu):
#!/bin/sh
switch=$(/sbin/ip route list | awk '/^default / { print $5 }')
/sbin/ifconfig $1 0.0.0.0 up
/usr/sbin/brctl addif ${switch} $1
Выход brctl show
пока гость работает:
bridge name bridge id STP enabled interfaces
br0 8000.4061862b90d5 no eth0
tap0
Командная строка KVM:
kvm -cdrom grml_2009.10.iso -boot d -m 256 -vnc localhost:0 -net nic,macaddr=DE:AD:BE:EF:11:14 -net tap,script=/etc/qemu-ifup
Настройка сети гостевой машины (единый интерфейс eth0):
$ ifconfig eth0 xx.xx.129.69/28 up
$ route add default gw xx.xx.129.65
Результат tcpdump -i tap0
при попытке пинговать что-либо от гостя:
tcpdump: WARNING: tap0: no IPv4 address assigned
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on tap0, link-type EN10MB (Ethernet), capture size 96 bytes
23:38:13.659655 ARP, Request who-has xx.xx.129.65 tell xx.xx.129.69, length 28
23:38:14.659687 ARP, Request who-has xx.xx.129.65 tell xx.xx.129.69, length 28
23:38:15.659655 ARP, Request who-has xx.xx.129.65 tell xx.xx.129.69, length 28
23:38:16.666350 ARP, Request who-has xx.xx.129.65 tell xx.xx.129.69, length 28
23:38:17.666319 ARP, Request who-has xx.xx.129.65 tell xx.xx.129.69, length 28
23:38:18.666324 ARP, Request who-has xx.xx.129.65 tell xx.xx.129.69, length 28
... и так далее без ответа.
Заранее благодарю за любую помощь!
ваш гость находится в одной сети, а хост - в другой. Трафик проходит через устройство ответвления и мост к eth0, предполагается ли, что он вообще сможет достичь сети xx.xx.129.69 / 28? Типичная рабочая настройка будет заключаться в том, чтобы IP-адрес моста и виртуальная машина были подключены к нему в одной сети, и если вы хотите, чтобы хост не видел эту сеть, оставьте мост без IP-адреса вообще. Вы можете следить за потоком, проверяя tcpdump на самом мосту и, возможно, на базовом eth0
iptables -F ВПЕРЕД
iptables -I FORWARD -m Physdev --physdev-is-bridged -j ACCEPT
iptables-save> / и т.д. / sysconfig / iptables
net.ipv4.ip_forward = 1