qemu 上で動作する quest OS からのネットワークと Samba

qemu 上で動作する quest OS からのネットワークと Samba

互換性を確保するために、ビッグ エンディアン システムでいくつかのソフトウェアをテストしようとしています。Ubuntu 12.04 で qemu を使用して MIPS システムをエミュレートする予定です。これまでのところ、クエスト システムは正常に作成できましたが、ホスト システムとネットワーク接続できませんでした。ゲスト システムから外部にアクセスすることはできますが (wget や apt-get など)、samba の設定は失敗しました。

によるとこれQEmu 1.1 以降では、ネットワーク ブリッジ ヘルパーが追加のスクリプトを必要とせずに tun/tap を設定できます。スクリプトのさまざまなバージョンを見たことがあるため、これを使用しようとしています。現時点では、qemu-system-mips -version次のレポートが表示されます。

QEMU emulator version 1.0.50 (Debian 1.0.50-2012.03-0ubuntu2.1), Copyright (c) 2003-2008 Fabrice Bellard

私は 1.4.1 ソースからコンパイルし、 のバージョンを使用しましたapt-get。どちらも同じことを報告します。私は、-version表示されている内容に反して、バージョン 1.1 以降を使用しているという前提で作業しています。とにかく、次の指示は、デフォルトのネットワーク ヘルパーの setuid 属性をオンにすることでした。

sudo chmod u+s /usr/local/libexec/qemu-bridge-helper

次に、権限用のファイルを作成しました。ファイルbridge.confの内容は次のとおりです。/etc/qemu//usr/local/etc/qemu-rw-r--r--

allow br0

次のコマンドで QEmu を起動します:

qemu-system-mips -M malta -kernel vmlinux-2.6.32-5-4kc-malta -hda disk.img -append "root=/dev/sda1 console=ttyS0" -nographic -net nic -net bridge,br=br0 -smb /home/uli/samba

または

qemu-system-mips -M malta -kernel vmlinux-2.6.32-5-4kc-malta -hda disk.img -append "root=/dev/sda1 console=ttyS0" -nographic -netdev bridge,id=hn0 -device virtio-net-pci,netdev=hn0,id=nic1

または

qemu-system-mips -M malta -kernel vmlinux-2.6.32-5-4kc-malta -hda disk.img -append "root=/dev/sda1 console=ttyS0" -nographic  -netdev tap,helper=/usr/local/libexec/qemu-bridge-helper,id=hn0 -device virtio-net-pci,netdev=hn0,id=nic1

次のエラーが発生します:

failed to get mtu of bridge `br0': No such device
failed to launch bridge helper
qemu-system-mips: -net bridge,br=br0: Device 'bridge' could not be initialized

まあ、br0 ブリッジは作成しませんでした。理解できないスクリプトで作成しようとしましたが、その後、Quest MIPS QEmu システムはどこにも接続できなくなりました。br0 は認識されますが、IP アドレスを取得できません。明らかに、ここで何か間違っています。

ifconfig br0 down
brctl delbr br0

ifconfig eth2 0.0.0.0 promisc up

brctl addbr br0
brctl setfd br0 0
brctl addif br0 eth2

echo 1 > /proc/sys/net/ipv4/conf/br0/proxy_arp
echo 1 > /proc/sys/net/ipv4/conf/eth2/proxy_arp
echo 1 > /proc/sys/net/ipv4/ip_forward

dhclient br0
ifconfig br0 up

もっと簡単な方法はありますか?個人的には、\10.0.2.4\qemuのSMBサーバーを使用するだけで十分だと思います。ここしかし、これもうまくいきませんでした (共有をマウントしようとすると 115 のエラーが発生します。おそらくネットワークの問題が原因です)。

アップデート

ブリッジを作成すると、ホスト マシンの ifconfig から次の出力が表示されます。

br0       Link encap:Ethernet  HWaddr XX:XX:XX:XX:XX:XX  
          inet addr:10.2.32.101  Bcast:10.2.32.255  Mask:255.255.255.0          
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:85 errors:0 dropped:0 overruns:0 frame:0
          TX packets:51 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0 
          RX bytes:8235 (8.2 KB)  TX bytes:9227 (9.2 KB)

eth2      Link encap:Ethernet  HWaddr XX:XX:XX:XX:XX:XX  
          UP BROADCAST RUNNING PROMISC MULTICAST  MTU:1500  Metric:1
          RX packets:196581 errors:0 dropped:0 overruns:0 frame:0
          TX packets:44205 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000 
          RX bytes:139517339 (139.5 MB)  TX bytes:3365206 (3.3 MB)

出力を確認するとbrctl show、次のようになります。

bridge name     bridge id           STP enabled     interfaces
br0             8000.XXXXXXXXXXXX       no              eth2

ここで、QEmu でクエスト システムを起動します。ifconfig を実行すると、次のようになります。

eth0      Link encap:Ethernet  HWaddr XX:XX:XX:XX:XX:XX  
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:536 errors:1 dropped:51 overruns:0 frame:0
          TX packets:13 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000 
          RX bytes:55083 (53.7 KiB)  TX bytes:2862 (2.7 KiB)
          Interrupt:10 Base address:0x1020

そして橋は次のようになります:

bridge name     bridge id           STP enabled     interfaces
br0             8000.XXXXXXXXXXXX   no      eth2
                                                        tap0

残念ながら、この設定では、クエスト システムはかつての制限された「ユーザー モード」ネットワークを失ってしまいました (つまり、wget と apt-get は動作しなくなりました)。私が確認できる IP アドレスはブリッジのものだけなので、クエストがネットワーク上でどのように表示されるかはわかりません。ホストは、br0 と同じ IP アドレスで引き続き表示されます。

アップデート

以下はiptables -Lの出力です。

Chain INPUT (policy ACCEPT)
target     prot opt source               destination         

Chain FORWARD (policy ACCEPT)
target     prot opt source               destination         

Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination   

答え1

ブリッジを実行している場合、ブリッジのメンバー (eth2) には IP アドレスが割り当てられなくなります。これで、br0 が IP を取得するようになります。

これは、KVM を使用するシステムからの出力です。内部では qemu-kvm を使用しているため、設定は実行しようとしているものと似ているはずです。

$ ifconfig -a
br0       Link encap:Ethernet  HWaddr XX:XX:XX:XX:XX:XX
          inet addr:192.168.1.1  Bcast:192.168.1.255  Mask:255.255.255.0
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:2929289877 errors:0 dropped:0 overruns:0 frame:0
          TX packets:842023980 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0 
          RX bytes:1992305504701 (1.8 TiB)  TX bytes:3609403664141 (3.2 TiB)

eth0      Link encap:Ethernet  HWaddr XX:XX:XX:XX:XX:XX  
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:3737819958 errors:0 dropped:168 overruns:0 frame:0
          TX packets:1233468235 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000 
          RX bytes:2735097151685 (2.4 TiB)  TX bytes:4313257594064 (3.9 TiB)
          Interrupt:177 

eth0 に IP アドレスがないのがわかりますか? また、私の br0 デバイスは次のようになります。

$ brctl show
bridge name bridge id               STP enabled     interfaces
br0         8000.XXXXXXXXXXXX       no              vnet2
                                                    vnet1
                                                    vnet0
                                                    eth0

br0 デバイス上に 3 つの VM を配置しているので、実際の物理システムと同じようにネットワークに完全に参加できます。つまり、Samba の実行などのサービスを提供できます。NAT ネットワークの背後から Samba を提供できるとは思えません。

関連情報