web-dev-qa-db-ja.com

OS Xでqemuを使用してwifiネットワークブリッジを作成するにはどうすればよいですか?

小さなFreeBSDライブCD[〜#〜] qemu [〜#〜] を取得し、Mac OS X 10.8Wi-Fi接続をブリッジしようとしています。ゲストOSは私のLANで利用できます。ただし、ゲストOSがDHCPリースを取得することはありません。

これは、「ブリッジ」ネットワークモードのVirtualBoxで完全に機能するため、実行できることはわかっています。 VirtualBoxはこのプロジェクトに必要なアーキテクチャをサポートしていないため、QEMUで動作させる必要があります。

グーグルの時間に基づいてこれまでに行ったことは次のとおりです。

  1. インストール済み TUNTAP for OS X

  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リースを取得することはありません。

freebsd

tcpdump -ni tap0の場合、ワイヤレスネットワークからのトラフィックがたくさんあります。しかし、私がtcpdump -ni en0の場合、QEMUゲストOSからのDHCPトラフィックは表示されません

何か案は?

更新1:Sudo defaults write "/Library/Preferences/SystemConfiguration/com.Apple.Boot" "Kernel Flags" "net.inet.ip.scopedroute=0"を試し、 このメーリングリストの提案 ごとに再起動しましたが、役に立ちませんでした。実際、VirtualBoxブリッジモードが機能しなくなりました。

更新2:興味深いことに、QEMUゲストの仮想インターフェイスはブロードキャストパケットのみを取得します。どういうわけかルートを追加する必要がありますか?うーん...

broadcast packets

4
a paid nerd

ブリッジを作成するときにこれを試してください。

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とRiverbedSteelhead Labでこれを経験したので、私はこれを自分で経験しました。

これはあなたの橋を持ち上げます。

2
Nasir Otis

ご指摘のとおり、VM VirtualBoxなどのソフトウェアにはWi-Fiインターフェイスにブリッジする方法があります。ただし、これは明らかに困難であり、ifconfigと同じではありません。私の知る限り、ifconfigはethernetブリッジングを実行します。つまり、実際のイーサネットインターフェイスまたは仮想「TAP」イーサネットインターフェイスの組み合わせのみをブリッジできます。 2つのTAPインターフェイスのブリッジングが含まれます。TUNインターフェイスについてはわかりません。

QEMUで発生している問題は、MacintoshエミュレーターのSheepShaverとBasilisk IIで最近解決した問題です。これらは、TunTapOSXが提供する独自のTAPインターフェイスもロードできます。私がやったことは、Linux VMの別のコンピューターにブリッジモードのOpenVPNサーバーをセットアップすることでした。これには多少の手間がかかりますが、非常に便利なツールです。 VPNサーバーと同じLANで、サーバーのプライベートIPアドレスを介して接続できます。これは以下にリンクされているガイドに記載されています。OpenVPNサーバーのセットアップに関する最初のガイドと、エミュレーターの接続に関する2番目のガイドに従ってください。

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

問題は、OpenVPNサーバーを実行しているコンピューターがイーサネットでルーターに接続されている必要があることです。また、イーサネットブリッジングを使用してエミュレーターを実行することはできません。これは、Linux VM for OpenVPN、またはその逆)で必要なブリッジングに干渉する可能性があるためです。

1
NucAr