使用 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=1
,net.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
我不知道是什么阻碍了它们之间的通信,但我的经验非常有限。如果调试需要更多信息,请告诉我,如果有人有足够的经验来解释如何修复连接,请随时回答。谢谢。