qemu networking (2)
記憶を失いかけている時点で復習してみるのも良いですね。参考にさせて頂いたのは以下エントリです。
このエントリにある /etc/qemu-if{up,down} が以下。
$ cat /etc/qemu-ifup #qemu-ifup /sbin/ifconfig eth1 down /sbin/ifconfig eth1 0.0.0.0 promisc up openvpn --mktun --dev tap0 ifconfig tap 0 0.0.0.0 up brctl addbr br0 brctl addif br0 eth1 brctl addif br0 tap0 brctl stp br0 off ifconfig br0 10.10.10.2 netmask 255.255.255.0 $ cat /etc/qemu-ifdown #qemu-ifdown ifconfig eth1 down ifconfig eth1 -promisc ifup eth1 ifconfig br0 down brctl delbr br0 openvpn --rmtun --dev tap0 $
手持ちのマシンでは eth1 なデバイスが無いので未使用の eth0 を使う方向でスクリプトを修正してます。で、手順としては /etc/qemu-ifup を実行して qemu 起動ということで以下。
$ sudo /etc/qemu-ifup Sun Aug 12 17:26:10 2012 TUN/TAP device tap0 opened Sun Aug 12 17:26:10 2012 Persist state set to: ON $ sudo qemu-system-arm -M versatilepb -kernel vmlinuz-2.6.32-5-versatile \ -initrd initrd.img-2.6.32-5-versatile -hda hda.img.qcow2 \ -append "root=/dev/sda1" -net nic -net tap,ifname=tap0,script=no
起動待ちの間に ifconfig -a してみたら以下な br0 と
br0 Link encap:Ethernet HWaddr 60:eb:69:b6:75:29 inet addr:10.10.10.2 Bcast:10.10.10.255 Mask:255.255.255.0 inet6 addr: fe80::62eb:69ff:feb6:7529/64 Scope:Link UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 RX packets:0 errors:0 dropped:0 overruns:0 frame:0 TX packets:15 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:0 RX bytes:0 (0.0 B) TX bytes:2735 (2.7 KB)
以下な tap0 ができてました。
tap0 Link encap:Ethernet HWaddr 7a:a0:34:64:ce:3e inet6 addr: fe80::78a0:34ff:fe64:ce3e/64 Scope:Link UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 RX packets:0 errors:0 dropped:0 overruns:0 frame:0 TX packets:8 errors:0 dropped:2 overruns:0 carrier:0 collisions:0 txqueuelen:100 RX bytes:0 (0.0 B) TX bytes:781 (781.0 B)
eth0 な出力は以下なカンジ。
eth0 Link encap:Ethernet HWaddr 60:eb:69:b6:75:29 UP BROADCAST PROMISC MULTICAST MTU:1500 Metric:1 RX packets:0 errors:0 dropped:0 overruns:0 frame:0 TX packets:0 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:1000 RX bytes:0 (0.0 B) TX bytes:0 (0.0 B) Interrupt:41 Base address:0xa000
プロミスキャスモードになってますね。この状態で起動したら qemu の中のホストな i/f に適切な IP アドレスを付与してあげれば通信可能になったはず。つうか dhcp でなんちゃらとかできんのかな。手動は色々な意味で微妙。
# ifconfig eth0 10.10.10.100 netmask 255.255.255.0
しかも route -n 見てみたら default route がありませんな。いちおうホスト側とゲスト側で ping の返事が戻ってきてるのは確認できました。つーことはこの状態で
- ゲスト側 default GW の設定盛り込み
- ホスト側でポート転送設定盛り込み
で、iptables の FORWARD な先頭の設定を削除すれば良いのかどうなのか。このあたりは確認の必要がありますね。i/f down および i/f 削除が必要なのかどうか。
盛り込み
ゲスト側で以下。
# route add default gw 10.10.10.2 eth0
また、ホスト側で以下。
# echo 1 > /proc/sys/net/ipv4/ip_forward
で、とりあえず iptables の設定のみ変更してみます (ホスト側)。
# iptables -D FORWARD 1
で、ゲスト側で www.google.co.jp に ping を投げてみましたが名前解決できてない。
# ping www.google.co.jp ping: unknown host www.google.co.jp #
む。/etc/resolv.conf 見てみたら
nameserver 8.8.8.8
になってます。やっぱ virbr0 な i/f の down および削除が必要らしいのか。
# ifconfig virbr0 down # brctl delbr virbr0
しても駄目。あらら、何が悪いのやら。これでゲストを再起動してみるか。というか、ここまでの設定を盛り込んだ上でゲストを起動しないと駄目なのかな。
再起動してみた
う、再起動しても駄目じゃん。名前解決ができてません。で、色々もごもご確認してたんですが masquerade なナニが足りてなかった模様。
ホスト側で以下が必要だったらしい。
# iptables -t nat -A POSTROUTING -s 10.10.10.0/24 -o wlan0 -j MASQUERADE
とりあえず
ホスト側も再起動してこの手順が正しいかどうかを確認してみます。
再確認
とりあえず手順としては以下?
- /etc/qemu-ifup 実行 (superuser
- echo 1 > /proc/sys/net/ipv4/ip_forward (superuser
- iptables -D FORWARD 1 (superuser
- iptables -t nat -A POSTROUTING -s 10.10.10.0/24 -o wlan0 -j MASQUERADE (superuser
した上で qemu なゲストを起動させて以下なカンジの i/f 設定盛り込みおよび経路の設定の盛り込み
- ifconfig eth0 10.10.10.100 netmask 255.255.255.0
- route add default gw 10.10.10.2 eth0
これで OK なのかどうなのか。つかゲスト側は dhcp でなんとかなりそげですね。