26
OpenIndiana で仮想ネットワークを構築する 東京OpenSolaris 勉強会 2012.04 原口 章司 mail: [email protected] twitter: @shojih

OpenIndiana vWire Demo (Japanese)

Embed Size (px)

DESCRIPTION

2012.04 OpenSolaris Study Meeting

Citation preview

Page 1: OpenIndiana vWire Demo (Japanese)

OpenIndiana で仮想ネットワークを構築する

東京OpenSolaris 勉強会 2012.04

原口 章司 mail: [email protected]: @shojih

Page 2: OpenIndiana vWire Demo (Japanese)

はじめに

● 小さなPC の中に仮想ネットワークを構築します

● Crossbow(仮想wire) と Zone を使います

● PC 1台でエンタープライズネットワーク環境を仮想で実現します

● 仮想ネットワークの上のそれぞれのサーバ設定を簡単に説明します

● デモで使用しているドメイン名等は *フィクション* (笑) です

● OpenIndiana 151aですので、Oracle Solaris 11 で同様に構築するには設定方法が異なります、特にZone とネットワークの設定がかなり異なります。

Page 3: OpenIndiana vWire Demo (Japanese)

使用したPCの紹介

● Shuttle XS35 V2● Intel ATOM D525

● 1.8GHz Dual Core

● 4GB Memory

● 64 bit - 4 スレッド

● 省電力、静音、手頃な価格

● OI/S11 で使用するには村山氏のNIC ドライバー (jmge)が必要

● Vt 非対応で OI-KVM使用不可

● 2本のHDD: 74GB, 149GB

Page 4: OpenIndiana vWire Demo (Japanese)

仮想ネットワーク構成図

Page 5: OpenIndiana vWire Demo (Japanese)

デモ環境へのアクセス

● 聞くよりも実際に見てみたい方は以下の方法で覗いてみてください。

WiFi: SSID: test_ssid ( Wep パスワードなし)

192.168.10.201 – 192.168.10.220 まで guest 用 Zone を作ってあります。(host 名: vnc1 ~ vnc20)● ssh で login する方: ssh -l build1 <IP address> パスワードはす

べての zone で、build1 です。● vncviewer の利用が可能な方 vncviewer <IP address>:1 パス

ワードは build1 です。

Page 6: OpenIndiana vWire Demo (Japanese)

basezone の作成

● GlobalZone 中にたくさんの Local Zone を作成しますが、実際には複製(clone) で作成するので、インストールに時間がかかるのは最初のbasezone の作成だけです。

# cat /zones/cfgs/base <-たくさん zone を作るので config ファイルを /zones/cfgs にまとめています。create -bset zonepath=/zones/basezoneset autoboot=falseset ip-type=exclusiveadd netset physical=base0end# zonecfg -z basezone -f /zones/cfgs/basezone# dladm create-vnic -l jmge0 base0# zoneadm -z basezone install# zoneadm -z basezone boot# zlogin -C basezone< host, IP address, timezone, root password 等の設定 >

~. � コンソールから抜ける

Page 7: OpenIndiana vWire Demo (Japanese)

basezone の設定

● Default user の追加、ネットワーク設定、追加 pkg インストール。ネットワーク構成など、システム構成は複製で引き継がれませんが、ユーザ情報や追加 インストールしたパッケージは複製されます

# zlogin basezonebasezone # useradd -u 100 -g staff -s /bin/bash -m build1basezone # passwd build1basezone # cat /etc/sudoersbuild1 ALL=(ALL) ALL � build1 ユーザの権限を記入しておく

basezone # vi /resolv.confnameserver 192.168.10.254basezone # vi /etc/nsswitch.conf

hosts: files dnsipnodes: files dnsbasezone # pkg refreshbasename # pkg install slim_install � デスクトップとして必要なパッケージはまとめてインストールbasename # exit# zoneadm -z basezone halt

Page 8: OpenIndiana vWire Demo (Japanese)

(Tips 1) dbus-daemon

