Solaris の IPv6 の実装は、主にカーネルレベルとユーザーレベルの両方の TCP/IP スタックへの変更から構成されます。トンネル、ルーター発見、ステートレスアドレス自動設定を実装するために新しいモジュールが追加されました。この章では、IPv6 の Solaris 実装に伴う概念について説明します。
IPv4 から IPv6 への移行で、IPv6 では、IPv6 パケットにカプセル化された IPv6 パケットと同じく、IPv6 パケットを IPv4 パケット内にカプセル化するメソッドが指定されます。その結果、パケットのカプセル化を行う新しいモジュール tun(7M) が追加されました。このモジュールはトンネルモジュールと呼び、物理的インタフェースと同様に ifconfig ユーティリティでプラムされ、設定されます。これによってトンネルモジュールが IP デバイスと IP モジュール間に配置されます。トンネルデバイスにもシステムインタフェースリストにエントリがあります。
ifconfig(1M) ユーティリティも変更され、IPv6 スタックが作成され、新しいパラメータがサポートされました。これらについてはこの章で、あとから説明します。
ルーター発見とステートレスアドレス自動設定を行うため、in.ndpd(1M) デーモンが追加されました。
IPv4 では起動時に /etc/hostname.interface を使用しましたが、IPv6 でも起動時にファイル /etc/hostname6.interface を使用してネットワークインタフェースを定義します。このとき、少なくとも /etc/hostname.* ファイルまたは、/etc/hostname6.* ファイルがローカルマシンに存在している必要があります。これらのファイルは、Solaris インストールプログラムで生成されます。ファイル名の interface は、プライマリネットワークインタフェースのデバイス名に置き換えられます。
ファイル名の構文は、次のとおりです。
hostname.interface hostname6.interface |
interface の構文は、次のとおりです。
dev[.Module[.Module ...]]PPA |
Dev |
ネットワークインタフェースデバイス。デバイスは le、qe など物理的ネットワークインタフェースか、トンネルなどの論理インタフェース (詳細については、「IPv6 の Solaris トンネルインタフェース」を参照) |
Module |
プラム時にデバイスにプッシュされるストリームモジュールのリスト |
PPA |
アタッチの物理的ポイント |
構文 [.[.]] も可能です。
有効なファイル名は、次のとおりです。
hostname6.le0 hostname6.ip.tun0 hostname.ip.tun0 |
IPv6 におけるインタフェースの自動設定では、その所属するリンク層アドレスに基づいてリンクローカルアドレスをノード側で計算できるため、IPv6 インタフェース構成ファイルにはエントリがないことがあります。その場合、起動スクリプトによってインタフェースが設定されます。ノードは近傍探索デーモン in.ndpd で他のアドレスやプレフィックスの情報を取り出します。インタフェースに静的アドレスが必要な場合 (IPv6 では一般的ではありませんが)、ifconfig ユーティリティのコマンドインタフェースを使用して追加できます。その結果、ホスト名のアドレスが /etc/hostname6.interface (または /etc/hostname.interface) に保存され、内容が ifconfig に伝わります。
この場合、ファイルのエントリは、ネットワークインタフェースに関連付けられたホスト名または IP アドレスだけです。たとえば、smc0 が ahaggar というマシンのプライマリネットワークインタフェースだとします。その /etc/hostname6.* ファイル名は /etc/hostname6.smc0 となり、そのエントリは ahaggar です。
ネットワーキングの起動スクリプトでは、インタフェース数と、ルーティングデーモンとパケットの送信を開始するための /etc/inet/ndpd.conf ファイルの有無を調べます (「Solaris IPv6 ルーターの設定方法」を参照)。
ifconfig ユーティリティは、トンネルモジュール同様に、IPv6 インタフェースをプラムできるよう変更されました。ifconfig(1M) ユーティリティでは、ioctl の拡張セットで IPv4 ネットワークインタフェースと IPv6 ネットワークインタフェースの両方を設定します。表 16-1 は、このユーティリティに追加されたオプションセットです。このユーティリティによる診断手順については、「インタフェースアドレス割り当ての表示方法」を参照してください。
表 16-1 新しい ifconfig ユーティリティオプション
オプション |
説明 |
---|---|
index |
インタフェースインデックスを設定する |
tsrc/tdst |
トンネルソース / 宛先を設定する |
addif |
論理インタフェースの次の候補を作成する |
removeif |
指定された IP アドレスの論理インタフェースを削除する |
destination |
インタフェースにポイントツーポイント宛先アドレスを設定する |
set |
インタフェースにアドレスとネットマスクのどちらか、または両方を設定する |
subnet |
インタフェースのサブネットアドレスを設定する |
xmit/-xmit |
インタフェースにおけるパケット伝送を使用可能または使用不能する |
IPv6 設定手順については、「IPv6 ノードを有効にする」を参照してください。
次に示す ifconfig コマンドでは、hme0:3 論理インタフェースが 1234::5678/64 IPv6 アドレスに作成され、up オプションで有効になり、状態が報告され、無効になり、インタフェースが削除されます。
# ifconfig hme0 inet6 addif 1234::5678/64 up Created new logical interface hme0:3 # ifconfig hme0:3 inet6 hme0:3: flags=2000841<UP,RUNNING,MULTICAST,IPv6> mtu 1500 index 2 inet6 1234::5678/64 # ifconfig hme0:3 inet6 down # ifconfig hme0 inet6 removeif 1234::5678 |
次に示す ifconfig コマンドでは、物理的インタフェース名に関連付けられているデバイスが開き、デバイスを使用できるよう TCP/IP に必要なストリームがセットアップされ、その状態が報告され、トンネルソースと宛先アドレスが設定され、設定後の新しい状態が報告されます。
# ifconfig ip.tun0 inet6 plumb index 13 # ifconfig ip.tun0 inet6 ip.tun0: flags=2200850<POINTOPOINT,RUNNING,MULTICAST,NONUD,IPv6> mtu 1480 index 13 inet tunnel src 0.0.0.0 inet6 fe80::/10 --> :: # ifconfig ip.tun0 inet6 tsrc 120.46.86.158 tdst 120.46.86.122 # ifconfig ip.tun0 inet6 ip.tun0: flags=2200850<POINTOPOINT,RUNNING,MULTICAST,NONUD,IPv6> mtu 1480 index 13 inet tunnel src 120.46.86.158 tunnel dst 120.46.86.122 inet6 fe80::8192:569e/10 --> fe80::8192:567a |
ノードに複数のネットワークインタフェースがある場合、追加インタフェース用に /etc/hostname.interface ファイルを作成する必要があります。
たとえば、図 6-1 に示すマシン timbuktu について考えてみましょう。このマシンには、2 つのネットワークインタフェースがあり、ルーターとして機能します。プライマリネットワークインタフェース le0 はネットワーク 192.9.200 に接続されています。 IP アドレスは 192.9.200.70、ホスト名は timbuktu です。Solaris インストールプログラムによって、プライマリネットワークインタフェースにファイル /etc/hostname.le0 が作成され、ホスト名 timbuktu がファイルに入力されます。
2 番めのネットワークインタフェースは le1 で、192.9.201 に接続されています。このインタフェースはマシン timbuktu に物理的にインストールされていますが、独自の IP アドレスが必要です。そのため、このインタフェースに対して /etc/hostname.le1 ファイルを手動で作成する必要があります。このファイルのエントリはルーター名 timbuktu-201 です。
IPv6 の設定では、/etc/hostname6.le0 と /etc/hostname.le1 に対するインタフェースが必要です。各インタフェースアドレスは、システムの起動時に自動的に設定されます。
ここでは、次の IPv6 デーモンについて説明します。
in.ndpd - IPv6 自動設定用のデーモン
in.ridpd - IPv6 のネットワークルーティングデーモン
inetd - インターネットサービスデーモン
このデーモンでは、IPv6 用のルーター発見と自動アドレスの設定が実装されます。表 16-2 は、サポートされているオプションを示します。
表 16-2 in.ndpd デーモンのオプション
オプション |
説明 |
---|---|
-d |
すべてのイベントのデバッグをオンにする |
-D |
特定のイベントのデバッグをオンにする |
-f |
設定を読み出す元のファイル (デフォルトファイルのかわり) |
-I |
インタフェース関連情報ごとに印刷する |
-n |
ルーター通知をループバックしない |
-r |
受信パケットを無視する |
-v |
冗長モード (さまざまな種類の診断メッセージを報告する) |
-t |
パケット追跡をオンにする |
/etc/inet/ndpd.conf 構成ファイルと、/var/inet/ndpd_state.interface 起動ファイル (存在する場合) のパラメータセットは、in.ndpd の動作を制御します。
/etc/inet/ndpd.conf が存在すると構文解析され、ノードをルーターに使用するための設定が行われます。表 16-3に、このファイルに出現する可能性がある各種キーワードをまとめます。ホストを起動してもルーターが直ぐに利用できなかったり、ルーターが通知したパケットがドロップしてホストに届かないことがあります。/var/inet/ndpd_state.interface ファイルはノード別に管理され、定期的に更新される状態ファイルであるため、処理が失敗して再起動したときはルーターがなくてもインタフェースを設定できます。このファイルにはインタフェースアドレス、更新時間、有効期間などの情報が、先のルーター通知で得られた情報とともに保存されています。
状態ファイルの内容は変更する必要はありません。in.ndpd デーモンが自動的に管理します。
キーワード |
説明 |
---|---|
ifdefault |
すべてのインタフェースのルーターの動作を指定する。次の構文を使用してルーターパラメータと対応する値を設定する ifdefault [variable value] |
prefixdefault |
プレフィックス通知のデフォルトの動作を指定する。次の構文を使用してルーターパラメータと対応する値を設定する prefixdefault [variable value] |
if |
インタフェース別パラメータを設定する。構文は次のとおり if interface [variable value] |
prefix |
インタフェース別プレフィックス情報を通知する。構文は次のとおり prefix prefix/length interface [variable value] |
ifdefault/prefixdefault エントリは、構成ファイルの if エントリと prefix エントリの前に置く必要があります。
設定変数と設定できる値については、in.ndpd(1M) と ndpd.conf(4) のマニュアルページを参照してください。
次の例は、テンプレート (コメント行) とキーワードと設定変数の使用方法を示します。
# ifdefault [variable value]* # prefixdefault [variable value]* # if ifname [variable value]* # prefix prefix/length ifname # # Per interface configuration variables # #DupAddrDetectTransmits #AdvSendAdvertisements #MaxRtrAdvInterval #MinRtrAdvInterval #AdvManagedFlag #AdvOtherConfigFlag #AdvLinkMTU #AdvReachableTime #AdvRetransTimer #AdvCurHopLimit #AdvDefaultLifetime # # Per Prefix: AdvPrefixList configuration varialbes # # #AdvValidLifetime #AdvOnLinkFlag #AdvPreferredLifetime #AdvAutonomousFlag #AdvValidExpiration #AdvPreferredExpiration ifdefault AdvReachableTime 30000 AdvRetransTimer 2000 prefixdefault AdvValidLifetime 240m AdvPreferredLifetime 120m if qe0 AdvSendAdvertisements 1 prefix 2:0:0:56::/64 qe0 prefix fec0:0:0:56::/64 qe0 if qe1 AdvSendAdvertisements 1 prefix 2:0:0:55::/64 qe1 prefix fec0:0:0:56::/64 qe1 if qe2 AdvSendAdvertisements 1 prefix 2:0:0:54::/64 qe2 prefix fec0:0:0:54::/64 qe2 |
in.ripngd デーモンは、IPv6 ルーターの RIPng ルーティングプロトコルを実装します。RIPng は、Bellman-Ford 距離ベクトルアルゴリズムに基づく IPv4 ルーティングプロトコルで広く使用されてきた RIP の IPv6 等価を定義します。表 16-4 は、サポートされているオプションを示します。
表 16-4 in.ripngd デーモンのオプション
オプション |
説明 |
-p n |
n は RIPNG パケットの送受信に使用する代替ポート番号を指定する |
-q |
ルーティング情報を打ち切る |
-s |
ルーターとしての機能に関係なく、ルーティング情報が強制される |
-P |
ポイズンリバースを打ち切る |
-S |
in.ripngd がルーターとして機能しない場合、各ルーターにはデフォルトのルートだけが指定される |
IPv6 有効化サーバーでは、対応するクライアントで利用している内容に応じて、IPv4 アドレスか IPv6 アドレスを処理できます。/etc/inet/inetd.conf ファイルには、inetd(1M) がソケット経由でインターネット要求を受信したときに呼び出すサーバーリストが保存されています。ソケットベースのインターネットサーバーエントリはそれぞれ、次の構文を使用する 1 行です。
service_name socket_type proto flags user server_pathname args |
各フィールドに指定できる値については、inetd.conf(4) のマニュアルページを参照してください。Solaris オペレーティング環境の場合、IPv6 有効化で /etc/inet/inetd.conf ファイルにサービスを指定するには、proto フィールドに tcp6 または udp6 を指定します。サービスが IPv4 専用の場合、proto フィールドは tcp または udp として指定します。サービスに tcp6 または udp6 の proto 値を指定すると、inetd は所定のデーモン AF_INET6 ソケットを渡します。
inetd.conf ファイルの次のエントリは、IPv4 クライアントアプリケーションと IPv6 クライアントアプリケーションの両方と通信できる udp サーバー (myserver) を表します。
myserver dgram udp6 wait root /usr/sbin/myserver myserver |
AF_INET (IPv4 専用) ソケットまたは AF_INET6 (IPv6 と IPv4) ソケットを inetd から継承できるよう IPv6 有効化サーバーを書き込むと、サービスの proto 値が tcp6 (udp6) または tcp (udp) として指定されます。この種のサーバーでは、2 つの inetd.conf エントリを、1 つは proto で tcp として、もう 1 つは proto で tcp6 として指定できます。
AF_INET6 ソケットは、IPv4 プロトコルと IPv6 プロトコルのどちらでも使用できるため、proto 値 tcp6 (udp6) を指定すれば充分です。
各種 IPv6 有効化サーバーの記述方法については、『ネットワークインタフェース』を参照してください。
Solaris バンドルサーバーには、いずれも proto を tcp6 または udp6 と指定する inetd エントリが 1 つあれば十分です。ただし、リモートシェルサーバー (shell) とリモート実行サーバー (exec) のエントリには、tcp と tcp6 の両方の proto 値を指定する必要があります。例 16-4 は、rlogin、telnet、shell、exec 用の inetd エントリです。
login stream tcp6 nowait root /usr/sbin/in.rlogind in.rlogind telnet stream tcp6 nowait root /usr/sbin/in.telnetd in.telnetd shell stream tcp nowait root /usr/sbin/in.rshd in.rshd shell stream tcp6 nowait root /usr/sbin/in.rshd in.rshd exec stream tcp nowait root /usr/sbin/in.rexecd in.rexecd exec stream tcp6 nowait root /usr/sbin/in.rexecd in.rexecd |
以上のユーティリティの server_pathname として TCP ラッパー (telnet などさまざまなネットワークサービスで入力要求を監視、フィルタ処理するためのパブリックドメインユーティリティ) を指定するには、TCP ラッパーが IPv6 対応であることが条件です。対応していない場合、TCP ラッパーで使用するサービスの proto を tcp か udp に指定する必要があります。
また、Solaris に含まれるユーティリティを別の実装と交換する場合、そのサービスの実装が IPv6 をサポートしていることを確認する必要があります。サポートしていない場合、proto 値を tcp か udp に指定します。
proto 値を tcp か udp のどちらか一方に指定すると、サービスでは IPv4 だけが使用されます。IPv4 接続と IPv6 接続の両方を有効にするには、proto 値を tcp6 か udp6 に指定する必要があります。サービスで IPv6 をサポートしていない場合、tcp や udp は指定しないでください。
ソケットを使用する IPv6 有効化サーバーの記述については、『ネットワークインタフェース』を参照してください。
ユーザーレベルインタフェースでは、次のユーティリティの組み込み拡張機能も変更されました。
netstat(1M)
snoop(1M)
route(1M)
ping(1M)
traceroute(1M)
ifconfig(1M) ユーティリティも変更されました。詳細については、「ifconfig ユーティリティに対する IPv6 拡張機能」を参照してください。
IPv4 ネットワーク状態の表示の他、netstat では IPv6 ネットワーク状態も表示できます。/etc/default/inet_type ファイルと -f コマンド行オプションで DEFAULT_IP 値を設定して、表示するプロトコル情報が選択できます。DEFAULT_IP のパラメータ設定では、netstat に IPv4 情報だけが表示されていることを確認できます。この設定は、-f オプションで無効にできます。inet_type ファイルの詳細については、inet_type(4) のマニュアルページを参照してください。
新しい -p オプションでは、net-to-media テーブルが表示されます。これは、IPv4 用の ARP テーブルであり、IPv6 用の近傍キャッシュです。詳細については、netstat(1M) のマニュアルページを参照してください。このコマンドの使用方法については、「ネットワーク状態の表示方法」を参照してください。
snoop コマンドは、IPv4 パケットと IPv6 パケットの両方を取り込んで、IPv6 ヘッダー、IPv6 拡張ヘッダー、ICMPv6 ヘッダー、近傍探索プロトコルデータを表示できます。デフォルトで、snoop コマンドは、IPv4 パケットと IPv6 パケットの両方を表示します。ip プロトコルキーワードか ip6 プロトコルキーワードを指定すると、snoop コマンドは IPv4 パケットか IPv6 パケットのどちらかだけを表示します。IPv6 フィルタオプションでは、すべてのパケットをフィルタの対象にでき (IPv4 と IPv6 の両方)、IPv6 パケットだけが表示されます。詳細については、snoop(1M) のマニュアルページを参照してください。このコマンドの使用方法については、「IPv6 ネットワークトラフィックの監視方法」を参照してください。
このユーティリティは、IPv4 ルーターと IPv6 ルーターの両方で実行できます。デフォルトで、route は IPv4 ルートで実行します。コマンド行で route コマンドの直後にオプション -inet6 を指定すると、操作が IPv6 ルートで実行されます。詳細については、route(1M) のマニュアルページを参照してください。
ping コマンドは、IPv4 プロトコルと IPv6 プロトコルの両方で、宛先ホストを調べることができます。プロトコル選択は、指定の宛先ホストのネームサーバーが戻すアドレスに依存します。デフォルトでネームサーバーが、宛先ホストの IPv6 アドレスを戻すと、ping コマンドは IPv6 プロトコルを使用します。サーバーが IPv4 アドレスだけを戻すと、IPv4 プロトコルを使用します。-A コマンド行オプションで使用するプロトコルを指定すれば、この動作を無効にできます。
その他、-a コマンド行オプションを指定すれば、マルチホーム宛先ホストのアドレスをすべて ping できます。詳細については、ping(1M) のマニュアルページを参照してください。このコマンドの使用方法については、「すべてのマルチホームホストアドレスの探査方法」を参照してください。
traceroute コマンドを使用して、指定ホストまでの IPv4 ルートと IPv6 ルートの両方をトレースできます。使用するプロトコルの選択について、traceroute では、ping と同じアルゴリズムを使用します。選択を無効にするには、-A コマンド行オプションを使用します。マルチホームホストのすべてのアドレスまでの各ルートは -a コマンド行オプションでトレースできます。詳細については、traceroute(1M) のマニュアルページを参照してください。
netstat コマンドと ifconfig コマンドによる出力表示の方法を制御できます。
DEFAULT_IP の値は、IP_VERSION4、IP_VERSION6、BOTH のどれかに設定できます。DEFAULT_IP を指定するこのファイルを作成しない場合、netstat と ifconfig では、両方のバージョンが表示されます。
コマンド行引数の一部として使用される inet キーワードオプションと inet6 キーワードオプションは、netstat コマンドと ifconfig コマンドの使用時に inet_type ファイル (存在する場合) で設定した値を無効にします。
関連の操作については、「IPv6 関連コマンドの出力表示の制御方法」を参照してください。
トンネルインタフェースのフォーマットは次のとおりです。
ip.tun ppa |
ppa はアタッチメントの物理的ポイントです。
Solaris ソフトウェアでは、IPv6 パケット内にパケットをカプセル化できません。
システム起動時に、トンネルモジュール (tun) は、(ifconfig) によって IP の最上位にプッシュされ、仮想インタフェースが作成されます。これは、hostname6.* ファイルを作成することによって行われます。
たとえば、IPv4 ネットワーク経由で IPv6 パケットをカプセル化するためのトンネルを作成するには (IPv4 の上に IPv6)、次のファイルを作成します。
/etc/hostname6.ip.tun0 |
このファイルの内容は、インタフェースがプラムされたあとに ifconfig(1M) に渡り、ポイントツーポイントトンネルの設定に必要なパラメータになります。
次のリストは、hostname6.ip.tun0 ファイルのエントリの例です。
tsrc 120.68.100.23 tdst 120.68.7.19 up addif 1234:1234::1 5678:5678::2 up |
この例の IPv4 ソースと宛先アドレスは、ip.tun0 インタフェースのソース IPv6 リンクローカルアドレスと宛先 IPv6 リンクローカルアドレスの自動設定に必要なトークンとして機能します。2 つのインタフェースが設定され、ip.tun0 インタフェースがコメントで記述され、論理インタフェース (ip.tun0:1) には、addif コマンドによってソース IPv6 アドレスと宛先 IPv6 アドレスが与えられます。
すでに述べたとおり、システムを複数ユーザーとして起動すると、これらの構成ファイルの内容が変更されずに ifconfig に渡されます。上の例は次の内容と同じです。
# ifconfig ip.tun0 inet6 plumb # ifconfig ip.tun0 inet6 tsrc 120.68.100.23 tdst 120.68.7.19 up # ifconfig ip.tun0 inet6 addif 1234:1234::1 5678:5678::2 up |
このトンネルにおける ifconfig -a の出力は次のとおりです。
ip.tun0: flags=2200850<UP,POINTOPOINT,RUNNING,MULTICAST,NONUD,IPv6> mtu 1480 index 6 inet tunnel src 120.68.100.23 tunnel dst 120.68.7.19 inet6 fe80::c0a8:6417/10 --> fe80::c0a8:713 ip.tun0:1: flags=2200850<UP,POINTOPOINT,RUNNING,MULTICAST,NONUD,IPv6> mtu 1480 index 5 inet6 1234:1234::1/128 --> 5678:5678::2 |
次の構文で構成ファイルに行を追加すれば、さらに論理インタフェースを設定できます。
addif IPv6-source IPv6-destination up |
トンネルのどちらかの端が、トンネルに対して 1 つ以上のプレフィックスを通知している IPv6 ルーターの場合、トンネル構成ファイルには addif コマンドは必要ありません。他のアドレスは自動設定されるため、必要なのは tsrc と tdst だけです。
場合によっては、所定のトンネルについて、特定のソースリンクローカルアドレスと宛先リンクローカルアドレスを手動で設定する必要があることもあります。その場合、構成ファイルの最初の行を変更して、これらのリンクローカルアドレスを組み込みます。次に例を示します。
tsrc 120.68.100.23 tdst 120.68.7.19 fe80::1/10 fe80::2 up |
ソースリンクローカルアドレスには、長さが 10 のプレフィックスがあります。この例では、ip.tun0 インタフェースは次のようになります。
ip.tun0: flags=2200850<UP,POINTOPOINT,RUNNING,MULTICAST,NONUD,IPv6> mtu 1480 index 6 inet tunnel src 120.68.100.23 tunnel dst 120.68.7.19 inet6 fe80::1/10 --> fe80::2 |
tun の特定の情報については、tun(7M) のマニュアルページを参照してください。IPv6 への移行時のトンネルの概念の一般的な説明については、「トンネル機構」を参照してください。トンネルの設定方法については、「IPv4 トンネルによる IPv6 の設定方法」を参照してください。
ここでは、Solaris 8 リリースで導入された IPv6 の実装によるネーミングの変更について説明します。IPv6 アドレスは Solaris ネームサービス (NIS、NIS+、DNS およびファイル) のどれでも保存でき、IPv6 RPC トランスポートで NIS と NIS+ を使用して NIS データまたは NIS+ データを検索することもできます。
/etc/inet/ipnodes ファイルには、IPv4 アドレスと IPv6 アドレスの両方が保存されます。このファイルはローカルデータベースとして、ホスト名を IPv4 アドレスや IPv6 アドレスに関連付けます。ホスト名やそのアドレスは、/etc/inet/ipnodes などの静的ファイルには保存しないでください。ただし、テスト目的の場合、IPv4 アドレスを /etc/inet/hosts に保存するのと同じ方法で IPv6 アドレスを保存すると便利なこともあります。ipnodes ファイルでは、hosts ファイルと同じフォーマット変換を使用します。hosts ファイルについては、「ネットワークデータベース」を参照してください。ipnodes ファイルについては、ipnodes(4) のマニュアルページを参照してください。
IPv6-aware ユーティリティでは、新しい /etc/inet/ipnodes データベースを使用します。既存の /etc/hosts データベースには、IPv4 アドレスだけを保存していますが、既存のアプリケーションの便宜上、このデータベースは変更されません。ipnodes データベースがない場合、IPv6-aware ユーティリティでは既存の hosts データベースを使用します。
アドレスを追加する必要がある場合、IPv4 アドレスは hosts ファイルと ipnodes ファイルの両方に追加しなければなりません。IPv4 アドレスは ipnodes ファイルにだけ追加します。
# # Internet IPv6 host table # with both IPv4 and IPv6 addresses # ::1 localhost 2::9255:a00:20ff:fe78:f37c fripp.guitars.com fripp fripp-v6 fe80::a00:20ff:fe78:f37c fripp-11.guitars.com frippll 120.46.85.87 fripp.guitars.com fripp fripp-v4 2::9255:a00:20ff:fe87:9aba strat.guitars.com strat strat-v6 fe80::a00:20ff:fe87:9aba strat-11.guitars.com stratll 120.46.85.177 strat.guitars.com strat strat-v4 loghost |
上記の例のように、ホスト名アドレスは、ホスト名でグループにまとめる必要があります。
NIS 用に 2 つの新しいマップが追加されました。ipnodes.byname と ipnodes.byaddr です。/etc/inet/ipnodes と同様に、これらのマップには、IPv4 情報と IPv6 情報の両方が保存されます。既存の hosts.byname マップと hosts.byaddr マップは、IPv4 情報だけを保存していますが、既存のアプリケーションの便宜上変更されていません。
ipnodes.org_dir という名前の新しいテーブルが NIS+ 用に追加されました。IPv4 アドレスと IPv6 アドレスの両方を保存します。既存の hosts.org_dir テーブルは IPv4 情報だけを保存していますが、既存のアプリケーションの便宜上変更されていません。
AAAA レコードとして定義された新しいリソースレコードが、RFC 1886 で定義されています。この AAAA レコードは、ホスト名を 128 ビット IPv6 アドレスにマップします。既存の PTR レコードは IPv6 でも、IP アドレスをホスト名にマップするときに使用されています。128 ビットアドレスの 32 の 4 ビットニブルは、IPv6 アドレス用に予約されています。各ニブルには ip6.int が追加されて、対応する 16 進 ASCII 値に変換されます。
/etc/inet/ipnodes で IPv6 アドレスを調べる機能に加え、IPv6 サポートは、NIS ネームサービス、NIS+ ネームサービス、DNS ネームサービスに追加されています。その結果、nssiwtch.conf(4) ファイルは IPv6 ルックアップをサポートするように変更されました。ipnodes 行を /etc/nsswitch.conf ファイルに追加した結果、Solaris ネームサービス (NIS、NIS+、DNS、ファイル) の新しいデータベースで検索が可能になりました。次に例を示します。
hosts: files dns nisplus [NOTFOUND=return] ipnodes: files dns nisplus [NOTFOUND=return] |
IPv4 アドレスと IPv6 アドレスでこれらの ipnodes データベースを生成してから、複数のネームサービスで ipnodes を探すように /etc/nsswitch.conf ファイルを変更してください。ホストアドレスの解決時に不要な遅延が発生してしまうからです (起動タイミングの遅れが発生することもあります)。
図 16-1 は、gethostbyname() コマンドと getipnodebyname() コマンドを使用するアプリケーションにおける、nsswitch.conf ファイルと新しいネームサービスデータベースの新しい関係を示します。斜体の項目は新規です。gethostbyname() コマンドは、/etc/inet/hosts に保存されている IPv4 アドレスだけを調べます。getipnodebyname() コマンドは、nsswitch.conf ファイルの ipnodes エントリで指定したデータベースを調べます。検索に失敗すると、nsswitch.conf ファイルの hosts エントリで指定したデータベースを調べます。
命名サービスの詳細については、『Solaris ネーミングの設定と構成』を参照してください。
IPv6 をサポートできるように、既存のネームサービスコマンドで IPv6 アドレスを調べることができます。たとえば、ypmatch コマンドは、新しい NIS マップに使用できます。nismatch コマンドは、新しい NIS+ テーブルに使用できます。nslookup コマンドでは、DNS の新しい AAAA レコードを調べることができます。ネームサービスの変更については、「IPv6 の NIS 拡張機能」、「IPv6 の NIS+ 拡張機能」、および 「IPv6 の DNS 拡張機能」を参照してください。
これらのコマンドの使用手順については、「IPv6 ネームサービス情報の表示」を参照してください。
NFS と RPC ソフトウェアは、シームレスに IPv6 をサポートします。NFS サービスに関連のある既存のコマンドは変更されていません。ほとんどの RPC アプリケーションが、変更なしで IPv6 で実行できます。トランスポート機能のある一部の高度 RPC アプリケーションに更新が必要な場合があります。