IPv6に勤しんでみる 実アドレス, apache
「CentOS, IPv6」でググッたら『IPv6を無効化する方法』ばっかあたってワロタ。
ということで基本的な設定から。まずはインタフェース。
構成
- CentOS 5.2 x 2台
インタフェース設定
# vi /etc/sysconfig/network-scripts/ifcfg-eth0 DEVICE=eth0 BOOTPROTO=static IPV6ADDR=xxxx:xxxx:xxxx:xxxx:xxxx:xxxx/xx IPV6INIT=yes IPV6_AUTOCONF=no ONBOOT=yes
疎通確認
$ ping6 xxxx:xxxx:xxxx:xxxx:xxxx:xxxx
pingも6なんですね。てゆーか。ping一発打つだけなのに何この新鮮さ?Replyが返ってきたときに思わずニヤケちまったい...
しかし、IPv4でリーチャビリティがないと結局ファイル落としてインストールできない orz
ルータでトンネリングすればv4で抜けれるみたいなんですが、とりあえずそれはおいといてv4のアドレスもしゃーなしにつけました。
# vi /etc/sysconfig/network-scripts/ifcfg-eth0 DEVICE=eth0 BOOTPROTO=static HWADDR=xx:xx:xx:xx:xx IPADDR=xxx.xxx.xxx.xxx GATEWAY=xxx.xxx.xxx.xxx IPV6ADDR=xxxx:xxxx:xxxx:xxxx:xxxx:xxxx/xx IPV6INIT=yes ONBOOT=yes
折角なのでまずは王道?あぱっちぇさんでListenしてみる。
$ wget wget http://www.meisei-u.ac.jp/mirror/apache/httpd/httpd-2.2.11.tar.gz $ tar zxvf httpd-2.2.11.tar.gz $ cd httpd-2.2.11
ふむconfigureどうすりゃいいのだ。と思い。grep v6 configureしてみる
--enable-v4-mapped Allow IPv6 sockets to handle IPv4 connections
他にそれっぽいオプションなし。
v6をenableするオプションじゃないような...デフォルトで有効というか有効にしかできない?
ということで公式を覗き見。
http://httpd.apache.org/docs/2.0/ja/bind.html
多くのプラットホームで IPv6 がサポートされてきていて、 APR はこれら のほとんどで IPv6 をサポートしているので、 Apache は IPv6 ソケット を割り当てて IPv6 経由で送られてきたリクエストを扱うことができます。 IPv6 ソケットが IPv4 と IPv6 コネクションの両方を扱うことができるか どうかは、Apache 管理者にとって厄介な問題です。 IPv4 コネクションを IPv6 ソケットで扱う場合は、 IPv4 マップされた IPv6 アドレスを使用し ていて、 ほとんどのプラットホームではデフォルトで使用可能ですが、 FreeBSD, NetBSD, OpenBSD では、システム全体としてのポリシーとの整合 性から、 デフォルトでは使用不可に設定されています。 これらのデフォル トで使用不可のプラットホームであっても、 特別な設定パラメータで Apach e の挙動を変化させることができます。 IPv4 と IPv6 のコネクションを最小限のソケットで扱いたいのであれば、IP v4 マップの IPv6 アドレスを使用する必要があり、 --enable-v4-mapped co nfigure オプションを指定して、単純に Listen ディレクティブで次のように 設定します。 Listen 80 --enable-v4-mapped では、Apache の生成するデフォルトの設定ファイル中の Listen ディレクティブはこの形式を使用しています。 --enable-v4-mapped は、 FreeBSD, NetBSD, OpenBSD 以外の全てのプラットホームでのデフォルトです。 ですから、おそらくお手元の Apache はこの設定でビルドされているでしょう。 プラットフォームや APR が何をサポートするかに関わらず、 IPv4 コネクショ ンのみを扱うようにしたい場合は、 次の例のように全ての Listen ディレクテ ィブで IPv4 アドレスを指定してください。 Listen 0.0.0.0:80 Listen 192.170.2.1:80 IPv4 と IPv6 のコネクションを個別のソケットで扱うようにしたい場合 (つま り IPv4 マップのアドレスを無効にしたい場合) は、--disable-v4-mapped con figure オプションを指定して、次のように個別指定の Listen ディレクティブ を使用してください。 Listen [::]:80 Listen 0.0.0.0:80 --disable-v4-mapped では、Apache の生成するデフォルトの設定ファイル中のL isten ディレクティブはこの形式を使用しています。 --disable-v4-mapped は、 FreeBSD, NetBSD, OpenBSD プラットホームでのデフォルトです。
日本後でok。IPv4 と IPv6 のコネクションを最小限のソケットで扱いたいのであれば、 IPv4 マップの IPv6 アドレスを使用する必要があり、 --enable-v4-mapped configure オプションを指定してとあるので、v6そのそもを使うか否かなオプションじゃないですね。デフォルトは有効ですか。確かv6にtaranslationしたv4の記法が定義されてた気がするのでそれの事を言ってるのかなぁ。まあこの辺はそもそもIPv6の知識自体が薄いので要勉強ですね。
とりあえずまんまでいけるか試してみますか。
$ ./configure $ make $ su # make install
起動してみる。んでnetstatで確認 -A オプションを使うとv6 onlyで表示できるみたい。
# netstat -na -A inet6 Proto Recv-Q Send-Q Local Address Foreign Address State tcp 0 0 :::80 :::* LISTEN tcp 0 0 :::22 :::* LISTEN tcp 0 224 ::ffff:192.168.66.23:22 ::ffff:192.168.64.39:38912 ESTABLISHED udp 0 0 :::32770 :::* udp 0 0 :::5353 :::*
Listenしてる?けど外からtelnetで80叩いてもPermission deniedで怒られた....
なんだろ。フィルタリングどっかでされてるのかな...
と思ってローカルから叩いてみたら
# telnet xxxx:xxxx:11e:8401::902 80 Trying xxxx:xxxx:11e:8401::902... Connected to xxxx:xxxx:11e:8401::902 (xxxx:xxxx:11e:8401::902). Escape character is '^]'. GET <h1>It works!Connection closed by foreign host.
キタワァ*・゜゚・*:.。..。.:*・゜(n‘∀‘)η゚・*:.。. .。.:*・゜゚・* !!!!!
でも外からは叩けん。ip6tablesはいないと思うし、iptables止めてもダメだったから
TCP wrapper あたりか、Apacheの設定自体かなぁ。
netstatで見る限りはApacheではなさそうだけど...ふーむ。