如何在 OS X 上使用 qemu 创建 wifi 网桥?

如何在 OS X 上使用 qemu 创建 wifi 网桥?

我抓起小型 FreeBSD 实时 CD量子计算单元,我尝试桥接我的 Mac OS X 10.8 wifi 连接,以便客户操作系统可在我的 LAN 上使用。但是,客户操作系统从未获得 DHCP 租约。

这在 VirtualBox 的“桥接”网络模式下完美运行,所以我知道这是可以做到的。我需要让它与 QEMU 一起工作,因为 VirtualBox 不支持我这个项目所需的架构。

这是我经过几个小时的谷歌搜索后得出的结论:

  1. 已安装适用于 OS X 的 TUNTAP

  2. 告诉 OS X 转发所有数据包,甚至 ARP :(笔记:这似乎不起作用。)

    $ sudo sysctl -w net.inet.ip.forwarding=1
    $ sudo sysctl -w net.link.ether.inet.proxyall=1
    $ sudo sysctl -w net.inet.ip.fw.enable=1
    
  3. 创建了一座桥梁:

    $ sudo ifconfig bridge0 create
    $ sudo ifconfig bridge0 addm en0 addm tap0
    $ sudo ifconfig bridge0 up
    $ ifconfig
    bridge0: flags=8863<UP,BROADCAST,SMART,RUNNING,SIMPLEX,MULTICAST> mtu 1500
        ether ac:de:xx:xx:xx:xx
        Configuration:
            priority 0 hellotime 0 fwddelay 0 maxage 0
            ipfilter disabled flags 0x2
        member: en0 flags=3<LEARNING,DISCOVER>
                 port 4 priority 0 path cost 0
        member: tap0 flags=3<LEARNING,DISCOVER>
                 port 8 priority 0 path cost 0
    tap0: flags=8943<UP,BROADCAST,RUNNING,PROMISC,SIMPLEX,MULTICAST> mtu 1500
        ether ca:3d:xx:xx:xx:xx
        open (pid 88244)
    
  4. 一开始tcpdump-I希望它在 wifi 设备上启用混杂模式

    $ sudo tcpdump -In -i en0
    
  5. 使用以下方式运行 QEMU桥接网络指令

    $ qemu-system-x86_64 -cdrom mfsbsd-9.2-RELEASE-amd64.iso -m 1024 \
      -boot d -net nic -net tap,ifname=tap0,script=no,downscript=no
    

但客户系统从未获得 DHCP 租约:

自由基

如果我tcpdump -ni tap0,我会看到大量来自无线网络的流量。但是如果我tcpdump -ni en0,我查看来自 QEMU 客户操作系统的任何 DHCP 流量。

有任何想法吗?

更新 1:我尝试过sudo defaults write "/Library/Preferences/SystemConfiguration/com.apple.Boot" "Kernel Flags" "net.inet.ip.scopedroute=0"并重新启动此邮件列表建议,但这并没有什么帮助。事实上,它导致 VirtualBox 桥接模式停止工作。

更新 2:有趣的是,QEMU 客户机上的虚拟接口仅接收广播数据包。也许我需要以某种方式添加路由?嗯...

广播数据包

答案1

创建桥梁时尝试以下操作:

sudo ifconfig en0 down ####Shut Down the interface #####
sudo ifconfig en0 inet delete ####To clean out the old sys hooks. Don't worry you did uninstall the driver ##### Then:

sudo ifconfig bridge0 create
$ sudo ifconfig bridge0 addm en0 addm tap0
$ sudo ifconfig bridge0 up

我使用 GNS3 和 Riverbed Steelhead Lab 经历过这种情况,所以我亲身经历过这种情况。

这会使你的桥升起来。

答案2

正如您所指出的,VirtualBox 等虚拟机软件确实有桥接 Wi-Fi 接口的方法。但是,这显然很难做到,而且与 ifconfig 所做的不同。据我所知,ifconfig 执行以太网桥接,即它只能桥接真实以太网接口或虚拟“TAP”以太网接口的组合。因此这包括桥接两个 TAP 接口。我不知道 TUN 接口。

您在使用 QEMU 时遇到的问题是我最近使用 Macintosh 仿真器 SheepShaver 和 Basilisk II 解决的,它们也可以加载由 TunTapOSX 提供的自己的 TAP 接口。我所做的是在另一台计算机上的 Linux VM 中设置桥接模式 OpenVPN 服务器,这需要一些工作,但却是一个非常有用的工具。然后,如果您与 VPN 服务器位于同一个 LAN 上,则可以通过服务器的私有 IP 地址连接到它。我在下面链接的指南中提到了这一点。按照第一个指南设置 OpenVPN 服务器,按照第二个指南连接仿真器。

http://www.emaculation.com/doku.php/bridged_openvpn_server_setup http://www.emaculation.com/doku.php/wireless_appletalk_ss_bii_osx

问题是运行 OpenVPN 服务器的计算机必须通过以太网连接到路由器。另请注意,该计算机不能运行使用以太网桥接的模拟器,因为这可能会干扰 OpenVPN 所需的 Linux VM 中的桥接,反之亦然。

相关内容