在 Mac OSX 上通过 QEMU VM 获取 ARP 请求时遇到问题

在 Mac OSX 上通过 QEMU VM 获取 ARP 请求时遇到问题

使用 Mac OS 10.14.5 Mojave 和 QEMU 版本 4.0.0

我正在尝试通过 Mac 主机上的网桥运行 Ubuntu Server 19.04 客户端并进行网络通信。目前,我甚至在客户端与主机之间以及与主机之间进行 ping 时都遇到了困难。

我在主机上创建了一座桥:

sudo ifconfig bridge1 create
sudo ifconfig bridge1 192.168.100.1/24 up

并设置系统标志net.inet.ip.forwarding=1net.link.ether.inet.proxyall=1尽管我不确定此时项目中是否有必要它们。

VM 启动如下:

sudo qemu-system-x86_64 -hda ubuntu-test -cdrom ubuntu-19.04-live-server-amd64.iso -accel hvf -netdev tap,br=/dev/bridge1,script=/etc/qemu-ifup,downscript=/etc/qemu-ifdown,id=net0 -device e1000,netdev=net0 -m 512

其中 qemu-ifup 脚本包含:

ifconfig bridge1 addm tap0

我通过 netplan 设置了虚拟机的 ip:

network:
  version: 2
  ethernets:
    ens3:
      addresses:
        - 192.168.100.2/24
      gateway4: 192.168.100.1

并适用 netplan。

我使用相关网络设备的 MAC 地址手动填充主机和客户机的 ARP 表:

_gateway (192.168.100.1) at $BRIDGE_MAC [ether] PERM on ens3
? (192.168.100.2) at $GUEST_DEV_MAC on bridge1 ifscope permanent [bridge]

分别在客户机和主机上,其中 $GUEST_DEV_MAC 和 $BRIDGE_MAC 是所讨论的两个设备的 MAC 地址。

在客户机上,ufw 被禁用,iptables -S 返回:

-P INPUT ACCEPT
-P FORWARD ACCEPT
-P OUTPUT ACCEPT

当我在主机上运行 tcpdump 并尝试从客户机 ping 它时,我可以看到 ICMP 回显请求和答复,但它们没有到达客户机:

$GUEST_DEV_MAC > $BRIDGE_MAC, IPv4, length 98: 192.168.100.2 > 192.168.100.1: ICMP echo request, id 1181, seq 2, length 64
$BRIDGE_MAC > $GUEST_DEV_MAC, IPv4, length 98: 192.168.100.1 > 192.168.100.2: ICMP echo reply, id 1181, seq 2, length 64

其中 $GUEST_DEV_MAC 和 $BRIDGE_MAC 是所讨论的两个设备的 MAC 地址。

当我尝试从主机 ping 客户机时,我只得到:

$BRIDGE_MAC > $GUEST_DEV_MAC, IPv4, length 98: 192.168.100.1 > 192.168.100.2: ICMP echo request, id 48948, seq 1, length 64

我不知道是什么阻碍了它们之间的通信,但我的经验非常有限。如果调试需要更多信息,请告诉我,如果有人有足够的经验来解释如何修复连接,请随时回答。谢谢。

相关内容