我正在尝试在我的 Wi-Fi 连接和模拟器之间建立一座桥梁(量子计算单元)。我需要虚拟机与主机在同一个LAN上,并有自己的IP地址。
QEMU 需要使用 TAP(虚拟网络设备),因此我安装了tuntaposx,让它运行,并且可以使用 TAP 打开 QEMU:
qemu-system-arm -kernel zImage.integrator -initrd arm_root.img -m 256 -net nic -net tap,ifname=tap1 -nographic -append "console=ttyAMA0"
我有一个脚本,可以在 QEMU 打开 TAP 接口后配置桥接器:
sysctl -w net.link.ether.inet.proxyall=1
sysctl -w net.inet.ip.forwarding=1
sysctl -w net.inet.ip.fw.enable=1
ifconfig bridge0 create
ifconfig bridge0 addm en1
ifconfig tap1 0.0.0.0 up
ifconfig bridge0 addm tap1
ifconfig bridge0 up
如果我手动在虚拟机上设置 IP,我可以从虚拟机 ping 到主机,但不能从主机 ping 到虚拟机。此外,我无法从虚拟机访问其余网络 - 包括无法通过 DHCP 设置 IP。
有任何想法吗?
答案1
您忘记了两个重要步骤:运行 natd 守护程序并配置防火墙以允许该流量,即:
natd -interface en0 ipfw add divert natd ip 从任意到任意通过 en0
en0 是我的 wifi 接口(macbook air),它运行起来非常好。建议的 openvpn 解决方案过于复杂。
如果您想要非常具体,您还可以以更花哨的方式运行 natd(例如:# fancy:natd -alias_address 10.0.0.2 -interface en0 -use_sockets -same_ports -unregistered_only -dynamic -clamp_mss),但上述方法也可以起作用。
我详细介绍了整个过程http://en.blog.guylhem.net/post/88201449689/running-qemu-with-tap0-and-nat-under-osx-10-9-maverick
答案2
-netdev tap,id=xxx,ifname=tap0 -device e1000,netdev=xxx。您需要特定于设备并确保您的内核支持它,英特尔 e1000 应该得到普遍支持。我修复了运行 x86 VM 的 Mac 上的桥接问题,因为我不需要连接到互联网,就我而言,我只需要在主机网络中连接多个 VM。所以我没有 addm en0。PS 记得有一个 addm 脚本,qemu -netdev tap 会向您发出此错误警报。希望这能解决您的问题。