● OI151a の既知の問題で、dbus-daemon が non-globalzone 上では動作しない。影響ないのですが、svcs -xv でのメッセージが気になる方は、/lib/svc/method/svc-dbus を変更する。参考: https://www.illumos.org/issues/1249# diff -u /lib/svc/method/svc-dbus_orig /lib/svc/method/svc-dbus--- /lib/svc/method/svc-dbus_orig Sat Jul 23 23:30:20 2011+++ /lib/svc/method/svc-dbus Sat Jul 23 23:31:24 2011@@ -38,12 +38,12 @@ /usr/bin/dbus-uuidgen --ensure fi

-if smf_is_nonglobalzone; then- /usr/sbin/svcadm disable -t svc:/system/dbus- echo "dbus-daemon cannot be run in non-global zones" - sleep 5 &- exit $SMF_EXIT_OK-fi+#if smf_is_nonglobalzone; then+# /usr/sbin/svcadm disable -t svc:/system/dbus+# echo "dbus-daemon cannot be run in non-global zones" +# sleep 5 &+# exit $SMF_EXIT_OK+#fi

Page 9: OpenIndiana vWire Demo (Japanese)

DNS サーバの作成

● エンタープライズっぽくするために、まずDNS サーバを立てます

# cat /zones/cfgs/nameservercreate -bset zonepath=/zones/nameserverset autoboot=trueset ip-type=exclusiveadd netset physical=name0end# zonecfg -z nameserver -f /zones/cfgs/nameserver# dladm create-vnic -l jmge0 name0# zoneadm -z nameserver clone basezone# zoneadm -z nameserver boot# zlogin -C nameserver

Page 10: OpenIndiana vWire Demo (Japanese)

DNS サーバの設定(1)

● DNS サーバにするには bind パッケージを追加インストールします。nameserver # pkg install service/network/dns/bindnameserver # vi /etc/named.conf � このファイルを新規に作成します。< subnet が 192.168.10.0 でDNS が 192.168.10.254 の場合は>options { directory "/var/named";  <- /var/named に DNS 関連のファイルをおくことにします。 forwarders { 192.168.10.254; }; allow-query { 127.0.0.1; 192.168.10.0/24; };};

zone "localhost" IN { type master; file "localhost.zone";};

zone "0.0.127.in-addr.arpa" IN { type master; file "0.0.127.in-addr.arpa";};

zone "sun.com" IN { type master; file "0.0.127.in-addr.arpa";};

zone "sun.com" IN { � 個人的な趣味で sun.com というドメイン名をデモでは使っています type master; file "suncom.zone";};

zone "10.168.192.in-addr.arpa" IN { type master; file "10.168.192.in-addr.arpa";};

Page 11: OpenIndiana vWire Demo (Japanese)

DNS サーバの設定(2)

● DNS サーバの設定の続きroot@nameserver:~# cd /var/namedroot@nameserver:/var/named# ls0.0.127.in-addr.arpa 10.168.192.in-addr.arpa localhost.zone suncom.zoneroot@nameserver:/var/named# cat 0.0.127.in-addr.arpa$TTL 1D@ IN SOA localhost. root.localhost. ( 2012041001 � シリアル番号は10桁数字を適当につけてます。 3H 15M 1W 1D ) IN NS localhost.1 IN PTR localhost.root@nameserver:/var/named# cat localhost.zone$TTL 1D@ IN SOA localhost. root.localhost. ( 2012041001 3H 15M 1W 1D ) IN NS localhost. IN A 127.0.0.1

Page 12: OpenIndiana vWire Demo (Japanese)

DNSサーバの設定(3)

● DNS サーバの設定の続き (ドメイン名からの正引きリスト)root@nameserver:/var/named# cat suncom.zone$TTL 1D@ IN SOA ns1.sun.com. root.sun.com. ( 2012041001 3H 15M 1W 1D )

IN NS ns1.sun.com.IN MX 0 mail.sun.com. � MXレコードは mail server の設定で必要になる

ns1 IN A 192.168.10.120www IN A 192.168.10.121blogs IN A 192.168.10.122rails IN A 192.168.10.123pkgs IN A 192.168.10.124mail IN A 192.168.10.125…

