ファイヤープロジェクト
複数のUMLを立ち上げてみる
2007-01-09T00:20+09:00   matsu
複数の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=um
ARCHを忘れずに指定する.
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_fs
boot.shは起動用スクリプトで,ファイヤウォール以外のUMLでは,eth0のみ指定する.
linux-2.6.16.11 ubda1=./root_fs eth0=daemon
起動したら,ホスト名(/etc/hosstname),hosts(/etc/hosts),ネットワーク設定(/etc/network/interfaces)を修正して完了.
matsu(C)
Since 2002
Mail to matsu