Embed presentation
Download as PDF, PPTX
OpenIndiana で仮想ネットワークを構築する 東京OpenSolaris 勉強会 2012.04 原口 章司 mail: shoji.haraguchi@gmail.com twitter: @shojih
はじめに ●くろまる 小さなPC の中に仮想ネットワークを構築します ●くろまる Crossbow(仮想wire) と Zone を使います ●くろまる PC 1台でエンタープライズネットワーク環境を仮想で実現します ●くろまる 仮想ネットワークの上のそれぞれのサーバ設定を簡単に説明します ●くろまる デモで使用しているドメイン名等は *フィクション* (笑) です ●くろまるOpenIndiana 151aですので、Oracle Solaris 11 で同様に構築するに は設定方法が異なります、特にZone とネットワークの設定がかなり異な ります。
使用した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
仮想ネットワーク構成図
デモ環境へのアクセス ●くろまる 聞くよりも実際に見てみたい方は以下の方法で覗いてみてください。 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 です。
basezone の作成 ●くろまるGlobalZone 中にたくさんの Local Zone を作成しますが、実際には複 製(clone) で作成するので、インストールに時間がかかるのは最初の basezone の作成だけです。 # cat /zones/cfgs/base <-たくさん zone を作るので config ファイルを /zones/cfgs にまとめています。 create -b set zonepath=/zones/basezone set autoboot=false set ip-type=exclusive add net set physical=base0 end # 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 等の設定 > ~. コンソールから抜ける
basezone の設定 ●くろまるDefault user の追加、ネットワーク設定、追加 pkg インストール。ネット ワーク構成など、システム構成は複製で引き継がれませんが、ユーザ情 報や追加 インストールしたパッケージは複製されます # zlogin basezone basezone # useradd -u 100 -g staff -s /bin/bash -m build1 basezone # passwd build1 basezone # cat /etc/sudoers build1 ALL=(ALL) ALL build1 ユーザの権限を記入しておく basezone # vi /resolv.conf nameserver 192.168.10.254 basezone # vi /etc/nsswitch.conf hosts: files dns ipnodes: files dns basezone # pkg refresh basename # pkg install slim_install デスクトップとして必要なパッケージはまとめてインストール basename # exit # zoneadm -z basezone halt
(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
DNS サーバの作成 ●くろまる エンタープライズっぽくするために、まずDNS サーバを立てます # cat /zones/cfgs/nameserver create -b set zonepath=/zones/nameserver set autoboot=true set ip-type=exclusive add net set physical=name0 end # 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
DNS サーバの設定(1) ●くろまる DNS サーバにするには bind パッケージを追加インストールします。 nameserver # pkg install service/network/dns/bind nameserver # 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"; };
DNS サーバの設定(2) ●くろまる DNS サーバの設定の続き root@nameserver:~# cd /var/named root@nameserver:/var/named# ls 0.0.127.in-addr.arpa 10.168.192.in-addr.arpa localhost.zone suncom.zone root@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
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.120 www IN A 192.168.10.121 blogs IN A 192.168.10.122 rails IN A 192.168.10.123 pkgs IN A 192.168.10.124 mail IN A 192.168.10.125 ... root@nameserver:/var/named#
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. ...
DNS サーバの起動と確認 ●くろまるnamed.conf 、正引き、逆引きリストの設定が完了したら、DNS service を起動する。 nameserver # vi /etc/resolv.conf nameserver 127.0.0.1 search sun.com nameserver # svcadm enable svc:/network/dns/server:default nameserver # host ns1.sun.com ns1.sun.com has address 192.168.10.120 期待した IPが返ると OK nameserver # host 192.168.10.120 120.10.168.192.in-addr.arpa domain name pointer ns1.sun.com. OK nameserver #
Webサーバの設定 ●くろまるWeb サーバ用には apache-22 を使っています。独立したサーバにす ることもないとおもいましたが、 www.xxx.com でアクセスできるように 別のZone で立ててみました。 # cat /zones/cfgs/webserver create -b set zonepath=/zones/webserver set autoboot=true set ip-type=exclusive add net set physical=web0 end # 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 webserver webserver # pkg install web/server/apache-22 webserver # svcadm enable svc:/network/http:apache22
MAILサーバ ●くろまるOpenIndiana のレポジトリには、簡単に使えそうなメールサーバが見 当たりませんでしたので、オープンソースの Apache James を使ってみ ました。 尚、James は pure Java で POP3 のみに対応しています。 # cat /zones/cfgs/mailserver create -b set zonepath=/zones/mailserver set autoboot=true set ip-type=exclusive add net set physical=mail0 end # 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 mailserver mailserver # cd /opt mailserver # wget http://ftp.jaist.ac.jp/pub/apache//james/server/apache-james-2.3.2.tar.gz mailserver # gtar xvf ./apache-james-2.3.2.tar.gz
MAILサーバの設定(1) ●くろまる James Mail Server のための必要な設定 mailserver # cd /opt/james-2.3.2/bin James を展開したdirectroty の bin の下 mailserver # chmod +x ./phoenix.sh ./run.bat ./run.sh mailserver # cd /opt/james-2.3.2/apps/james/SAR-INF mailserver # 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/bin mailserver # export JAVA_HOME=/usr/java mailserver # export PHOENIX_HOME=/opt/james-2.3.2 mailserver # ./run.sh James の起動
MAILサーバの設定(2) ●くろまる James Mail Server のための必要な設定 mailserver # su – build1 build1@mailserver:~$ telnet localhost 4555 James の設定には ポート4555 に telnet する Trying ::1... Connected to localhost. Escape character is '^]'. JAMES Remote Administration Tool 2.3.2 Please enter your login and password Login id: root Password: root Welcome root. HELP for a list of commands adduser build1 build1 build1 というユーザ名と build1 用の build1 というパスワードを追加 User build1 added quit これでデモ仮想環境の sun.com というローカルドメイン内では、 POP3 server : mail.sun.com, SMTP Server: mail.sun.com と設定することで Mail Client (thunderbird とか)から使用可能になります。 DNSサーバとの連系で、build1@sun.com に送られたメールも build1@mail.sun.com と同じように処理されま す。尚、メールのバケツリレーのための設定はしてませんので、ドメイン外部へのメールの送受信はこの状態では不可。
ブログサーバの設定(1) ●くろまる 簡単に設定できるので Wordpress を使用しています。 <blogserver zone の作成は他と同じなので省略します> blogserver # pkg install amp amp クラスタ (Apache, MySQL, PHP)を追加インストールします。 blogserver # cd /var/tmp blogserver # wget http://ja.wordpress.org/wordpress-3.3.1-ja.tar.gz blogserver # cd /var/apache2/2.2/htdocs blogserver # gtar -xvf /var/tmp/wordpress-3.3.1-ja.tar.gz blogserver # cd wordpress blogserver # cp wp-config-sample.php wp-config.php blogserver # vi wp-config.php 下記3行だけ書き換える この例では user wp, passowd wp define('DB_NAME', 'wordpress'); define('DB_USER', 'wp'); define('DB_PASSWORD', 'wp'); blogserver # svcadm enable svc:/network/http:apache22 blogserver # svcadm enable svc:/application/database/mysql:version_51
ブログサーバの設定(2) ●くろまる 簡単に設定できるので Wordpress を使用しています。 blogserver # svcadm enable svc:/application/database/mysql:version_51 blogserver # /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/ で私のブログが参照できます。
Firewall ●くろまるGlobalZone 上に新たな subnet を構築する場合は、仮想スイッチを作 成します。また、subnet 間には router を設置し、その router に ipfilter でファイアフォール化することで subnet のアクセス制御ができます。 # dladm create-etherstub sw0 # cat /zones/cfgs/firewall create -b set zonepath=/zones/firewall set autoboot=true set ip-type=exclusive add net set physical=fire0 end add net set 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
Firewallの設定(1) ●くろまる ipfilter のための必要な設定 firewall # ipadm show-addr ADDROBJ TYPE STATE ADDR lo0/v4 static ok 127.0.0.1/8 fire0/_a static ok 192.168.100.1/24 fire1/_a static ok 192.168.10.10/24 lo0/v6 static ok ::1/128 firewall # /usr/sbin/routeadm -e ipv4-forwarding firewall # /usr/sbin/routeadm -u firewall # ifconfig fire0 router firewall # ifconfig fire1 router firewall # cat /etc/ipf/ipnat.conf map fire1 192.168.100.0/24 -> 0/32 portmap tcp/udp auto map fire1 192.168.100.0/24 -> 0/32 firewall # 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 の設定を参照するようにはなってないので、この設定が必要です。
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 lo0 pass in quick on lo0 # block in log quick on fire1 all with opt lsrr block in log quick on fire1 all with opt ssrr block in log quick from any to any with ipopts block 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:default firewall # ipfstat bad packets: in 0 out 0 IPv6 packets: in 0 out 0 input packets: blocked 0 passed 23348 nomatch 23348 counted 0 short 0 output packets: blocked 0 passed 15293 nomatch 15293 counted 0 short 0 ... Result cache hits(in): 15615 (out): 8646 IN Pullups succeeded:0 failed: 0 OUT Pullups succeeded: 0 failed: 0
その他サーバや環境設定 ●くろまる 説明は省略しますが、他にも下記ようなサーバを設定しています。 ●くろまる 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 で 構築しています。
Tips(2) sysidcfg ファイル ●くろまる Zone インストール後の system config 設定を省略する方法 # cat /zones/sysidsfgs/sample_sysidcfg erminal=vt100 security_policy=NONE network_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=NONE name_service=DNS {domain_name=sun.com name_server=192.168.10.120 search=sun.com } nfs4_domain=dynamic timezone=Japan root_password=AAZ14d3MmkU6U # cp sample_sysidcfg /zones/xxxserver/root/etc/sysidcfg サンプルのような sysidcfg を作成して、zone 複製後、 初期起動前に /etc/sysidcfg に置くと、初期起動時の system configuration 設定を省略させることができます。
まとめ ●くろまる 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 の制限を感 じることはほとんどありません。ネットワークの学習には最適です