前回記事ではIPv6アドレスの特徴を、IPv4アドレスと比較しながら説明した。今回は、そのIPv6アドレスを使ってホストがネットワーク通信するために必要な設定を見ていきたい。
なおネットワークの「ホスト」という用語は通常、PCやスマートデバイス、サーバーなど、ネットワークに接続して通信を行うエンドポイント(端末)全般を指すものだ。ただし、本連載ではWebサイト管理者を主な読者対象としているため、本稿ではサーバーがIPv6対応するために必要な設定を中心にまとめる。
また前回と同様、今回も「IPv4と同じ部分/違う部分」という切り口でなるべくわかりやすく説明していきたい。
IPv6ネットワークで通信するために必要なホストの基本設定
まずはホストがIPv6ネットワークに接続し、他のホストと通信するために必要な基本設定からだ。必須となる設定項目はIPv4ネットワークと同じ、下記の3つである。
(1)ホスト自身を示すユニークなIPv6アドレス
(2)キャッシュDNSサーバーのIPv6アドレス
(3)同一リンク内にあるルーターのIPv6アドレス
IPv4環境でホストのネットワーク設定をしたことがあれば、それぞれの役割もわかると思うが、簡単に説明しておこう。
(1)は、パケットの送信元/宛先を表すのに使われるホスト自身の“住所”だ。当然、他のホストが使うIPv6アドレスと重複しないユニークな(一意の)アドレスでなければならない。前回述べたとおり、IPv6ではホスト(インタフェース)の初期化時にリンクローカルアドレスが自動設定されるが、サブネット外のホストと通信する場合には別途、グローバルIPv6アドレスも必要となる。
(2)は、ホストが名前解決(DNSクエリ)に使うキャッシュDNSサーバーのアドレスである。設定しなければ通信相手のホスト名(FQDN)からIPv6アドレスを検索することができないので、この設定も必須だ(なおドメイン管理者やWebサイト管理者が公開する「権威DNSサーバー」とは別である。権威DNSサーバーの設定は後述する)。
(3)は「デフォルトルート」や「デフォルトゲートウェイ」とも呼ばれる、ホストのリンクローカル(同じサブネット内)にあるルーターのアドレスである。これを設定しなければ、他のネットワークにあるホストと通信できない。
IPv6では、上記(1)~(3)のそれぞれを手作業で設定する方法だけでなく、自動設定する方法も用意されている。ただし、この自動設定にはIPv4とは異なる方法/技術も使われる。もう少し詳しく見ておこう。
(1)サーバーの固定IPv6アドレス設定
まずは(1)ホスト自身のIPv6アドレスの設定方法からだ。その設定方法には次の3種類がある。
●手作業での設定
●自動設定:SLAAC(StateLess Address Auto Configuration)
●自動設定:DHCPv6(ステートフル/ステートレス)
まず結論から言うと、サーバーに固定IPv6アドレスを設定したい場合は「手作業」または「DHCPv6(ステートフル)」で設定することになる。なぜそうなるのかを説明しよう。
SLAAC(RFC 4862、スラークまたはスラックと読む)は、IPv6プロトコルが標準で備える自動設定プロトコルである。過去のIPv4にはこうした仕組みがなかったため、別途DHCPなどの仕組みを付け加えて自動設定を可能にしていた。IPv6ではその仕組みが標準で組み込まれたわけだ。DHCPのように管理サーバーを立てる必要がないので、とても便利な自動設定の仕組みだと言える。
SLAACでは、ホスト自身が自動生成したIPv6アドレスを自らに設定する。その仕組みを簡単にまとめると、リンクローカル(同じサブネット内)にあるルーターがマルチキャストで送信する「RAメッセージ(RA:Router Advertisement)」に含まれるネットワーク識別子(プレフィックス)と、ホストが自ら生成するインタフェース識別子を組み合わせることで、ホスト自身のIPv6アドレスを自動設定するというものだ。
ただしSLAACで設定されるのは、その名のとおり“ステートレス”なIPv6アドレスである。これは「常に同じアドレスが割り当てられる保証はない」という意味だ。つまり、ホストがネットワークに接続するたびにIPv6アドレスが変わる可能性がある。クライアントPC のIPv6アドレス設定ならば問題ないが、固定IPアドレスが必要なサーバーの場合には適していない(固定IPアドレスが必要ない開発/テスト用サーバーならば便利に使える)。
自動設定方法としてはもうひとつ、DHCPv6(RFC 3315)もある。IPv4で使われるDHCPとは異なるプロトコルだが、大まかな仕組みとしては同じだ。すなわち、ホスト上のDHCPv6クライアントとDHCPv6サーバーが通信を行い、サーバー側で一元管理されているIPv6アドレスの割り当て(リース)を受ける仕組みである。ルーターはRAメッセージに含まれる「Mフラグ(Managementフラグ)」の値を「1(有効)」に設定し、ホストに対してDHCPv6を利用したIPv6アドレス設定を促す。
したがって、DHCPv6サーバー側であらかじめホストのMACアドレスと割り当てるIPv6アドレスをひもづけて登録しておけば、いつでも同じ、固定のIPv6アドレスを自動設定できるようになる。
なお上述の説明は、DHCPv6の「ステートフル」モードでの動作内容である。もうひとつの「ステートレス」モードでは、ホストのIPv6アドレス設定手段として前述のSLAACを使うため、固定IPv6アドレスが必要な用途には向いていない※注。
ここまで説明してきた理由から、サーバーに固定IPv6アドレスを設定したい場合は「手作業」または「DHCPv6(ステートフル)」で設定することになるわけだ。
※注:ステートレスDHCPv6では、ホストへのIPv6自動設定にSLAACを使う一方で、キャッシュDNSサーバーの自動設定はDHCPv6サーバーから情報を配信する(ルーターがRAメッセージの「Oフラグ=Otherフラグ」の値を1に設定し、DHCPv6サーバーから情報取得するよう促す)。IPv6が開発された当初はSLAACのRDNSSオプション(後述)が存在せず、DNSサーバーを自動設定する代替手段としてステートレスDHCPv6が使われた。
(2)(3)キャッシュDNSサーバー/デフォルトルートの設定
キャッシュDNSサーバーの設定方法も、ホストIPアドレスと同じように手作業/SLAAC(+RDNSS)/DHCPv6という3種類がある。
SLAACの場合は、ルーターがRAメッセージを使ってホストにキャッシュDNSサーバーの情報を配信する「RDNSSオプション」(RFC 8106)が用意されている。RAメッセージ送出にRDNSSオプションが利用できるルーターの場合、これを利用して自動設定が行える。ただし、SLAACを使わなければRDNSSオプションも使えず、サーバーの場合はここでも手作業かDHCPv6ということになる。
DHCPv6では、DHCPv6サーバーが配信するキャッシュDNSサーバーの情報を受け取り、DHCPv6クライアントがそれをホストに自動設定する。IPv4と同じ仕組みだ。
最後に、ホストのリンクローカル(同じサブネット内)にある近接ルーター、デフォルトルートのIPv6アドレス設定だ。ここも手作業で設定できるが、IPv6が標準で自動検出機能(近隣探索プロトコル=NDP:Neighbor Discovery Protocolの一部、RFC 4861)を備えているので、通常は手作業で設定する必要はない。ホストをIPv6ネットワークに接続するだけで、自動的に近接ルーターを検出し、設定されるのでシンプルだ。
このルーター自動検出も、前述のRAメッセージを使って行われる。ネットワークに接続されたホストは、サブネット内のルーターが定期的に(あるいは新規ホストの接続時に)マルチキャスト送信するRAメッセージを受信することで、リンクローカルにあるルーターの存在を知る。このRAメッセージの送信元アドレスを、そのままデフォルトルートとして登録することで自動設定が完了する。
権威DNSサーバーの設定:「AAAAレコード」を追加する
インターネットでWebサイトやWebサービスを公開したい場合には、公開するサーバーのホスト名(FQDN)と、それに対応するIPアドレスを組み合わせた情報(リソースレコード)を権威DNSサーバーに設定しなければならない。これはIPv4でもIPv6でも同じだ。
本連載ではサイトの“IPv6対応”、つまりIPv4でもIPv6でもアクセスできることを目的としている。そして現在の主要なDNSサーバー(ソフトウェア)は、クライアントからの問い合わせ(クエリ)内容に応じて、IPv4アドレスを聞かれればIPv4アドレスを応答し、IPv6アドレスを聞かれればIPv6アドレスの設定情報を応答する機能を備えている。したがって、Webサイト管理者は権威DNSサーバーに、IPv4とIPv6の両方のリソースレコードを登録するだけでよい。
IPv4の場合、ホスト名とそれに対応するIPアドレスを組み合わせたリソースレコードを「Aレコード」と呼ぶが、IPv6ではその名称が「AAAAレコード(クアッド・エー・レコード)」となっている。自ら運用する権威DNSサーバーの設定ファイル、あるいは利用しているクラウド/ホスティングサービスやドメイン登録サービスの設定画面で、このAAAAレコード(ホスト名とIPv6アドレス)を追記すればよい。
このとき、AレコードとAAAAレコードを同じホスト名にしておけば、IPv4/IPv6のどちらのアクセスでも対応するWebサイトが実現する。実際にどちらを使ってアクセスするのかはクライアント側が決めることなので、Webサイト側で指定することはできない。
また、IPアドレスからホスト名を割り出す「逆引き」クエリのためのリソースレコードは「PTRレコード」としてサーバーに登録する。PTRレコードという名称、およびアドレスを逆順で記述する点はIPv4と同じだが、IPv6のPTRレコードでは「4ビットごとにピリオドで区切る」「『ip6.arpa』ドメインを使用する」点が異なる。また省略記法が使えず、非常に長い文字列になるので、入力間違いには注意してほしい。
なお当然だが、権威IPv6サーバーのホストそのものもIPv6でアクセスできる環境であることが望ましい※注。自ら構築した権威DNSサーバーを利用する場合には注意してほしい。
※注:DNSクエリは、クライアントがキャッシュDNSサーバーに問い合わせ、キャッシュDNSサーバーが権威DNSサーバーに問い合わせる構造になっている。したがって、権威DNSサーバーはあらゆるキャッシュDNSサーバーと通信できなければならない。IPv6でしか通信できないキャッシュDNSサーバーが存在する可能性も考えて、権威DNSサーバーもIPv6対応しておくことが望ましい。
SSL/TLS(HTTPS)サーバー証明書、そのほかの注意点
最後に、そのほかの小さな注意点を見ておこう。
近年ではWebサイトの常時SSL/TLS化が一般的になっている。それでなくとも、個人情報などを入力するフォームを設けたページでは、SSL/TLSによる通信路の暗号化(HTTPS通信)やドメイン/実在証明を行うのが常識だ。その場合は「SSL/TLSサーバー証明書」を用意することになるが、さて、WebサイトをIPv6対応させた場合にこのサーバー証明書を追加/更新する必要はあるのだろうか。
結論から言えば、その必要はない。サーバー証明書はIPアドレスではなくFQDNにひも付くかたちで発行されるため、IPv4と同じホスト名でIPv6アクセスできるのであれば、同じ証明書が利用されるだけだ。
IPv6対応時の注意点としてはもうひとつ、Webサイト内に外部サイトのリソース(インラインフレームやJavaScriptライブラリなど)を組み込んでいるケースが挙げられる。自身の管理するWebサイトがIPv6対応したとしても、リソースを利用している外部サイトはIPv4アクセスにしか対応していない場合、クライアント側がIPv6のみに対応したアクセス環境であればそのリソースが読み込めない(IPv4/IPv6両対応のアクセス環境ならば問題はない)。
日本国内の現状では“IPv6 Only”のクライアント環境は考えにくいが、将来に備える意味でも、埋め込まれたリソースの配信元もIPv6対応しているかどうか、最低限チェックしておくことはお勧めしたい。
今回の記事ではWebサーバー/WebアプリケーションのホストをIPv6対応させる視点で見てきたが、インターネット公開しているWebサイトであれば、ファイアウォールやロードバランサといったサービス/機器もIPv6アクセスに対応しなければならない。ここも見落とさないように注意してほしい。
* * *
以上、今回は「WebサイトのIPv6対応」で必要な基本設定を見てきた。ホストの配置される環境に応じてどう対応すべきかが若干異なるものの、基本的にはIPv4ネットワークで行うべき作業をIPv6に拡張するようなものであり、さほど複雑ではない。特に、あらかじめIPv6ネットワークが構築済みで提供されているクラウド/ホスティングサービス環境を利用している場合は、短時間でIPv6対応ができるはずだ。
今回は概念的な説明に終始してしまったので、次回は実際にパブリッククラウド環境を使って、IPv4のWebサイトをIPv6対応させる手順をご紹介したい。
■参考文献
「プロフェッショナルIPv6」(小川晃通 著、ラムダノート刊) RFC 4862:IPv6 Stateless Address Autoconfiguration(SLAAC) RFC 3315:Dynamic Host Configuration Protocol for IPv6(DHCPv6) RFC 8106:IPv6 Router Advertisement Options for DNS Configuration(SLAACのRDNSSオプション) RFC 4861:Neighbor Discovery for IPv6(近隣探索プロトコル) チュートリアル:DNSの基本構成要素とIPv6対応における注意点(IPv6 Summit in Kyoto 2013、JPRS 堀五月氏)