无法通过 macvtap/KVM/libvirt 让 VM 使用公共 IP

无法通过 macvtap/KVM/libvirt 让 VM 使用公共 IP

我正在运行专用服务器,上面有几个 KVM VM。过去,我曾成功使用 macvtap 驱动程序将单独的公共 IPv4 地址附加到一台 VM,并且它就像完全独立的服务器一样正常工作。

我正在复制从托管服务提供商处收到的第二个公共 IPv4 所做的一切,但这次我无法使用 macvtap 从第二台 VM 访问互联网。

ip link show以下是当 VM 由 libvirt 启动时新创建的 macvtap 接口的相关主机:

40: macvtap2@eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UNKNOWN mode DEFAULT group default qlen 500
link/ether 52:54:00:35:02:38 brd ff:ff:ff:ff:ff:ff

以下是客人的ifconfig输出:

ens10     Link encap:Ethernet  HWaddr 52:54:00:35:02:38  
      inet addr:[PUBLIC IP]  Bcast:[BROADCAST IP PROVIDED BY HOSTER]  Mask:255.255.255.224
      inet6 addr: fe80::5054:ff:fe35:238/64 Scope:Link
      UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
      RX packets:0 errors:0 dropped:0 overruns:0 frame:0
      TX packets:21 errors:0 dropped:0 overruns:0 carrier:0
      collisions:0 txqueuelen:1000 
      RX bytes:0 (0.0 B)  TX bytes:1230 (1.2 KB)

以下是相关部分virsh edit machine

    <interface type='direct'>
      <mac address='52:54:00:35:02:38'/>
      <source dev='eth0' mode='vepa'/>
      <model type='virtio'/>
      <address type='pci' domain='0x0000' bus='0x00' slot='0x0a' function='0x0'/>
    </interface>

当我运行时,tcpdump -vv host [PUBLIC VM IP]我可以看到传入的数据包,但从未看到响应。

我在tcpdump -vv -i ens10虚拟机输出中根本看不到任何内容。

类似的设置似乎可以与另一台虚拟机配合使用,但我找不到两者之间的差异会导致第二台虚拟机以相同的方式工作。我可以做些什么来进一步调试它?

答案1

事实证明,问题在于向 Hetzner(我的托管商)请求虚拟机的单独 MAC 地址,而不是使用 libvirt 随机生成的 MAC 地址。一旦我请求并更新配置,其他一切都开始正常工作。

一些细节:https://wiki.hetzner.de/index.php/Virtualisierung/en

相关内容