Назад | Перейти на главную страницу

Нет ответа ARP на tap0 (мостовая сеть KVM)

Я хотел назначить внешний 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

  1. Вы используете iptables? Если да, включили ли вы трафик моста? Например, следующее решение, которое работает в Fedora / Red Hat:

iptables -F ВПЕРЕД

iptables -I FORWARD -m Physdev --physdev-is-bridged -j ACCEPT

iptables-save> / и т.д. / sysconfig / iptables

  1. Включили ли вы пересылку IPv4 в sysctl.conf? Снова на Fedora / Red Hat в /etc/sysctl.conf вам нужно установить

net.ipv4.ip_forward = 1