root@nameserver:/var/named#

Page 13: OpenIndiana vWire Demo (Japanese)

DNS サーバの設定(4)

● DNS サーバの設定の続き (IPアドレスからの逆引きリスト)root@nameserver:/var/named# cat 10.168.192.in-addr.arpa$TTL 1D@ IN SOA ns1.sun.com. root.sun.com. ( 2012041001 3H 15M 1W 1D ) IN NS ns1.sun.com.120 IN PTR ns1.sun.com.121 IN PTR www.sun.com.122 IN PTR blogs.sun.com.123 IN PTR rails.sun.com.124 IN PTR pkgs.sun.com.125 IN PTR mail.sun.com....

Page 14: OpenIndiana vWire Demo (Japanese)

DNS サーバの起動と確認

● named.conf 、正引き、逆引きリストの設定が完了したら、DNS service を起動する。

nameserver # vi /etc/resolv.confnameserver 127.0.0.1search sun.com

nameserver # svcadm enable svc:/network/dns/server:defaultnameserver # host ns1.sun.comns1.sun.com has address 192.168.10.120 � 期待した IPが返ると OKnameserver # host 192.168.10.120120.10.168.192.in-addr.arpa domain name pointer ns1.sun.com. � OKnameserver #

Page 15: OpenIndiana vWire Demo (Japanese)

Webサーバの設定

● Web サーバ用には apache-22 を使っています。独立したサーバにすることもないとおもいましたが、 www.xxx.com でアクセスできるように 別のZone で立ててみました。

# cat /zones/cfgs/webservercreate -bset zonepath=/zones/webserverset autoboot=trueset ip-type=exclusiveadd netset physical=web0end# zonecfg -z webserver -f /zones/cfgs/webserver# dladm create-vnic -l jmge0 web0# zoneadm -z webserver clone basezone# zoneadm -z webserver boot# zlogin -C webserver<各設定は省略># zlogin webserverwebserver # pkg install web/server/apache-22webserver # svcadm enable svc:/network/http:apache22

Page 16: OpenIndiana vWire Demo (Japanese)

MAILサーバ

● OpenIndiana のレポジトリには、簡単に使えそうなメールサーバが見当たりませんでしたので、オープンソースの Apache James を使ってみました。 尚、James は pure Java で POP3 のみに対応しています。

# cat /zones/cfgs/mailservercreate -bset zonepath=/zones/mailserverset autoboot=trueset ip-type=exclusiveadd netset physical=mail0end# zonecfg -z mailserver -f /zones/cfgs/mailserver# dladm create-vnic -l jmge0 mail0# zoneadm -z mailserver clone basezone# zoneadm -z mailserver boot# zlogin -C mailserver<各設定は省略># zlogin mailservermailserver # cd /optmailserver # wget http://ftp.jaist.ac.jp/pub/apache//james/server/apache-james-2.3.2.tar.gzmailserver # gtar xvf ./apache-james-2.3.2.tar.gz

Page 17: OpenIndiana vWire Demo (Japanese)

MAILサーバの設定(1)

● James Mail Server のための必要な設定mailserver # cd /opt/james-2.3.2/bin � James を展開したdirectroty の bin の下mailserver # chmod +x ./phoenix.sh ./run.bat ./run.shmailserver # cd /opt/james-2.3.2/apps/james/SAR-INFmailserver # vi config.xml � 多少難解ですが config.xml を環境に合わせて設定します。...<config><james> <servernames autodetect="true" autodetectIP="true"> <servername>localhost</servername> <servername>maiil.sun.com</servername> <servername>sun.com</servername> </servernames>...<dnsserver> <servers> <server>192.168.10.120</server> <- DNSに MX の記述があれば @domain に変換 <server>127.0.0.1</server> </servers>...

mailserver # cd /opt/james-2.3.2/binmailserver # export JAVA_HOME=/usr/javamailserver # export PHOENIX_HOME=/opt/james-2.3.2mailserver # ./run.sh � James の起動

