У меня есть хост (192.168.1.106) Linux-сервер с KVM и один Linux-сервер в качестве виртуализированного гостя (192.168.1.105). Гость использует сетевой мост, и хост и гость доступны через одну и ту же сетевую карту.
Моя проблема в том, что первый пакет ARP, запрашивающий IP-адрес моего виртуализированного гостя, в этом примере 192.168.1.105, всегда получает ответ от моей хост-машины 192.168.1.106 с неправильным MAC-адресом. Однако второй пакет ARP всегда попадает к гостю и получает правильный ответ. Само собой разумеется, что это то, что приносит неприятности ...
$ arping -I wlp4s0 192.168.1.105
ARPING 192.168.1.105 from 192.168.1.100 wlp4s0
Unicast reply from 192.168.1.105 [10:7B:44:80:E0:85] 3.752ms <-- Wrong MAC address
Unicast reply from 192.168.1.105 [52:54:00:8D:A2:C8] 3.838ms
Unicast reply from 192.168.1.105 [52:54:00:8D:A2:C8] 2.591ms
$ ip a
3: enp5s0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
link/ether 10:7b:44:80:e0:85 brd ff:ff:ff:ff:ff:ff
inet 192.168.1.106/24 brd 192.168.1.255 scope global noprefixroute enp5s0
valid_lft forever preferred_lft forever
inet6 fe80::127b:44ff:fe80:e082/64 scope link
valid_lft forever preferred_lft forever
6: virbr0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc noqueue state DOWN group default qlen 1000
link/ether 52:54:00:f9:4b:f9 brd ff:ff:ff:ff:ff:ff
inet 192.168.122.1/24 brd 192.168.122.255 scope global virbr0
valid_lft forever preferred_lft forever
7: virbr0-nic: <BROADCAST,MULTICAST> mtu 1500 qdisc pfifo_fast master virbr0 state DOWN group default qlen 1000
link/ether 52:54:00:f9:4b:f9 brd ff:ff:ff:ff:ff:ff
10: macvtap0@enp5s0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 500
link/ether 52:54:00:8d:a2:c8 brd ff:ff:ff:ff:ff:ff
inet 192.168.1.105/24 brd 192.168.1.255 scope global noprefixroute macvtap0
valid_lft forever preferred_lft forever
inet6 fe80::5054:ff:fe8d:a2c8/64 scope link
valid_lft forever preferred_lft forever
virsh # iface-dumpxml macvtap0
<interface type='ethernet' name='macvtap0'>
<mtu size='1500'/>
<link speed='1000' state='up'/>
<mac address='52:54:00:8d:a2:c8'/>
</interface>
virsh # iface-dumpxml enp5s0
<interface type='ethernet' name='enp5s0'>
<mtu size='1500'/>
<link speed='1000' state='up'/>
<mac address='10:7b:44:80:e0:85'/>
</interface>
virsh # version
Compiled against library: libvirt 4.5.0
Using library: libvirt 4.5.0
Using API: QEMU 4.5.0
Running hypervisor: QEMU 3.0.0
У кого-то есть идеи, в чем может быть проблема? Или как исправить? Я также посмотрел tcpdump от гостя, и первый пакет ARP никогда не приходит туда.
Ваш интерфейс macvtap0 (связано с enp5s0) был назначен IP: 192.168.1.105/24: ВМIP. Поскольку Linux рассматривает все свои IP-адреса как пул, в том числе когда запрос / ответ ARP, хост просто выполнил то, что должно быть сделано в соответствии с его конфигурацией: отвечал на запросы на адрес 192.168.1.105, установленный на macvtap0 с помощью enp5s0MAC.
Это роль виртуальной машины - получать трафик и соответствующим образом отвечать на него с помощью собственного сетевого стека. На самом деле macvtap следует рассматривать как порт моста. Хост не должен иметь этот IP-адрес на своей стороне, точно так же, как у него не было бы IP-адреса на порту моста, если бы он использовался для этой конфигурации.
Вы не показали файл конфигурации с этим IP-адресом, но он отображается в настроенном интерфейсе. Так что просто удалите 192.168.1.105/24 из macvtap0настройку, где бы она ни находилась, для устранения этой проблемы.