ウェブサイトをIPv6対応にするには?

World IPv6 Launch

公開しているウェブサイトをIPv6に対応にするには…?
IPv6で通信できない場合にIPv4にフォールバックするのは…?
などなど、ウェブサイトのIPv6対応について、
自分がよく分からなかったこと4点を試してみました。

WEBサーバーをIPv6対応にする

まずWEBサーバーがIPv6に対応していなければいけません。さくらインターネットがトライアル提供している6rd方式で、IPv6通信をできるようにしました。

IPv4環境でIPv6サイトにアクセスする

そもそも、IPv6で通信ができない環境では試験もできません。IPv6対応したさくらのVPSサーバーを経由して、IPv6サイトを表示できるようにしました。

独自ドメインIPv6対応にする

ドメインサービスの設定で、Aレコードに加えてAAAAレコードを登録します。IPv6に対応しているドメインサービスは限られていますが、今回はさくらのドメインでAAAAレコードの登録をしました。

通信がIPv6IPv4かを表示する

ユーザーがIPv6でアクセスしているか、IPv4でアクセスしているかを、ウェブサイトに表示します。PHPでサーバーアドレスを取得して判別しました。


話題としては少し古いのですが、2012年6月6日のWorld IPv6 Launchに合わせて、4月から7月にかけてテストをしてきたことの覚え書きです。

 

WEBサーバーをIPv6対応にする

さくらインターネットIPv6接続サービス、さくらの6rd(トライアル)でサーバーをIPv6対応にします。各OSにより設定方法は異なるようですが、CentOSの場合は6rdに対応していないので、カーネルとiprouteにパッチをあてます。

さくらの6rd(トライアル)> 6rd設定方法(CentOS5.5編)
さくらの6rd(トライアル)> 6rd設定方法(CentOS6.2編)

9月16日の時点では、上記で案内されている方法では6rdは利用できないはずです。標準でインストールされるのがCentOS6.3にアップされていたり、カスタムでインストールできるCentOS5.5のカーネルとiprouteパッケージのバージョンが上がり、RPMパッケージがインストールできない、という理由です。

 

ipv6.google.comやOCNのIPv6通信確認サイトにpingがとおれば設定完了です。

  1.  
  2. /* ipv6.google.com にping試験 */ ping6の「6」を忘れずに!
  3. # ping6 2404:6800:4004:805::1011
  4.  
  5. /* www.ocnipv6.jp にping試験 */ ping6の「6」を忘れずに!
  6. # ping6 2001:218:2001:3005::7f
  7.  

 

以下、さくらのVPSサーバーのIPv4アドレスを、192.168.AAA.BBB、6rdで指定されるIPv6アドレスを、2001:e41:AAAA:BBBB::1、とします。

 

 

IPv4環境でIPv6サイトにアクセスする

自宅の固定回線のJCNはIPv6に未対応で、モバイル回線のXiは、Xi自体は対応しているのですが、モバイルルータのL-09Cが未対応ということで、自分のインターネット環境ではIPv6サイトに接続できませんでした。

そこでSSHを使って、IPv6対応したさくらのVPSサーバーを経由してIPv6サイトを表示させます。SSHクライアントとしてPuTTYと、FirefoxのSOCKSプロキシの機能を利用します。
WorldIPv6Dayという事で、
さくらのVPSを使ってIPv4、IPv6両方のサイトを閲覧する方法。


この時点で、下記のようなIPv6サイトを見ることができます。
ipv6.google.com
OCNのIPv6通信確認サイト

さらにこの時点で、さくらのVPSサーバーにおいたテストファイルにIPv6アドレス直打ちでページの表示ができるはずです。
(例)http://[2001:e41:AAAA:BBBB::1]/test.htmlIPv6アドレスの直打ちでは[ ]を忘れずに!

独自ドメインIPv6対応にする

IPv6アドレス直打ちで表示できるようになったので、独自ドメインでも表示できるようにします。

今回はさくらのドメインで、バーチャルホストのアドレス ipv6.sample.com にAAAAレコードとAレコードを登録することにしました。

f:id:bleu-bleut:20120816235656j:plain
エントリ名
種別

DNSチェック
TTLの指定:
ipv6
IPアドレス(A)
:192.168.AAA.BBB
:する
:チェック無し
 
f:id:bleu-bleut:20120816235710j:plain
エントリ名
種別

DNSチェック
TTLの指定
ipv6
IPv6アドレス(AAAA)
:2001:e41:AAAA:BBBB::1
:する
:チェック無し
 

以上の設定で、名前解決のときにAAAAレコードとAレコードが払いだされ、IPv6通信ができるときはIPv6で、できないときはフォールバックしてIPv4で通信をします。

なお、AAAAレコードとAレコードを両方受け取ったときにどちらを優先するかはOSの設定にしたがい、Windowsでは初期でIPv6が優先になっています。

通信がIPv6IPv4かを表示する

IPv6でアクセスされているか、IPv4でアクセスされているかをPHPで判別します。インターネット上で紹介されているいくつかの方法のうち、サーバーアドレスで分けるのは下記のようになります。IPv6IPv4の判別ってどうすればいいんだろうと思っていたけど、ただこれだけでした。

  1. ipv6ipv4.php
  2. if ($_SERVER['SERVER_ADDR'] == '2001:e41:AAAA:BBBB::1') {
  3.     $ipkind = 'ipv6';
  4. } elseif($_SERVER['SERVER_ADDR'] == '192.168.AAA.BBB'){
  5.     $ipkind = 'ipv4';
  6. }
  7.  

 

おわり

以上、IPv6に関して4点をまとめましたが、ご存じの通り、日本はIPv6で通信できる環境が十分ではなく、現時点でウェブサイトをIPv6対応で運用することにはフォールバックの問題があり、注意が必要です。

実際の運用にあたっては、セキュリティ関連などに取り組まなければいけないはずですが、今回はここまで。

 

参照サイト

 

関連記事