Page 18: OpenIndiana vWire Demo (Japanese)

MAILサーバの設定(2)

● James Mail Server のための必要な設定mailserver # su – build1build1@mailserver:~$ telnet localhost 4555 � James の設定には ポート4555 に telnet するTrying ::1...Connected to localhost.Escape character is '^]'.JAMES Remote Administration Tool 2.3.2Please enter your login and passwordLogin id:rootPassword:rootWelcome root. HELP for a list of commandsadduser build1 build1 � build1 というユーザ名と build1 用の build1 というパスワードを追加User build1 addedquit

これでデモ仮想環境の sun.com というローカルドメイン内では、 POP3 server : mail.sun.com, SMTP Server: mail.sun.com と設定することで Mail Client (thunderbird とか)から使用可能になります。DNSサーバとの連系で、[email protected] に送られたメールも [email protected] と同じように処理されます。尚、メールのバケツリレーのための設定はしてませんので、ドメイン外部へのメールの送受信はこの状態では不可。

Page 19: OpenIndiana vWire Demo (Japanese)

ブログサーバの設定(1)

● 簡単に設定できるので Wordpress を使用しています。

<blogserver zone の作成は他と同じなので省略します>blogserver # pkg install amp � amp クラスタ (Apache, MySQL, PHP)を追加インストールします。blogserver # cd /var/tmpblogserver # wget http://ja.wordpress.org/wordpress-3.3.1-ja.tar.gzblogserver # cd /var/apache2/2.2/htdocsblogserver # gtar -xvf /var/tmp/wordpress-3.3.1-ja.tar.gzblogserver # cd wordpressblogserver # cp wp-config-sample.php wp-config.phpblogserver # vi wp-config.php � 下記3行だけ書き換える この例では user wp, passowd wpdefine('DB_NAME', 'wordpress');define('DB_USER', 'wp');define('DB_PASSWORD', 'wp');blogserver # svcadm enable svc:/network/http:apache22blogserver # svcadm enable svc:/application/database/mysql:version_51

Page 20: OpenIndiana vWire Demo (Japanese)

ブログサーバの設定(2)

● 簡単に設定できるので Wordpress を使用しています。

blogserver # svcadm enable svc:/application/database/mysql:version_51blogserver # /usr/mysql/bin/mysql -u root> create database wordpress;> grant all privileges on wordpress.* to wp@localhost identified by 'wp';> flush privileges ;> quit ;blogserver # svcadm restart svc:/network/http:apache22

あとは ブラウザから http://localhost/wordpress/ にアクセスして各種設定を行いますデモ仮想環境では、 http://blogs.sun.com/hara/ で私のブログが参照できます。

Page 21: OpenIndiana vWire Demo (Japanese)

Firewall

● GlobalZone 上に新たな subnet を構築する場合は、仮想スイッチを作成します。また、subnet 間には router を設置し、その router に ipfilter でファイアフォール化することで subnet のアクセス制御ができます。

# dladm create-etherstub sw0# cat /zones/cfgs/firewallcreate -bset zonepath=/zones/firewallset autoboot=trueset ip-type=exclusiveadd netset physical=fire0endadd netset physical=fire1 � router や firewall では VNIC を2個設定しておきますend# dladm create-vnic -l sw0 fire0# dladm create-vnic -l jmge0 fire1# zoneadm -z firewall clone basezone# zoneadm -z firewall boot# zlogin -C firewall<各設定は省略># zlogin firewall

Page 22: OpenIndiana vWire Demo (Japanese)

Firewallの設定(1)

● ipfilter のための必要な設定firewall # ipadm show-addrADDROBJ TYPE STATE ADDRlo0/v4 static ok 127.0.0.1/8fire0/_a static ok 192.168.100.1/24fire1/_a static ok 192.168.10.10/24lo0/v6 static ok ::1/128firewall # /usr/sbin/routeadm -e ipv4-forwardingfirewall # /usr/sbin/routeadm -ufirewall # ifconfig fire0 routerfirewall # ifconfig fire1 routerfirewall # cat /etc/ipf/ipnat.confmap fire1 192.168.100.0/24 -> 0/32 portmap tcp/udp automap fire1 192.168.100.0/24 -> 0/32firewall # svccfg -s ipfilter:default setprop firewall_config_default/policy = astring: "custom"firewall # svccfg -s ipfilter:default setprop firewall_config_default/custom_policy_file = astring: "/etc/ipf/ipf.conf"firewall # svcadm refresh ipfilter:default

