jail マシンを IPv4 と IPv6 のデュアルスタックにする
ネットワーク構成
192.168.X.1 で動作する Apache が proxy により 192.168.X.2, 192.168.X.3, …の各 jail の web サーバへ代理アクセスする。
Internet | +-----+------+ ← Global Add. AAA.BBB.CCC.DDD |Gateway Svr | |192.168.X.1 | |200X:XXXX::1| |EXAMPLE.com | +---(re0)----+ ← LAN 192.168.X.0/24 | 200X:XXXX::/56 | +---------------+-----------------+ | | | +-----+------+ +-----+------+ +-------+--------+ | FOO.com | | BAR.com | |www.EXAMPLE.com | |192.168.X.2 | |192.168.X.3 | | 192.168.X.4 | |www6.FOO.com| |www6.BAR.com| |www6.EXAMPLE.com| |200X:XXXX::2| |200X:XXXX::3| | 200X:XXXX::4 | +------------+ +------------+ +----------------+
/etc/rc.conf の設定
内部インタフェース re0 に繋がる各仮想 jail マシンに対し、192.168.X.1 側から IPv6 アドレスのエイリアスを設定する。(書式はどちらでも可)
# vi /etc/rc.conf ipv6_ifconfig_re0_alias0="200X:XXXX::2 prefixlen 128" ipv6_ifconfig_re0_alias1="200X:XXXX::3 prefixlen 128" ipv6_ifconfig_re0_alias2="200X:XXXX::4 prefixlen 128" または ifconfig_re0_alias0="inet6 200X:XXXX::2 prefixlen 128" ifconfig_re0_alias1="inet6 200X:XXXX::3 prefixlen 128" ifconfig_re0_alias2="inet6 200X:XXXX::4 prefixlen 128"
設定完了
設定が完了したらネットワーク設定を再読み込み
# /etc/netstart
アドレス確認
この場合、re0 に対し設定を行ったので次のとおり確認する。
# ifconfig re0 inet6 inet6 200X:XXXX::2 prefixlen 128 inet6 200X:XXXX::3 prefixlen 128 inet6 200X:XXXX::4 prefixlen 128
ezjail の設定
ezjail 設定ファイルの編集
各 jail の設定ファイルは /usr/local/etc/ezjail/ 配下にある。
# cd /usr/local/etc/ezjail/ # ls JAILNAME1 JAILNAME2 JAILNAME3 # vi JAILNAME1 (変更前) export jail_JAILNAME1_ip="192.168.X.2" ↓ (変更後) export jail_JAILNAME1_ip="192.168.X.2,200X:XXXX::2"
ezjail 再起動
# /usr/local/etc/rc.d/ezjail.sh restart
設定確認
便宜的に色分けした。
# jls -v JID Hostname Path Name State CPUSetID IP Address(es) 1 FOO.com /usr/jails/JAILNAME1 1 ACTIVE 2 192.168.X.2 200X:XXXX::2 2 BAR.com /usr/jails/JAILNAME2 2 ACTIVE 3 192.168.X.3 200X:XXXX::3 3 www.EXAMPLE.com /usr/jails/JAILNAME3 3 ACTIVE 4 192.168.X.4 200X:XXXX::4
Apache (VirtualHost) の設定
2011-01-23 Apache22によるVirtualHostの設定で設定した httpd-vhosts.conf を、IPv4 と IPv6 の共存(デュアルスタック)に書き換える。
httpd-vhosts.conf
バーチャルホストの設定変更。
Gateway Svr
IPv6 用のドキュメントルートを用意すると、アクセス確認がしやすい。
# cd /usr/local/etc/apache22/extra # vi httpd-vhosts.conf ### IPv4 ### <VirtualHost *:80> ServerAdmin info@EXAMPLE.com ServerName 192.168.X.1 DocumentRoot "/usr/local/www/apache2/data" </VirtualHost *:80> ### IPv6 ### <VirtualHost *:80> ServerAdmin info@EXAMPLE.com ServerName [200X:XXXX::1] DocumentRoot "/usr/local/www/apache2/data/data6" </VirtualHost *:80>
FOO.com
BAR.com, www.EXAMPLE.com の設定も IP アドレス以外は全て同じ。
### IPv4 ### <VirtualHost *:80> ServerAdmin info@EXAMPLE.com ServerName FOO.com ServerAlias www.FOO.com ProxyRequests Off <Proxy *> Order deny,allow Allow from All </Proxy> ProxyPass / http://192.168.X.2/ ProxyPassReverse / http://192.168.X.2/ ErrorLog "/var/log/FOO_proxy-error.log" CustomLog "/var/log/FOO_proxy-access.log" common </VirtualHost *:80> ### IPv6 ### <VirtualHost *:80> ServerAdmin info@EXAMPLE.com ServerName www6.FOO.com ProxyRequests Off <Proxy *> Order deny,allow Allow from All </Proxy> ProxyPass / http://[200X:XXXX::2]/ ProxyPassReverse / http://[200X:XXXX::2]/ ErrorLog "/var/log/FOO_proxy-error.log" CustomLog "/var/log/FOO_proxy-access.log" common </VirtualHost *:80>
設定の再読み込み
restart ではなく reload を使うこと。
# /usr/local/etc/rc.d/apache22 reload
BIND の設定
2010-05-01 BIND 9 の設定(イントラネット向け)で設定した named.conf および zone ファイルの一部を書き換える。
named.conf の設定
listen-on-v6
今のところエラーが出るのでコメントアウトしている。
# vi /etc/namedb/named.conf //listen-on-v6 { // ::1; // fe80::1; // 200X:XXXX::1; // };
zone ファイル
上記の zone ステートメントで指定した zone ファイルに IPv6 アドレスを追加する。
IPv6 でアクセスするさいは、http://www6.FOO.com/ へアクセスする。
または http://[200X:XXXX::2]/ で IPv6 アドレスを直接指定する。
# vi /etc/namedb/master/FOO.com.zone $TTL 86400 @ IN SOA @ root.FOO.com. ( 2012010901 ;serial 10800 ;refresh 900 ;retry 604800 ;expiry 86400 ) ;minimum IN NS @ IN MX 10 @ IN A 192.168.X.2 www6.FOO.com. IN AAAA 200X:XXXX::2
zone ファイル(その2)
EXAMPLE.com ドメイン配下の www.EXAMPLE.com (IPv4) と www6.EXAMPLE.com (IPv6) は、次のとおり設定する。
www6.EXAMPLE.com は、200X:XXXX::1 の web サーバから proxy により 200X:XXXX::4 へ接続するので設定アドレスに注意。
webmail.EXAMPLE.com や ircsvr.EXAMPLE.com は、その他のサービスが稼働している場合の設定例。
Alaxala ネットワークの IPv6 導入ガイドを参考にした。
# vi /etc/namedb/master/EXAMPLE.com.zone $TTL 3600 $ORIGIN EXAMPLE.com. @ IN SOA gatewaysvr root.EXAMPLE.com. ( 2012010901 ; Serial 3600 ; Refresh 900 ; Retry 3600000 ; Expire 3600 ) ; Minimum IN NS gatewaysvr IN MX 10 gatewaysvr gatewaysvr IN A 192.168.1.1 IN AAAA 200X:XXXX::1 webmail IN A 192.168.1.2 ← webmail.EXAMPLE.com. IN AAAA 200X:XXXX::2 irc IN A 192.168.1.2 ← ircsvr.EXAMPLE.com. IN AAAA 200X:XXXX::2 @ IN A 192.168.1.1 ← EXAMPLE.com. IN AAAA 200X:XXXX::1 www6 IN AAAA 200X:XXXX::1 ← www6.EXAMPLE.com. www IN CNAME ppprtr
逆引き zone ファイル
IPv6 に対応した逆引き zone ファイルを作成する。
200X:XXXX::1/56 の逆引きアドレス
- IPv6 アドレスは 128 bit
- 数字 1 桁につき 4 bit
- 全部で 32 桁
- プレフィックスが 56 bit なので上位 14 桁で区切る
- 全 32桁 = 上位 14 桁 + 下位 18 桁
200X:XXXX::1/56 ↓ 200X:XXXX:0000:0000:0000:0000:0000:0001/56 ↓ 200X:XXXX:0000:00 + 00:0000:0000:0000:0001 ↓ 1.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0 + 0.0.0.0.0.0.X.X.X.X.X.0.0.2
named.conf
IPv6 アドレスの逆引きゾーンファイルは EXAMPLE.com.ipv6.rev とする。
zone には逆引きアドレスの上位 14 桁を逆にして記述する。
zone "0.0.0.0.0.0.X.X.X.X.X.0.0.2.ip6.arpa" { type master; file "master/EXAMPLE.com.ipv6.rev"; };
EXAMPLE.com.ipv6.rev
逆引きゾーンファイルは次の通り。
# vi /etc/namedb/master/EXAMPLE.com.ipv6.rev $TTL 86400 @ IN SOA gatewaysvr.EXAMPLE.com. root.EXAMPLE.com. ( 2012010907 ;serial 10800 ;refresh 900 ;retry 604800 ;expiry 86400 ) ;minimum IN NS gatewaysvr.EXAMPLE.com. 4.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0 IN PTR www6.EXAMPLE.com. 1.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0 IN PTR gatewaysvr.EXAMPLE.com.
変更を反映
# /etc/rc.d/named reload
逆引きの確認
# dig -x 200X:XXXX::4 ; <<>> DiG 9.7.4-P1 <<>> -x 200X:XXX::4 ;; global options: +cmd ;; Got answer: ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 63423 ;; flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 1, ADDITIONAL: 2 ;; QUESTION SECTION: ;1.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.X.X.X.X.X.0.0.2.ip6.arpa. IN PTR ;; ANSWER SECTION: 1.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.X.X.X.X.X.0.0.2.ip6.arpa. 86400IN PTR www6.EXAMPLE.com. ;; AUTHORITY SECTION: 0.0.0.0.0.0.X.X.X.X.X.0.0.2.ip6.arpa. 86400 IN NS gatewaysvr.EXAMPLE.com. ;; ADDITIONAL SECTION: gatewaysvr.EXAMPLE.com. 3600 IN A 192.168.X.1 gatewaysvr.EXAMPLE.com. 3600 IN AAAA 200X:XXXX::1 ;; Query time: 1 msec ;; SERVER: 127.0.0.1#53(127.0.0.1) ;; WHEN: Mon Jan 9 23:50:59 2012 ;; MSG SIZE rcvd: 187
jail 内 web サーバの設定
jail の確認
# jls JID IP Address Hostname Path 1 192.168.X.2 FOO.com /usr/jails/JAILNAME1 2 192.168.X.3 BAR.com /usr/jails/JAILNAME2 3 192.168.X.4 www.EXAMPLE.com /usr/jails/JAILNAME3
jail 内へログイン
# jexec 3 /bin/tcsh
httpd-vhosts.conf の設定
jail 内の httpd-vhosts.conf を設定し、IPv4 か IPv6 のアクセスによってドキュメントルートを変えるようにする。
また、ログファイルも切り分ける。/etc/newsyslog.conf にもログローテートするように書き加える。
# vi /usr/local/etc/apache22/extra/httpd-vhosts.conf #NameVirtualHost *:80 NameVirtualHost 192.168.X.4:80 NameVirtualHost [200X:XXXX::4]:80 <VirtualHost [200X:XXXX::4]:80> ServerAdmin info@EXAMPLE.com ServerName www6.EXAMPLE.com DocumentRoot "/usr/local/www/apache22/data/data6" ErrorLog "/var/log/httpd6-error.log" CustomLog "/var/log/httpd6-access.log" common </VirtualHost> <VirtualHost 192.168.X.4:80> ServerAdmin info@EXAMPLE.com ServerName www.EXAMPLE.com ServerAlias EXAMPLE.com DocumentRoot "/usr/local/www/apache22/data" ErrorLog "/var/log/httpd-error.log" CustomLog "/var/log/httpd-access.log" common </VirtualHost>