互換性を確保するために、ビッグ エンディアン システムでいくつかのソフトウェアをテストしようとしています。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 を提供できるとは思えません。