(Tips) Default では、/etc/ipf/ipf.conf の設定を参照するようにはなってないので、この設定が必要です。

Page 23: OpenIndiana vWire Demo (Japanese)

Firewallの設定(2)

● ipfilter のための必要な設定firewall # cat /etc/ipf/ipf.conf# See ipf(4) manpage for more information on# IP Filter rules syntax.pass out quick on lo0pass in quick on lo0#block in log quick on fire1 all with opt lsrrblock in log quick on fire1 all with opt ssrrblock in log quick from any to any with ipoptsblock in log quick on fire1 proto tcp all with short##block out log on fire1 all � この例では何もブロックしてない #block in log on fire1 all

firewall # svcadm enable ipfilter:defaultfirewall # ipfstatbad packets: in 0out 0 IPv6 packets: in 0 out 0 input packets: blocked 0 passed 23348 nomatch 23348 counted 0 short 0output packets: blocked 0 passed 15293 nomatch 15293 counted 0 short 0...Result cache hits(in): 15615 (out): 8646IN Pullups succeeded:0 failed: 0OUT Pullups succeeded: 0 failed: 0

Page 24: OpenIndiana vWire Demo (Japanese)

その他サーバや環境設定

● 説明は省略しますが、他にも下記ようなサーバを設定しています。

● pkgserver : /var/pkglocal の下に pkgrecv コマンドを使って OpenIndiana 151a のリポジトリを丸ごとコピーしています。デモ仮想環境では、pkgs.sun.com でアクセスでき、local domain 内では、publisher に pkgs.sun.com を指定することでインターネットに接続なしに追加 package install が可能です。

● cbe 1~ 3 (non-gui), test1~ test4 (GUI) 今年2月と3月に行われたOpenSolaris ハッカソンの build 環境を zone で構築しています。

● rubyonrails: netbeans, ruby on rails で web 開発環境を zone で構築しています。

Page 25: OpenIndiana vWire Demo (Japanese)

Tips(2) sysidcfg ファイル

● Zone インストール後の system config 設定を省略する方法# cat /zones/sysidsfgs/sample_sysidcfg

erminal=vt100security_policy=NONEnetwork_interface=primary {

hostname=basezone netmask=255.255.255.0 protocol_ipv6=no ip_address=192.168.10.100 netmask=255.255.255.0 default_route=192.168.10.254 }security_policy=NONEname_service=DNS {domain_name=sun.com

name_server=192.168.10.120search=sun.com }

nfs4_domain=dynamictimezone=Japanroot_password=AAZ14d3MmkU6U

# cp sample_sysidcfg /zones/xxxserver/root/etc/sysidcfg

サンプルのような sysidcfg を作成して、zone 複製後、 初期起動前に /etc/sysidcfg に置くと、初期起動時の system configuration 設定を省略させることができます。

Page 26: OpenIndiana vWire Demo (Japanese)

まとめ

● CrossBow や Zone のオーバーヘッドは意外にも小さく、こんな小さな PC でも仮想ネットワークは構築できちゃいます。

● 遊園地をひとりで貸切っているようなもので、シングルユーザで使用する分には負荷も少ないです

● 数十個の Zone を構築しているのに、ZFS のおかげでディスク使用量こんな程度です。

# zpool list

NAME SIZE ALLOC FREE EXPANDSZ CAP DEDUP HEALTH ALTROOT

pool 149G 10.6G 138G - 7% 1.51x ONLINE -

rpool 74G 16.3G 57.7G - 22% 1.00x ONLINE -

● Zone の自由度は高く、インストールや設定で Zone の制限を感じることはほとんどありません。ネットワークの学習には最適です