OpenIndiana vWire Demo (Japanese)

1,702 views
1,580 views

Published on

2012.04 OpenSolaris Study Meeting

Published in: Education
0 Comments
3 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
1,702
On SlideShare
0
From Embeds
0
Number of Embeds
5
Actions
Shares
0
Downloads
6
Comments
0
Likes
3
Embeds 0
No embeds

No notes for slide

OpenIndiana vWire Demo (Japanese)

  1. 1. OpenIndiana で仮想ネットワークを構築する 東京OpenSolaris 勉強会 2012.04 原口 章司 mail: shoji.haraguchi@gmail.com twitter: @shojih
  2. 2. はじめに● 小さなPC の中に仮想ネットワークを構築します● Crossbow(仮想wire) と Zone を使います● PC 1台でエンタープライズネットワーク環境を仮想で実現します● 仮想ネットワークの上のそれぞれのサーバ設定を簡単に説明します● デモで使用しているドメイン名等は *フィクション* (笑) です●OpenIndiana 151aですので、Oracle Solaris 11 で同様に構築するには設定方法が異なります、特にZone とネットワークの設定がかなり異なります。
  3. 3. 使用した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
  4. 4. 仮想ネットワーク構成図
  5. 5. デモ環境へのアクセス● 聞くよりも実際に見てみたい方は以下の方法で覗いてみてください。 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 です。
  6. 6. 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 等の設定 >~. コンソールから抜ける
  7. 7. 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.confhosts: files dnsipnodes: files dnsbasezone # pkg refreshbasename # pkg install slim_install デスクトップとして必要なパッケージはまとめてインストールbasename # exit# zoneadm -z basezone halt
  8. 8. (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
  9. 9. 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
  10. 10. 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";};
  11. 11. 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
  12. 12. 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#
  13. 13. 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....
  14. 14. DNS サーバの起動と確認●named.conf 、正引き、逆引きリストの設定が完了したら、DNS serviceを起動する。nameserver # vi /etc/resolv.confnameserver 127.0.0.1search sun.comnameserver # 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 #
  15. 15. 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
  16. 16. 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 # wgethttp://ftp.jaist.ac.jp/pub/apache//james/server/apache-james-2.3.2.tar.gzmailserver # gtar xvf ./apache-james-2.3.2.tar.gz
  17. 17. 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 の起動
  18. 18. 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, SMTPServer: mail.sun.com と設定することで Mail Client (thunderbird とか)から使用可能になります。DNSサーバとの連系で、build1@sun.com に送られたメールも build1@mail.sun.com と同じように処理されます。尚、メールのバケツリレーのための設定はしてませんので、ドメイン外部へのメールの送受信はこの状態では不可。
  19. 19. ブログサーバの設定(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
  20. 20. ブログサーバの設定(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/ で私のブログが参照できます。
  21. 21. 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
  22. 22. 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 setpropfirewall_config_default/custom_policy_file = astring: "/etc/ipf/ipf.conf"firewall # svcadm refresh ipfilter:default(Tips) Default では、/etc/ipf/ipf.conf の設定を参照するようにはなってないので、この設定が必要です。
  23. 23. 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 allfirewall # svcadm enable ipfilter:defaultfirewall # ipfstatbad packets: in 0 out 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
  24. 24. その他サーバや環境設定● 説明は省略しますが、他にも下記ようなサーバを設定しています。 ● 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 で 構築しています。
  25. 25. Tips(2) sysidcfg ファイル● Zone インストール後の system config 設定を省略する方法# cat /zones/sysidsfgs/sample_sysidcfgerminal=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.120 search=sun.com }nfs4_domain=dynamictimezone=Japanroot_password=AAZ14d3MmkU6U# cp sample_sysidcfg /zones/xxxserver/root/etc/sysidcfgサンプルのような sysidcfg を作成して、zone 複製後、 初期起動前に /etc/sysidcfg に置くと、初期起動時のsystem configuration 設定を省略させることができます。
  26. 26. まとめ● 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 の制限を感 じることはほとんどありません。ネットワークの学習には最適です

×