IPv6 Networking FAQ
このページは作成中ですので、 コメントや提案を歓迎します。
- かめプロジェクト, 現在マージされているIPv6実装のでもと
- 6bone: 世界規模の IPv6 実験ネットワーク
- Freenet6.net
- SixXS IPv6 の配置とトンネル提供
- ipv6.org
- 6to4 Explained
- 実装に関する詳細情報
- Introduction to IPv6 by Hubert Feyrer
- Getting Connected with 6to4 by Hubert Feyrer
- web ページから利用できるIPv6 ツール
IPv6 のコードは、 1999 年 6 月に NetBSDの配布にマージされ、 NetBSD の一部となっています。 IPv6設定はほとんどIPv4の場合と同じですので、 IPv4ネットワーキングのための説明も参照ください。
ほとんどのアーキテクチャー (ポート) の GENERIC カーネルは、 デフォルトで IPv6 対応が有効になっています。 ユーザープログラムは、(可能な限り) IPv6 に標準で対応していますので、 IPv4 だけに対応したカーネルと IPv4/v6 両対応カーネルを切替えて使う場合でさえも、 再構築の必要はありません。
1992 年ごろ、 IETF では、 IPv4 アドレスの世界的な不足と、 IPv4 のもつ制限による新しいプロトコルの展開への技術的な障害を認識するように なりました。 これらの問題を解決するため、 IPng (IP next generation: 次世代 IP) の検討が始まりました。 この議論は RFC1550 に始まる RFC 群で概説されます。 多くの議論のすえ、 1995 年ごろ、 IPv6 (IP version 6: IP バージョン 6) が 最終的な IPng の提案として選ばれました。 IPv6 の基本的な仕様は RFC2460 に定められています。
一言でいえば、 IPv6 は IP 技術に対する再設計の成果です。 重要な特徴としては、以下のようなものがあります:
- 広い IP アドレス空間。 IPv4 で使う IP アドレス空間はわずか 32 ビットで、これは、 インターネット上で 40 億ノードの識別しかできません。 40 億は大きな数に見えるかもしれませんが、 これは地球上の総人口より少ないのです! IPv6 では 128 ビットの IP アドレス空間を用意しており、 インターネット上で 340282366920938463463374607431768211456 (340澗, 340 * 10^36) 個のノードを一意に識別することができるようになります。 広いアドレス空間によって、真に端から端へのやりとりを、 NAT や他の IPv4 のアドレス不足への一時的な代替策を使うことなしに、 実現できます。 (今日では、 NAT は新しいプロトコルへの対応やスケーラビリティーの 問題といった頭痛の種を抱えています。インターネットをより成長させるためには、 NAT ネットワークはまさに廃止する必要があります)
-
より新しい技術の利用。
20 年前に IPv4 が策定されて以来、
ネットワーキングに関するさまざまな技術の進歩がありました。
IPv6 はそれらの改良の多くを基本仕様の中に含んでおり、
これらの機能をいつでもどこでも使えることを前提にして使うことができます。
「いまどきの技術」には、次のようなものがあります (これだけに限りませんが):
- 自動設定。 IPv4 では DHCP がありますが、これはオプションです。 DHCP サーバーのないサイトにやってきた初心者にとっては、 問題があるかもしれません。 IPv6 では、「ステートレスホスト自動設定 (stateless host autoconfiguration)」の仕組みが必須です。 これは、 IPv4 の DHCP よりも簡単に使ったり管理したりできます。 この仕様は RFC2462 で決められています。
- セキュリティー。 IPv4 では IPsec はオプションであり、相手が IPsec に対応しているかを たずねる必要がありました。 IPv6 では、 IPsec への対応が必須です。 IPsec を必須にすることで、 IPv6 のデバイスと通信している限りは、 安全な IP 通信ができます。
- トラフィック工学技術への適応。 IPv6 は、 diffserv や intserv (RSVP) といったトラフィック工学によりよく対応できるように設計されました。 我々はまだ、トラフィック工学のための単一の標準を手にしていません。 それゆえ、 IPv6 基本仕様では、そのような技術にそなえてヘッダー領域に 24 ビットの空間を確保しておくことで、 IPv4 よりもすばらしい来たるべき標準 になることができます。
- マルチキャスト。 マルチキャストは IPv4 ではオプションでしたが、 IPv6 では必須です。 IPv6 の基本仕様それ自体が、マルチキャストを広く使っています。
- アドホックなネットワーキングへの、よりよい対応。 スコープ付きアドレスにより、アドホックな (あるいは「設定不要な」) ネットワーキングへの、よりよい対応ができます。 IPv6 はエニーキャストアドレスにも対応しており、 サービスの探索にも役立ちます。
- さらにいろいろ。
- ルーティングテーブル肥大化の解消。 IPv4 バックボーンのルーティングテーブルの大きさは、 ISP やバックボーンの運営者にとって大きな頭痛の種でした。 IPv6 アドレス仕様では、ルート集約を主張して、 バックボーンルーティングエントリーの数を制限しています。 現在の IPv6 アドレス仕様では、デフォルトフリーのゾーンでわずか 8192 ルートです。
- 簡略化されたヘッダーの構造。 IPv6 パケットのヘッダーの構造は、 IPv4 のものより簡略なものになっています。 これにより、ベンダーが将来、 IPv6 ルーターのハードウェアアクセラレーションを実装することが、 容易になるでしょう。
- 柔軟なプロトコル拡張性。 IPv6 では、 protocol header chain の導入により、 IPv4 より柔軟なプロトコル拡張が可能となっています。 IPv6 では柔軟なプロトコル拡張が可能となっていますが、 中間ルーターには負荷をかけません。 これは、ヘッダーを二つの要素 ─すなわち、 中間ルーターが検査する必要のあるヘッダーと、 終端のノードが検査するヘッダー─に分割することで実現されています。 また、これにより IPv6 ルーターのハードウェアアクセラレーションが 容易になります。
- IPv4 からの円滑な移行。 IPv6 の議論のなかで、移行に関する考察がいくつもなされました。 そして、多くの移行のための仕組みが利用可能です。 そのなかから、あなたのサイトに最も適した方法を選ぶことができます。
- IPv4 の重要な設計思想の継承。 IPv4 は、世界中で非常に大規模に使われることで証明されてきたように、 大変成功した設計です。 IPv6 は「 IP の新バージョン」であり、 IPv4 を成功させた 設計の多くを継承しています。 これにより、 IPv4 から IPv6 への円滑な移行が可能となります。
- さらにいろいろ。
IPv6 に関する良書がたくさん出ていますので、 興味があればそれらを見てみてください。
- ipv6.org
- Barnes & Noble で "IPv6" に関する書籍を検索 (注意: 私たちは、書店に関する特別な推奨は、 一切していません)
- Introduction to IPv6 by Hubert Feyrer
ネットワークは、テキスト形式の設定ファイルによって設定されます。 ホスト(ルーターでないノード)を自動設定する場合、 以下のファイルのうちいくつかは編集しなくて済みます。
-
/etc/rc.conf
- rc.conf(5) は、 システムの初期化時に、ネットワークサービスを含むシステムサービスを 自動的に開始するための設定をします。 -
/etc/hosts
- hosts(5) は FQDN 名と IPv6 数値アドレスの対応を含むことができます。 -
/etc/ifconfig.
、または<IF>
/etc/rc.conf
内のifconfig_
- ifconfig(8)を使ったIPv6ネットワークの設定を ここに含めることができます。<IF>
IPv6では、ルーターとホストは明示的に区別されています。 自分宛でないパケットをフォワードするノードをルーター、 そうでないノードをホストといいます。 ルーターは手動で設定する必要があります。 ルーターはrtadvd(8)デーモンを使って、サブネットの情報を広告します。 ホストは多くの場合、ネットワークインターフェースを1つしか持っていません (これは本ドキュメントの一部で仮定されています)。 ホストは多くの場合、広告されたサブネットに関する情報をもとに自動設定されます。
IPv6 ホストの自動設定には、二つの異なる機構が決められています。 一つは ステートレスアドレス自動設定 (stateless address autoconfiguration) と呼ばれるもので、 RFC2462 で定められています。 もう一つは DHCPv6 と呼ばれるもので、これは IETF dhc ワーキンググループで討議されているものです。 NetBSD は現在、前者を実装しています。
ステートレスアドレス自動設定は、基本的には次のように機能します。 ここでは、ホスト (自動設定が必要なもの) と ルーター (必要な情報をホストに与えるもの) の二者を考えます。
- ホストは、ネットワークインターフェースにリンクローカルアドレスを設定します。
リンクローカル IPv6 アドレスは "fe80" で始まり、
最下位 64 ビットに値を持ちます。
この最下位 64 ビットの値は インターフェース ID と呼ばれています。
Ethernet や、いくつかの他のインターフェースでは、
MAC アドレスをもとにインターフェース ID が作られています。
% ifconfig ne2 ne2: flags=8863<UP,BROADCAST,NOTRAILERS,RUNNING,SIMPLEX,MULTICAST> mtu 1500 media: Ethernet manual inet6 fe80::a00:5aff:fe38:6f86%ne2 prefixlen 64 scopeid 0x1
- ルーター上で rtadvd(8) を走らせることにより、ルーターはリンク
(イーサネットセグメントなどの) に関する情報を、
リンク上のすべてのノードに対し、定期的に広告します。
この情報は ICMPv6 の "ルーター通知 (router advertisement)" パケットで運ばれます。
ここで示す例では、下記の情報を広告します。
- IPv6 サブネットのプレフィックスは 2001:218:420::/64
- デフォルトルーターは fe80::240:5ff:fea0:8e08
- そして、他のいくつかのパラメーター。 IPv6 link MTU, default hoplimit, や router lifetime など。
14:18:20.812850 fe80::240:5ff:fea0:8e08 > ff02::1: icmp6: router advertisement\ (chlim=64, router_ltime=1800, reachable_time=30000, retrans_time=1000)(src\ lladdr: 0:40:5:a0:8e:8)(mtu: mtu=1500)(prefix info: LA valid_ltime=2592000,\ preffered_ltime=604800, prefix=2001:218:420::/64) 6000 0000 00a0 3aff fe80 0000 0000 0000 0240 05ff fea0 8e08 ff02 0000 0000 0000 0000 0000 0000 0001 8600 d38d 4000 0708 0000 7530 0000 03e8 0101 0040 05a0 8e08 0501 0000 0000 05dc 0304 40c0 0027 8d00 0009 3a80 0000 0000 2001 0218 0420 0000 0000 0000 0000 0000
- ホストはこの広告を受けとり、グローバル IPv6 アドレスと
デフォルトルーターを設定します。
ホストで ndp(8) を走らせることで、一番最近の router advertisement
の詳細を見ることができます。
% ifconfig ne2 ne2: flags=8863<UP,BROADCAST,NOTRAILERS,RUNNING,SIMPLEX,MULTICAST> mtu 1500 media: Ethernet manual inet6 fe80::a00:5aff:fe38:6f86%ne2 prefixlen 64 scopeid 0x1 inet6 2001:218:420:0:a00:5aff:fe38:6f86 prefixlen 64
- オプションとして、ホストは ICMPv6 "ルーター要請 (router solicitation)" パケットを送って、
ルーターからの広告を要請することができます。
rtsol(8) は router solicitation パケットを送ります。
もし移動するノードを運用するのなら、 rtsold(8) を走らせて
定期的に router solicitations を送出するのもいいでしょう。
このパケットは次のようになっています:
14:18:20.300501 fe80::a00:5aff:fe38:6f86 > ff02::2: icmp6: router solicitation\ (src lladdr: 8:0:5a:38:6f:86) (len 16, hlim 255) 6000 0000 0010 3aff fe80 0000 0000 0000 0a00 5aff fe38 6f86 ff02 0000 0000 0000 0000 0000 0000 0002 8500 d7b0 0000 0000 0101 0800 5a38 6f86
この方法は ステートレスアドレス自動設定と呼ばれますが、 これはルーター側でステート (状態) を管理する必要がないからです。 これは非常に単純で堅固で効果的な自動設定の仕組みです。
ルーターは自動設定できないことに注意してください。 ルーターは本当に手動で設定する必要があります。
まず、IPv6グローバルアドレスを上流組織から入手すべきでしょう。 手にいれたなら、以下の手順をふんでください。
- ネットワークインターフェースの手動設定を
/etc/ifconfig.
(rc.conf(5)) または<IF>
/etc/netstart.local
に記述します。 詳しくは下記の項目 をご覧ください。 -
rc.conf(5) の以下の行を設定します。
ip6mode
="router"rtsol
="NO"rtadvd
="YES"rtadvd_flags
="sm1 ne2" # set interfaces to advertise -
/etc/rtadvd.conf
(rtadvd.conf(5)) を編集して、 router advertisement のタイマーを 微調整してもいいでしょう。 - RIPngを使って経路を広告したければ、 rc.conf(5) を route6d(8) を起動するように設定します。
- ルーターを再起動します。
IPv6 の仕様上の制限のため、 ルーターを自動設定することはできません。 設定の微調整をしようとしないでください。 結果として、予期しない結果に終わることになるでしょう。
IPv6ルーターがネットワーク上にいるなら、以下の手順をふめばホストの設定が完了します。 再起動の後、ホストは隣接ルーター上の rtadvd(8) が放送した router advertisement によって自動設定されます。
-
rc.conf(5) の以下の行を設定します。
ip6mode
="autohost"rtsol
="YES"rtsol_flags
="sm1" # set your interface hereup !rtsol $int
- ホストを再起動します。
IPv6ルーターがネットワーク上にいない場合、 手動設定が必要です。 詳しくは 次の項目をご覧ください。
また、 IPv6 の仕様の制限のため、多数の外部インターフェース (たとえば二つのイーサネットインターフェースなど) を持つホストでの自動設定は、推奨されません。 この場合は手動設定してください。 詳しくは 次の項目をご覧ください。
IPv6 の主な新機能のひとつは、どこででも自動設定が使えることです。 IPv6 アドレスは 128 ビットあるので、 手動設定では間違えやすくなっています。 できるかぎり手動設定は避けるよう、強くおすすめします。 たとえば:
- ルーターに経路の設定をする場合は、 route6d(8) のようなルーティングデーモンを走らせます。
- ホストのインターフェースアドレスを設定する場合は、
ip6mode=autohost
とrtsol=YES
を設定して、 隣接ルーターから情報を入手します (rc.conf(5) 参照) 。
手動設定したほうが簡単だと思うかもしれませんが、それは間違いです。 手動設定をすると、保守作業のツケを将来にまわすことになります。
もし、本当に手動設定が必要なら、この先の説明を読んでください。
ノードの設定を手動でしなければならない場合、 rc.conf(5) にネットワークインターフェースの手動設定を 加えてください。
最初に、下のように ip6mode
を設定して、
そのノードの種類 (ホストかルーターか) を明示する必要があります。
ip6mode="router" # パケットを他に転送する ip6mode="host" # パケットを他に転送しない
そして、 rc.conf(5) 、または /etc/rc.d/network
に記述されている
/etc/ifconfig.xxN
のようなファイルに、インターフェースの設定を追加してください。
/etc/ifconfig.xxN
は、下記のように
複数の行を使うことができます:
inet 10.1.1.1 netmask 0xffffff00 inet6 2001:db8:1234::1 prefixlen 64 alias
行末の "alias"
に注意してください。
IPv6 では複数のインターフェースアドレスがあるため、
このキーワードは必須です。
設定が rc.conf(5) でカバーされていない場合は、
/etc/netstart.local
または
/etc/rc.local
に設定を書き加えることができます。
次のようなプログラムを使う必要があるでしょう:
- ifconfig(8) - ネットワークインターフェースの設定を見たり変更したりする。
- route(8) - 経路表を操作する。
文字列のホスト名をIPv6アドレスの数字に変換するには、
/etc/hosts
(hosts(5)) やDNSが使えます。
これはIPv4の場合と同じです。
yp(8) も多分使えると思いますが、著者はIPv6アドレスを解決するのに
yp(8) を使ったことがありません。
-
/etc/hosts
(hosts(5)): ノードが少ししかない小規模なネットワークでは、各ノードの /etc/hostsにホスト名/IPアドレスの対応を書くとよいでしょう。/etc/hosts:
2001:db8:1234::a:b:c:d host2.example.net host2
-
DNS: ネームサーバー (named(8)) を介してアクセスできるゾーンファイルで ホスト名の対応を集中管理することもできます (DNSの設定や管理について www.dns.net にたくさんのドキュメントがあります)。
正索きゾーンファイルのエントリー
host2 IN AAAA 2001:db8:1234::a:b:c:d
逆索きゾーンファイルのエントリー
d.0.0.0.c.0.0.0.b.0.0.0.a.0.0.0.0.0.0.0.4.3.2.1.8.b.d.0.1.0.0.2.ip6.arpa. IN PTR host2.example.net
注意: DNS の A6 レコードやビットストリングラベルについてお聞きになったことがあるかもしれませんが、 現在これらは実験的な状態なので、 気にする必要はありません。 AAAA は商用サービス用に使われることとなっており、満足に機能しています。
また、逆索き DNS テーブルが
ip6.int
からip6.arpa
に移行していることにも注意してください。本稿執筆時点では、6Bone (3ffe) アドレスは ip6.int としてのみ知られていますが、ip6.int が消えた時には、 商用アドレスは ip6.arpa の下でアナウンスされるはずです。
以下のアドレスは、グローバル DNS クラウドに出しては「いけない」ことに注意してください:
- リンクローカルアドレス (fe80::/10 に該当するもの、たとえば fe80::1)
これは、グローバル到達性がありません。
- ユニークローカルアドレス (fc00::/7 に該当するもの、たとえば fd00::1)
これも、グローバル到達性がありません。 これはプライベートアドレスに相当するものなので、 イントラネットの DNS クラウドで使うことができます。
- v4 射影アドレス ( ::ffff:0.0.0.0/96 に該当するもの、たとえば ::ffff:10.1.1.1)
このアドレスはノード内での内部向け専用です。 これを直接 DNS データベースに入れないでください。
以下のアドレスは、 DNS クラウドに入れることは推奨しません:
- マルチキャストアドレス (ff00::/8 に該当するもの、たとえば ff05::1)
NetBSD/KAME の IPv6 コードは、以下のアドレスには対応していないため、 本来の用途には使えません:
- v4 互換アドレス ( ::0.0.0.0/96 に該当するもの、たとえば ::10.1.1.1)
NetBSD/KAME は RFC2893 auto tunnel に対応していません。
IPv6 アドレスの割り当てと IPv4 のそれとでは、 二つの点で違いがあります。
-
IPv6 サブネットのプレフィックス長は常に /64 であり、これと異なることはありません。 これにより、たくさんの IPv6 デバイスをネットワークメディアとすることができます。
IPv4 では、プレフィックス長はサブネットごとに様々であるため、 サブネットの振りなおしはうんざりする苦痛になります (たとえば、 IPv4 サブネットを /28 から /29 に、 あるいはその逆に振り直すことを想像してください) 。
-
普通のリーフサイトはいつも、アドレス空間に /48 をとり、 これにより、サイトの振りなおしが容易になり、また、 ISP の乗り換えも容易になります。
IPv4 では、 割り当てはサイトの規模によって異なるため、たとえば ISP を乗り換える際には、大変な負担がかかることになります。
周辺の ISP の状況によっては、 (IPv4 で行なっているような) ネイティブな IPv6 接続ができるかもしれませんし、トンネルされた接続 (IPv6 パケットを IPv4 パケットにカプセル化する) ができるかもしれません。 ここでは、後者の場合について説明します。
"6bone"という名前のIPv6実験ネットワークに あなたのマシンを接続することができます。 最も近くの6boneサイトと相談して、IPv6プレフィックスアドレスを 割り当ててもらいましょう。 なお、6boneに接続するには通常固定のIPv4グローバルアドレスが必要です。
(ISPにダイアルアップ接続しているなどで)固定のIPv4グローバルアドレスがなくても 慌てないでください。 Freenet6に接続できます。 Freenet6はダイアルアップ接続するたびにIPv6ネットワークに再接続できるよう、 webインターフェースを提供しています。
どちらの場合にも、あなたのIPv6ルーターに、 IPv6-over-IPv4トンネリングインターフェースを設定する必要があります。 gif(4) のマニュアルも参照してください。
-
gifトンネルの設定: 以下の内容をもつ
/etc/ifconfig.gif0
ファイルを作ります。 最初の引数 (x.x.x.x
) は自分の IPv4 アドレス、二番目の引数 (y.y.y.y
) は相手方の IPv4 アドレスです。create (1.5 より後でのみ必要) tunnel x.x.x.x y.y.y.y
または、以下の行を
/etc/netstart.local
か/etc/rc.local
に追加します。# ifconfig gif0 create (1.5 より後でのみ必要) # ifconfig gif0 tunnel x.x.x.x y.y.y.y
-
トンネルがうまく機能しているか確認します : 最初に、次のコマンドを念じながら試します :
# ping6 -n ff02::1%gif0
ローカルノードからのパケットとリモートノードからのパケットの二つが 観測されれば、トンネルはうまく機能しています。 もし x.x.x.x と y.y.y.y の間で IPv4 到達性に問題があれば、 応答は一つだけ、あるいはまったくないでしょう。 問題がある場合は以下の点を調べてください:
- 通信相手との間に NAT 箱がないことを確認します。 トンネルされた IPv6 パケットは NAT 箱を通り抜けられません。
- 通信相手との間に IPv4 パケットフィルターがないことを 確認します。
-
経路交換: 上流の設定によって、デフォルトルートを上流に設定する必要があるか、 または、ルーティングデーモンを走らせる必要があるかもしれません。
上記の設定は RFC2893 IPv6-over-IPv4 設定されたトンネルを使います。 RFC2893 パケットは NAT ルーターを通り抜けられないことに注意してください (トンネルの端点それ自体─ NetBSD 箱─が NAT ルーターである場合は、 その問題は起こらないでしょう)。
以下もあわせて参照してください:
- 6bone
- Freenet6.net
- 6to4 Explained
- Getting Connected with 6to4 by Hubert Feyrer
net/hf6to4
上流から、自分のホームネットワークのアドレスに、アドレスプレフィックス 2001:db8:1234::/48 が 割り当てられていると仮定します。 自宅には以下のように二つのイーサネットセグメントがあります。 myrouter A と myrouter B はいずれも IPv6 が使える NetBSD を走らせます。 IPv4 アドレスは以下のとおり指定されています。 x.x.0.1/24 内にある myrouter A から、 y.y.y.10 の上流のルーターまで IPv6-over-IPv4 トンネルを経由して、上流に接続したいものとします。
myrouter A | IPv4 x.x.0.1/24 | ==+=== ethernet 0 | | IPv4 x.x.0.2/24 myrouter B | IPv4 x.x.1.2/24 | ==+=== ethernet 1
-
最初に、 myrouter A から上流へのトンネルの設定が必要です。 myrouter A 上で、 ifconfig(8) を使ってトンネルの設定をしてから、 ping6(8) を使って到達性を確かめてください。 "ff02::1" は全ノードマルチキャストアドレスと呼ばれ、このトンネル上の すべてのノード (この例では myrouter A と上流のルーター) に到達するはずです。 二つのノードからの応答があれば、トンネルはうまく機能しています。 一方のノード (myrouter A 自身) からしか応答がない場合は、 上流との間に何か問題があります。 これは IPv4 フィルタリングのせいかもしれませんし、どちらかの側での設定誤り、 あるいは別の原因のせいかもしれません。 先に進む前に、問題を突き止めてください。
# ifconfig gif0 create (1.5 より後でのみ必要) # ifconfig gif0 tunnel x.x.0.1 y.y.y.10 # ping6 -I gif0 -n ff02::1 PING6(56=40+8+8 bytes) fe80::a00:5aff:fe38:6f86 --> ff02::1 16 bytes from fe80::a00:5aff:fe38:6f86%lo0, icmp_seq=0 hlim=64 time=0.334 ms 16 bytes from fe80::240:5ff:fea7:f092%gif0, icmp_seq=0 hlim=64 time=3.416 ms(DUP!)
-
次に、あなたのアドレスブロック 2001:db8:1234::/48 から、 二つのイーサネットセグメントにサブネットアドレスを割り当てる必要があります。 IPv6 サブネットのプレフィックス長は常に /64 なので、 65536 個ものサブネットを割り当てることができます! ここでは単に ethernet 0 に 2001:db8:1234:0::/64 を、 ethernet 1 に 2001:db8:1234:1::/64 を割り当てます。
myrouter A ---- tunnel -------> 上流 | IPv4 x.x.0.1/24 IPv4 y.y.y.10 | ==+=== ethernet 0: x.x.0.0/24, 2001:db8:1234:0::/64 | | IPv4 x.x.0.2/24 myrouter B | IPv4 x.x.1.2/24 | ==+=== ethernet 1: x.x.1.0/24, 2001:db8:1234:1::/64
-
ルーターに IPv6 グローバルアドレスを割り当てましょう。 ルーターは「かならず」手動設定する必要があるので、 手動設定の節で説明したように "ifconfig" をする必要があります。 myrouter A で、 ("fe80" から始まる) リンクローカル IPv6 アドレスを調べ、 その下位 64 ビットを、サブネットアドレスの上位 64 ビットと組み合わせ、 それを設定します。 リブートしても設定がなくならないようにするには、この設定を /etc/ifconfig.ne2 に加えます。
# ifconfig ne2 ne2: flags=8863<UP,BROADCAST,NOTRAILERS,RUNNING,SIMPLEX,MULTICAST> mtu 1500 address: 08:00:5a:38:6f:86 media: Ethernet manual inet x.x.0.1 netmask 0xffffff00 broadcast x.x.0.255 inet6 fe80::a00:5aff:fe38:6f86%ne2 prefixlen 64 scopeid 0x1 # ifconfig ne2 inet6 2001:db8:1234:0:a00:5aff:fe38:6f86 prefixlen 64 alias # echo 'inet6 2001:db8:1234:0:a00:5aff:fe38:6f86 prefixlen 64 alias' >> /etc/ifconfig.ne2
myrouter B でも同様に設定します。
# ifconfig tlp0 inet6 2001:db8:1234:0:a00:5aff:fe38:8765 prefixlen 64 alias (ethernet 0 側) # ifconfig tlp1 inet6 2001:db8:1234:1:a00:5aff:fe38:9710 prefixlen 64 alias (ethernet 1 側)
-
経路情報交換のため、両方のルーターで route6d(8) を走らせます。 上流が経路情報の集約を要求している場合は、 マニュアルページでコマンドラインオプションを調べてください。 これで上流への接続性が得られたはずですので、外部の IPv6 ノードへ ping を試してみましょう。 ping6(8) に "-n" オプションを指定するのを忘れないでください。 IPv6 アドレス逆引きには非常に長い時間がかかることがあるので、テストのときはそれを避けましょう。
# route6d (両方のルーターで) # ping6 -n www.6bone.net
-
ネットワーク上に末端ホスト (ルーター以外のノード) がある場合は、 サブネットの情報をルーターから末端ホストに広告させるとよいかもしれません。 そうすれば、末端ホストが自動設定可能になります。 そのためには、 /etc/rtadvd.conf を用意して rtadvd(8) を走らせる必要があります。 上流のルーターからのサブネット情報は広告すべきだということに注意してください。 図中、 myrouter A は ethernet 0 に対して広告すべきで、 myrouter B は ethernet 0 と 1 に対して広告すべきです。 myrouter B から ethernet 0 への広告を抑制したいと思うかもしれません。 というのも、 B は下流にあって、デフォルトルーターとして最適ではないからです (ただし、この広告を抑制すると、 myrouter A がお亡くなりになられた時、 ethernet 0 にあるマシンが ethernet 1 にあるマシンと対話できなくなります)。
# rtadvd ne2 (myrouter A から ethernet 0 への広告) # rtadvd tlp0 tlp1 (myrouter B から ethernet 0 と 1 への広告)
場合によっては、上流組織が、上記の筋書きとは異なる設定をするよう 求めてくるかもしれません。
固定の IPv4 グローバルアドレスが複数ある場合は、 自分の /48 IPv6 プレフィックスに対して 6to4 の仕組み (RFC3056) を使うことができます。
「公開 6to4 リレールーター」と呼ばれるルーターが公開されており、 他のサイトへのトンネルになってくれます。 あなたのマシンの一台を、IPv6 パケットを IPv4 パケットで包んで公開 6to4 リレールーターに投げ (、逆に、リレールーターから IPv4 パケットを受け取って IPv6 パケットを抽出す) る 6to4 ゲートウェイとして設定する必要があります。 IPv4 アドレスが x.y.z.u であるとすると、IPv6 プレフィックスは 2002:xxyy:zzuu::/48 となります (xx, yy, zz, uu は、それぞれ x, y, z, u の十六進表記)。
ISP から割り当てられた IPv4 アドレスがプライベートアドレス (10.x.x.x など) の場合は、残念ながら 6to4 の仕組みは使えません。 この仕組みは NAT デバイスをまたいでは動かないのです。
以下のような構成を仮定し、myrouter A の IPv4 アドレスは x.y.z.u であるとします。 myrouter B の IPv4 アドレスは何でもかまいません。
myrouter A | IPv4 x.y.z.u | ==+=== ethernet 0 | myrouter B | ==+=== ethernet 1
-
最初に、myrouter A で 6to4 トンネルインターフェースの設定をする必要があります。 トンネル内では IPv6 サブネットのプレフィックスとして 2002:xxyy:zzuu:0000::/64 を使うことにします。RFC 3068 によれば、6to4 を使う場合は常に、 デフォルトルーターを 2002:c058:6301:: に設定すべきです。これは、最寄りの (BGP の用語でいえば anyhow) リレールーターを表す特別なエニーキャストアドレスです。 利用可能な公開 6to4 リレールーターの一覧 もあります。 注意: stf0 インターフェースでは IPv6 マルチキャストができないため、 ff02::1 を使ったテストはできません。 古い NetBSD リリースでは、GENERIC カーネルで stf0 インターフェースが標準で有効にはなっていなかったため、 このインターフェースを有効にしてカーネルを再コンパイルする必要があるかもしれません (NetBSD 4.0 では、そうする必要はなくなっています)。
# ifconfig stf0 create (1.5 より後でのみ必要) # ifconfig stf0 inet6 2002:xxyy:zzuu:0000::1 prefixlen 16 alias # route add -inet6 default 2002:c058:6301:: (または、この一覧にあるもののどれか)
-
次に、お持ちのアドレスブロック 2002:xxyy:zzuu::/48 のなかから、 二つのイーサネットセグメントのサブネットアドレスを割り当てる必要があります。 2002:xxyy:zzuu:0000::/64 はトンネル用に使っているので、 これはイーサネットインターフェース用には使えません。 ここでは 2002:xxyy:zzuu:0001::/64 と 2002:xxyy:zzuu:0002::/64 を使うことにします。
: 6to4 トンネル、2002:xxyy:zzuu:0000::/64 : myrouter A | IPv4 x.y.z.u | ==+=== ethernet 0: 2002:xxyy:zzuu:0001::/64 | myrouter B | ==+=== ethernet 1: 2002:xxyy:zzuu:0002::/64
-
これで、前の項目に戻って myrouter B、RIPng ルーティングと、ルーター広告の設定ができる状態になりました。
以下もあわせて参照してください:
- 6to4 Explained
- 6to4 information at www.6bone.net
- Getting Connected with 6to4 by Hubert Feyrer
(IPv4 を含まない) 完全な IPv6環境に移行するには、 IPv6 をしゃべる
ネームサーバーに接触する必要があります。
これは簡単なことです: resolv.conf(5) に IPv6 アドレスを書けばよいだけです。
IPv6 トランスポートに対応した DNS サーバーを走らせたければ
net/bind9
をお試しください。
resolv.conf(5) の設定例は以下のようになります:
nameserver 2001:200:0:1::f
上のアドレスで IPv6 に対応した DNS サーバーが走っているので、 どうぞご自由にお試しください。
IPv6 だけに対応したクライアント と IPv4 だけに対応したサーバーを直接つないだり、 その逆はできません。 これには、 "トランスレーター" と呼ばれるデバイスが必要になります。
NetBSD には、 IPv6 だけ (あるいは IPv4/v6) のクライアント が IPv6 TCP を使って
IPv4 だけのサーバーに接触するのを可能にする
faithd(8) TCP リレートランスレーターが含まれています。
net/totd
DNS proxy サーバーを利用すれば、
以下のような IPv6-to-IPv4 トランスレーター環境の導入ができます:
+--IPv6 だけのクラウド ---------+ | | |IPv6 だけの faithd(8) IPv4 だけの |クライアント == IPv6 ===> が走っている ----- IPv4 --> サーバー | tcp トランスレーター tcp | | +-------------------------------+
実際の設定には、次のドキュメントを参照してください。
以下もあわせて参照してください:
- IETF ngtrans working group
- RFC3142: "An IPv6-to-IPv4 transport relay translator", faithd(8) がどのように機能するかを説明したインターネットドラフト (日本語訳)
- src/usr.sbin/faithd/README
net/totd
あなたの組織に IPv4 だけのルーターや IPv4 NAT ルーターがあるなどして、 直接 IPv6 でのネットワークを組むことの障害になっているなら、 次の方法でこれらの障害を乗り越えることができます。 あなたのネットワーク構成に最適な方法を選んでください:
- 二つのイーサネットセグメントの間に、二つのルーターを置くことができます。
一つは IPv4 用、もう一つは IPv6 用です。
IPv6 専用ルーターを二つのセグメントの間に置くことにより、
IPv6 のルーティングだけをさせられます。
この方法なら、 IPv4 ネットワークには触らないままにしておくことができます。
外部へのルーター | ==+=======================+=== IPv4/v6 サブネット A | | IPv4 専用ルーター IPv6 専用ルーター | (IPv4 だけを | (IPv6 だけを | 転送) | 転送) ==+=======================+=== IPv4/v6 サブネット B
- IPv4 での プライベート/グローバル アドレスの使い方は、
IPv6 ネットワークには全く影響しません。
あなたのネットワークの管理ポリシーで認められていれば、
IPv4 ネットワークが NAT 箱/ファイヤーウォールによって
グローバルアドレスセグメントとプライベートアドレスセグメントにわけられていても、
それとは関係なく、グローバル IPv6 到達性を持たせるように設定できます。
外部へのルーター | ==+=======================+=== サブネット A: IPv4 グローバル、 IPv6 グローバル | | IPv4 専用 NAT ルーター IPv6 専用ルーター | | ==+=======================+=== サブネット B: IPv4 プライベート、 IPv6 グローバル
- いくつかの場合、通常の IPv4 ルーターを使ったセグメント間を跨いで
IPv6 トラフィックをブリッジすることができます。
IPv4 ルーターを、イーサネットプロトコルタイプ 0x86dd
をブリッジさせるように設定できるなら、 IPv6 トラフィックだけをブリッジできます。
この場合、 サブネット割り当ては IPv4 と IPv6 で異なることになります
- もし、やりすぎると頭痛の種になるかもしれません……。
外部へのルーター | ==+======== ether セグメント 1: IPv4 サブネット A、 IPv6 サブネット X | IPv4 専用ルーター (ether type 0x86dd をブリッジ) | ==+======== ether セグメント 2: IPv4 サブネット B、 IPv6 サブネット X (同上)
- あなたの組織から相手までに IPv4 到達性があれば、
IPv6-over-IPv4 トンネルを両者の
IPv4 だけのネットワークの間をまたぐのに使えます。
+--- IPv4 だけのクラウド----------------+ | | +<================ IPv6-over-IPv4 トンネル ============>+ | | | | | +---------------------------------------+ | | | IPv4/v6 ルーター IPv4/v6 ルーター | | ==+======= IPv4/v6 セグメント 1 ==+======= IPv4/v6 セグメント 2
IPv6 はまだ幼年期にあるので、 いくつかの非標準なものや仕様の穴があります。 KAME IPv6 実装はそれらに取り組んでいます。
-
IPv6 の仕様では、「スコープ付きの (scoped) 」アドレス、すなわち、 世界規模で一意ではないアドレスを規定しています。 スコープ付きアドレスを明確にするために、 アドレスのスコープを明示的に定義する必要があります。 たとえば、仕様では "リンクローカルアドレス" を規定していますが、 これは単一のリンク上だけでユニークです。 アドレスを明確にするために、リンクローカルアドレスには、 どの「リンク」のものかを明示する必要があります。
KAME の IPv6 コードでは、カーネル内部構造中で スコープ付きアドレスの 3 バイト目と 4 バイト目にスコープ識別子を組み込んでいます。 このため、時々 "fe80:1::abcd:1234:abcd:1234" のような内部形式を見かけると思います。これは "fe80:0000:0000:0000:abcd:1234:abcd:1234 on scope 1" を意味します。 このような内部形式での指定は可能な限りしないでください。
スコープ付きアドレスを明確にするには、以下の二つの方法があります:
- ping6(8) に対する -I オプションのような、特別なコマンドラインオプションを使います。
- アドレス指定に、
fe80::1%de0
のような、 拡張されたスコープ付きアドレスの記法を使います。 この記法は、いくつかの限られたアプリケーションのみで使えることに注意してください (getaddrinfo(3) を使うアプリケーションがこの記法を扱えます)。
- ローカルネットワークで何らかの実験を行う時は、 サイトローカルユニキャストアドレスを使わないでください。 仕様書の書き方は、曖昧すぎます。 隔離された (外部につながっていない) ネットワークを動かしたい場合は、 ユニークローカルアドレスを使うのがよいでしょう。 ユニークローカルアドレスは RFC2893 で仕様が定められています。
- その他、実装についての詳細は、 KAME implementation document にあります。
仕様に関する事柄ではありませんが、挙げておく価値のある事柄がいくつかあります:
- すべてのツールで IPv6 通信の準備ができているわけではありません。 yp(8) では、データベース中に IPv6 アドレスを入れることはできますが、 IPv6 通信には対応していません (IPv6 クラウド上では名前解決ができません)。
- pkgsrc ディレクトリーのいくつかのものは、
USE_INET6
で IPv4/v6 両対応のものの構築と IPv4 だけに対応したものの構築を切り替えます。USE_INET6
を定義しておけば、自動的に、 IPv6 の準備のできている NetBSD システム向けのものになります。 - この実装は自動トンネル (RFC2893) にも 6over4 (RFC2529) にも対応していません。これらの標準は、広く使われてはおらず、 IPv6 コミュニティーでは廃れたものと考えられているからです。
-
AF_INET6
ワイルドカードリスニングソケットは、必要な設定をした場合に限って IPv4 コネクションを捕捉します (このふるまいは RFC2553 に記述されています)。 これは、仕様上のセキュリティーホールを塞ぐためです。 詳しくは inet6(4) および ip6(4) をご覧ください。 - IPv6 は、ネットワークインターフェースにマルチキャストへの対応を要求します。 ドライバーのマルチキャストへの対応に何らかの問題がある場合 (対応していない、マルチキャストフィルター設定にバグがある、など)、 IPv6 は全く動きません。 この種の問題がありましたら、 バグ報告をしていただくようお願いします。
- NetBSD には getipnodebyname(3) と getipnodebyaddr(3) がありません。 これらは、 IPv6 の基本的な API 仕様で事実上非推奨であるからです。 これらはまた、スコープ付きの形式の IPv6 アドレスに対応していません。 これらの代わりに、 getaddrinfo(3) と getnameinfo(3) を使ってください。
何か疑問がありましたら、 ためらわずに tech-net メーリングリストや users@ipv6.org へ質問してください。 ネットワーク設定について質問する場合は、「かならず」あなたのサイトの ネットワーク構成図をつけてください。 ネットワーク構成図がなければ、誰もあなたのネットワーク設定を推測できません。
- 監視に便利なツール
- ifconfig(8) - ネットワークインターフェースのパラメーターを設定したり調べたりする
- route(8) - 経路表を操作する
- ping6(8) - ICMPv6 ECHO_REQUESTパケットをネットワーク上のノードに向けて送る
- traceroute6(8) - パケットがノードに到着するまでの経路を表示
-
net/tcpdump
- ネットワークインターフェース上のトラフィックを選択して表示 - netstat(1) - ネットワーク状態の表示
- ndp(8) - arp(8) の IPv6 版
- ifmcstat(8) - カーネルのマルチキャストグループ設定の確認
- systat(1) 'systat netstat' - ネットワーク接続を動的に表示
- IPv6 自動設定
- ルーティングデーモン
- route6d(8) - routed(8) のような RIPng ルーティングデーモン
-
net/pim6dd
- PIMv6 dense mode マルチキャストルーティングデーモン -
net/pim6sd
- PIMv6 sparse mode マルチキャストルーティングデーモン -
net/zebra
- zebra ルーティングデーモン、 RIPng, BGP4+ および OSPFv6 に対応
- IPv6 関連の疑似インターフェース
以下もあわせて参照してください:
基本システムにある次のプログラムでは IPv6 が利用できます:
dig(1),
finger(1),
fstat(1),
ftp(1),
host(1),
netstat(1),
rlogin(1),
rsh(1),
systat(1),
telnet(1),
tftp(1),
whois(1),
faithd(8),
fingerd(8),
ftpd(8),
ifconfig(8),
inetd(8),
lpd(8) (と関連プログラム),
mld6query(8),
named(8),
ndp(8),
ping6(8),
pppd(8),
rdate(8),
rip6query(8),
rlogind(8),
route6d(8),
rshd(8),
sendmail(8),
syslogd(8),
tcpdchk(8) (と関連プログラム),
telnetd(8),
tftpd(8),
traceroute6(8),
trpt(8),
X(7) (X サーバーとライブラリー)
.
RPC と NFS も IPv6 に対応しました。
また、 IPv6 に対応した パッケージも、ますます多くなっています。
IPv6対応した外部のソフトウェアを利用したい場合、 多くの場合IPv6パッチを入手しないといけません。 ネットワークのいろんな場所にIPv6パッチがおかれています。
以下もあわせて参照してください:
この IPv6 Configuration Help サイトは The NetBSD Project が所有しています。