複数のUMLを立ち上げてみる
複数のUMLを起動してネットワークで通信できるようにしてみた.
今回目指す構成を示す.
ポイントは以下.
- 一台のPC(UML host)にumlを複数立ち上げ,それらをuml_switchでつなぐことによって,ネットワーク(UML net)を構築する.
- UML netの一台をファイヤウォールとし,UML net内から外部への接続をマスカレードする.
- UML netのファイアウォールとUML hostはtapでつなぐ. これは前ページでやった.
ファイヤウォール用UMLは,マスカレードするために,iptablesを使用できるようにする.
今回は2.6.19で試してみた.
$ tar zxvf linux-2.6.19.tar.gz $ cd linux-2.6.19 $ cp arch/um/config.release ./.configここまでは前頁と同じである. つぎにiptablesを使用できるよう,menuconfigで指定する.
$ make menuconfig ARCH=umARCHを忘れずに指定する.
Networking -> Networking support -> Networking options ->Network packet filtering (replaces ipchains)下の
Core Netfilter Configuration IP: Netfilter Configuration ->IP tables support下などを設定する. あとは前頁と同様にビルドしてホストOSにインストールする.
$ fakeroot make-kpkg --revision uml.20070108 --arch um kernel_image # cd .. # dpkg -i kernel-uml-2.6.19_uml.20070108_i386.deb
前頁で作成したUML用のroot_fsをコピーする.
コピー数はUML net内のUML数.
次に,uml_switchを起動する.
$ uml_switchこれで,UML同士が通信できるようになる. 詳細は@itの記事等に書いてある. そして,前節で作成したUMLを起動する.
linux-2.6.19 ubda1=./uml/root_fs \ eth0=tuntap,tap0,,192.168.70.254 \ eth1=daemon先の図の用に,ファイヤウォール用UMLはネットワークインタフェースが二つある. 一つはeth0でtapに結びつけている. もう一つはeth1で後述のuml_switchに接続するために,"daemon"と指定する. 起動したら,あとはネットワーク設定である. 前頁で構築したUMLなので,eth0は設定済みで,eth1の設定とマスカレードの設定のみである. eth1の設定時の注意点としては,tap-eth0のネットワークアドレスと,eth1のネットワークアドレス(=UML netのアドレス)は,別にする. 次に,マスカレードの設定. 以下のようなことを行う(InnerNetの値は各自の環境に合わせる).
InnerNet=xxx.xxx.xxx.xxx/24 iptables -F iptables -P INPUT ACCEPT iptables -P FORWARD ACCEPT iptables -P OUTPUT ACCEPT iptables -t nat -F iptables -t nat -P PREROUTING ACCEPT iptables -t nat -P POSTROUTING ACCEPT iptables -t nat -P OUTPUT ACCEPT iptables -t nat -A POSTROUTING -d ! $InnerNet -s $InnerNet -j MASQUERADE
事前にコピーしておいた,root_fsを使用して,起動する.
私は整理のために各uml用にディレクトリを分けてみた.
$ ls -R .: uml1 uml2 uml3 ./uml1: boot.sh root_fs ./uml2: boot.sh root_fs ./uml3: boot.sh root_fsboot.shは起動用スクリプトで,ファイヤウォール以外のUMLでは,eth0のみ指定する.
linux-2.6.16.11 ubda1=./root_fs eth0=daemon起動したら,ホスト名(/etc/hosstname),hosts(/etc/hosts),ネットワーク設定(/etc/network/interfaces)を修正して完了.

