OpenIndianaでCrossbow
NAISTにはプロジェクト実習と言うのがありまして、その実習で触る事になったCrossbowについて色々メモって行こうと思います。@chmod707にも頼まれた事だしw
OpenIndianaというのはOpenSolarisの後継無償OSです。現在Build 148で、Solaris 11との互換性があるとのこと。
DebianやUbuntuでヌクヌクしてた私にとってSolarisは半端無く敷居が高く、VMに入れても使いこなせずじまい…今回はリベンジできるといいですが…
もう一つ、CrossbowというのはSolarisで利用出来るネットワーク仮想化技術です。仮想スイッチだろうがルータだろうが、なんでも作れちゃうらしいです。
作業環境は以下の通り。
Xen
Dom0 : Debian 6.0.2
DomU : OpenIndiana Build 148
作成するネットワークについて
三角形のトポロジで、ルータAがWANへの足を持っています。
ルータAとルータB, ルータCとはそれぞれvnic_a1, vnic_a2で接続されます。
ルータBとルータCはそれぞれにホストを持ちます。
準備:nwamデーモンを停止する
まずは、現在動いているネットワーク構成サービスの一覧を表示させます。
# svcs network/physical STATE STIME FMRI disabled 12:10:40 svc:/network/physical:default online 12:10:50 svc:/network/physical:nwam
標準では、Network Auto-Magic(nwam)デーモンが動いています。
Crossbowを使う場合これは邪魔になるので、停止させます。
そして、NIC(e1000g0)をdefaultサービスでDHCPを利用する様に設定します。(NICの名前を事前にifconfig -aで確認しておきましょう)
# svcadm disable svc:/network/physical:nwam # touch /etc/hostname.xnf0 # touch /etc/dhcp.xnf0
defaultサービスを使う準備が出来たので有効にします。
# svcadm enable svc:/network/physical:default # svcs network/physical STATE STIME FMRI disabled 12:18:36 svc:/network/physical:nwam offline* 12:18:36 svc:/network/physical:default (しばらくすると、) STATE STIME FMRI disabled 12:18:36 svc:/network/physical:nwam online 12:19:50 svc:/network/physical:default
NICの状態を確認します。
# ifconfig -a lo0: flags=2001000849<UP,LOOPBACK,RUNNING,MULTICAST,IPv4,VIRTUAL> mtu 8232 index 1 inet 127.0.0.1 netmask ff000000 xnf0: flags=1004843<UP,BROADCAST,RUNNING,MULTICAST,DHCP,IPv4> mtu 1500 index 7 inet 192.168.122.7 netmask ffffff00 broadcast 192.168.122.255 ether lo0: flags=2002000849<UP,LOOPBACK,RUNNING,MULTICAST,IPv6,VIRTUAL> mtu 8252 index 1
仮想スイッチ、仮想NICを追加する
VNIC(仮想NIC)を追加します。このVNICは、言わば各ネットワーク機器、ホストのポートに相当する物です。VNIC同士を繋げるには仮想スイッチを使用します。
# dladm create-etherstub vswadm0 # dladm create-etherstub vswadm1 # dladm create-etherstub vswadm2 # dladm create-etherstub vswadm3 # dladm create-etherstub vswadm4 # dladm create-etherstub vswadm5 # dladm show-etherstub LINK vswadm0 vswadm1 vswadm2 vswadm3 vswadm4 vswadm5 # dladm create-vnic -l vswadm0 vnic0 # dladm create-vnic -l vswadm0 vnic_a0 # dladm create-vnic -l vswadm1 vnic_a1 # dladm create-vnic -l vswadm2 vnic_a2 # dladm create-vnic -l vswadm1 vnic_b0 # dladm create-vnic -l vswadm3 vnic_b1 # dladm create-vnic -l vswadm4 vnic_b2 # dladm create-vnic -l vswadm2 vnic_c0 # dladm create-vnic -l vswadm3 vnic_c1 # dladm create-vnic -l vswadm5 vnic_c2 # dladm create-vnic -l vswadm4 vnic_host_b0 # dladm create-vnic -l vswadm5 vnic_host_c0 # dladm show-link LINK CLASS MTU STATE BRIDGE OVER xnf0 phys 1500 up -- -- vswadm0 etherstub 9000 unknown -- -- vswadm1 etherstub 9000 unknown -- -- vswadm2 etherstub 9000 unknown -- -- vswadm3 etherstub 9000 unknown -- -- vswadm4 etherstub 9000 unknown -- -- vswadm5 etherstub 9000 unknown -- -- vnic0 vnic 9000 up -- vswadm0 vnic_a0 vnic 9000 up -- vswadm0 vnic_a1 vnic 9000 up -- vswadm1 vnic_a2 vnic 9000 up -- vswadm2 vnic_b0 vnic 9000 up -- vswadm1 vnic_b1 vnic 9000 up -- vswadm3 vnic_b2 vnic 9000 up -- vswadm4 vnic_c0 vnic 9000 up -- vswadm2 vnic_c1 vnic 9000 up -- vswadm3 vnic_c2 vnic 9000 up -- vswadm5 vnic_host_b0 vnic 9000 up -- vswadm4 vnic_host_c0 vnic 9000 up -- vswadm5
Zonesの作成
まだこのネットワークに足りないのは、ルータとホストです。ルータやホストはSolarisのZones機能を用いて作成します。
参考:
Zones機能を用いると、各ゾーンに一つ一つ個別のIPアドレスを持たせ完全に隔離されたネットワークサービスを動作させる事ができます(同じport番号上で同時にサービスを動作させても競合しない、ルーティングテーブルも各ゾーンで持つ事が可能)。
Solarisには大域ゾーンと非大域ゾーンがありますが、非大域ゾーンは大域ゾーンからブートされます。大域ゾーンは言わばホストマシンで、非帯域ゾーンが行う通信の外への窓口となります。Zonesの作成には対話コマンドを用いる方法とテンプレートを作成しておく方法などがある様です。今回はテンプレートを作成してみます。
templateゾーンの作成
# zfs create rpool/zones # zfs set compression=on rpool/zones # zfs set mountpoint=/zones rpool/zones # zfs list 〜新しく作成したファイルシステムが表示される〜
次に、templateファイルを以下の内容で作成します。
# cat template create -b set zonepath=/zones/template set ip-type=exclusive set autoboot=false commit
templateファイルを作成したディレクトリで以下のコマンドを実行します。リポジトリからダウンロードする様なので、インターネットへ接続している必要があります。
この操作には私の環境で約20分かかりました。ゾーンのインストールに失敗した時は、一旦削除(参考サイト参照)してやり直します。
# zonecfg -z template -f template # zoneadm -z template install A ZFS file system has been created for this zone. Publisher: Using openindiana.org (http://pkg.openindiana.org/dev/ ). Publisher: Using opensolaris.org (http://pkg.openindiana.org/legacy/). Image: Preparing at /zones/template/root. Cache: Using /var/pkg/download. Sanity Check: Looking for 'entire' incorporation. Installing: Core System (output follows) Packages to install: 1 Create boot environment: No 〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜 Note: Man pages can be obtained by installing SUNWman Postinstall: Copying SMF seed repository ... done. Postinstall: Applying workarounds. Done: Installation completed in 1317.167 seconds. Next Steps: Boot the zone, then log into the zone console (zlogin -C) to complete the configuration process.
各ルータ、ホストのゾーンコンフィグ作成
templateゾーンと同様に各ルータ、ホストのコンフィグファイルを作成します。
host_b
# cat host_b create -b set zonepath=/zones/host_b set ip-type=exclusive set autoboot=false add net set physical=vnic_host_b0 end commit
host_c
# cat host_c create -b set zonepath=/zones/host_c set ip-type=exclusive set autoboot=false add net set physical=vnic_host_c0 end commit
vrouter_a
# cat vrouter_a create -b set zonepath=/zones/vrouter_a set ip-type=exclusive set autoboot=false add net set physical=vnic_a0 end add net set physical=vnic_a1 end add net set physical=vnic_a2 end commit
vrouter_b, vrouter_cは同様に作成。
ここで、sysidcfg作成を行う事でより高速にゾーンの作成が可能ですが割愛します。
sysidcfgについてはこちらを参考にしてください。
Zonesの起動
準備が整いましたので、テンプレートゾーンをクローンして各ゾーンを起動していきます。(クローンに失敗する事がありましたが、普通にインストールして以降はクローン出来るようになりました。気持ち悪いですが…とりあえず放置)
# zonecfg -z host_b -f host_b # zoneadm -z host_b clone template # zoneadm -z host_b boot
起動出来たら、ログインして基本的な設定(IPアドレス等)を行います。
ログアウトするには、「~.」を入力します。
# zlogin -C host_b What type of terminal are you using? Type the number of your choice and press Return: 6 ... host-a console login: ~. [Connection to zone 'host_a' console closed]
同様に各ホスト、ルータの分だけ繰り返します。
# zoneadm list -v
以上でゾーンの作成が終わりました。IPアドレス等を正しく設定すれば、隣のRouterまで通信が出来る事が確認出来ます。
参考文献
- Oracle Solaris11 Documentation
- Oracle Solaris11 Network Virtualization and Resource Management
- OpenSolaris2009.06 で Crossbow を使用して仮想ネットワーク環境を構築する
- Oracle Solaris 11 Express Networking Virtualization Technology(DocumentationにOverview有り)
- Crossbow Virtual Wire Demo Tool(GUIでCrossbow)
- Upcoming Solaris Features: Crossbow - Part 1: Virtualisation
- 【セミナー動画/資料】Solaris 11 Express:Crossbow
- CrossBow: Solaris Network Virtualization & Resource Provisioning
- Getting Started with Solaris Network Virtualization ("Crossbow")