FrontPage
俺的まとめ †
ちっとも普及する気配がないけど、いまさらまとめてみる。
IPv6 のどこがいいの? †
- 豊富なアドレス空間
- NAT(IPマスカレード)とかが不要。すべてにグローバルアドレス振っちゃう感じ。
- IPsec 標準実装
- IPアドレスの自動構成機能
- DHCPみたいに刺せば使える感じ? ルーターがやってくれる。
IPv6 で高速化する? †
- IPv4 に比べて IPv6 はパケットのヘッダがでかくなるのでほんのちょっぴり遅くなる。
- IPv4 でトンネリングすると遅くなる…
- IPv6 のヘッダは固定長なので、ハードウェアで処理しやすくなる。
- IPv6 ではルータでのパケット分割禁止なので、分割に伴うロスがなくなる。
- IPv6 のアドレスはルーティングしやすいように構成されている。
128bit もアドレスに使ったら、ルーティングテーブル爆発しない? †
- アドレスの上位ビットからツリー状に物理的位置を示すようになっている。自由割り当てではない。
- ということは、どこかよその国に出かけたらIPアドレス変わっちゃわない?
- ダイヤルアップのような場合、掛けた先のISPのIPアドレスをもらうことになるはず。
- あくまでISP内、組織内でのルーティング問題になる?
- NLA, SLA による固定的な分割は obsolete。RFC3587 で破棄。CIDR のように組織内で自由に分割してよいことになった。
| オフセット | ビット幅 | 名前 | 用途 |
| 0-2 | 3 | FP | |
| 3-15 | 13 | TLA ID | Top Level Aggregation ID:最上位階層識別子 |
| 16-28 | 13 | sTLA ID | sub TLA ID |
| 29-34 | 6 | 予約 | |
| 35- | - | NLA ID | Next Level Aggregation ID:次階層識別子 |
| -63 | - | SLA ID | Site Level Aggregation ID:サイト階層識別子 |
| 64-128 | インターフェイスID | | |
- いわゆるサブネットは上位64bitで決定する。
- サブネット配下では 64bit のインターフェイスIDを記憶する必要があるはず。
- 通常サブネットは高々数百台なので問題ないと考えられる。
- ISP は sTLA ID まで上位29bit(正味26bit?)を持つ。
- 組織としては通常上位48bit〜64bitを ISP から割り当ててもらう形になる。
- 組織内でサブネットごとに SLA ID を振り出す。
IPv6 と IPv4 の相互通信はどうなってるの? †
- 本質的には IPv6 と IPv4 とはまったくの別物。互換性なし。
- サーバーによっては直接アクセスできないケースは考えられる。
- ホストにその機能があれば(デュアルスタック)、IPv4 のアドレスを IPv4-mapped IPv6 address としてやり取りすることができる。
| IPv4 Server | IPv6 Server | IPv4 Server Dual | IPv6 Server Dual |
| IPv4 Client | IPv4 | x | IPv4 | IPv4 |
| IPv6 Client | x | IPv6 | x | IPv6 |
| IPv4 Client Dual | IPv4 | x | IPv4 | IPv4 |
| IPv6 Client Dual | IPv4 | IPv6 | (x/IPv4) | IPv6 |
(デュアルスタックホスト を Dual と表記)
- IPv6 でコード書いたら、IPv4 と通信できなくなる?
- デュアルスタックホストであれば、IPv6 専用アプリでも通信できる。(IPv4との変換をホストがやってくれる。)
- IPv6 クライアントから IPv4 サーバーに接続する場合、IPv4-mapped IPv6 address を選ぶ必要がある。
- デュアルスタックホストではないと、そもそも動かなかったり、IPv4 と通信できなくなる可能性がある。
- getaddrinfo を使って、どの種別のホストでもかまわないように実装する。
- FreeBSD の場合、カーネル変数 net.inet6.ip6.v6only が 0 の時に IPv4 アドレスから IPv6 アドレスへの自動変換が行われる。
- rc.conf では ipv6_ipv4mapping="YES" にする。
MACアドレスの方が先に枯渇しない? †
- ベンダーIDが24bit, シリアルが24bit
- ベンダーIDはベンダーが複数取ってもかまわない。
IPv6 だと DHCP いらないって? †
- インターフェースにはリンクローカルアドレスが必ず付く。同一リンク内(ルータを越えない単一のサブネット)なら相手とつなげることができる。
- リンクローカルアドレスを示す上位64bitの prefix fe80::/64 と下位 64bit のインターフェースIDを組み合わせる。
- インターフェースIDの生成方法は決まっていて通常は重複しない。
- ルータ広告(RA Router Advertisement)で、IPv6 アドレスの上位64bitの prefix を広告する。
- クライアントは自分のリンクローカルの IPv6 アドレスの下位64bit(インターフェースID)を、広告された上位64bitの prefix と組み合わせて、IPv6 アドレスとする。
- RA パケットの発信元がデフォルトゲートウェイになる。
- 複数のルータがある場合は? RA パケットに優先度が書かれている。
DNS が IPv6 で動かないんじゃ? †
- そもそも DNS サーバに IPv6 で接続できないのでは?
- IPv6 接続に対応した DNS サーバーが必要。少なくとも BIND9 は対応済み。
- そもそも ISP やレジストラの DNS に IPv6 で問い合わせできないのでは?
- ルートサーバーに IPv6 のアドレス(AAAAレコード)が付き始めている。
- ISP やレジストラのDNSは、順次、IPv6 でも問い合わせできるようになってきている段階。
- IPv6 と IPv4 とではレコードが異なる(IPv6はAAAA, IPv4はA)から、一発で問い合わせはできないんじゃないの?
- 2回問い合わせると AAAA レコードがないことがわかるまでの時間がかかるのでは?
- AAAA レコードの問い合わせパケットを出した直後に Aレコードの問い合わせパケットを送る。(これは実装による。)
- 問い合わせた結果、IPv6 アドレスがなくて、IPv4アドレスが返ってきた場合はどうなるの?
- Dual スタッククライアントなら IPv4 で接続する。
- IPv6 と IPv4 とのアドレスが取得できた場合、実際には IPv6 で接続できない場合はどうなるの?
- 接続できないとわかるまで待たされて、次に IPv4 を試すことになる。(が、たいていの場合はタイムアウトで試すことにならないはず。あるいはまったく試さないか。アプリの実装による。)
- DNSサーバーのアドレスを IPv6 でどう自動構成すればいいの?
- LAN では問い合わせ先のアドレス well-known address として fec0:0:0:ffff::1, fec0:0:0:ffff::2, fec0:0:0:ffff::3 を使用することが提案されている。(Windows 7 ではそうしている。)
- IPアドレスの自動構成機能(RA)では DNS サーバーのアドレスを教えられない。DHCPv6 でアドレスを教える必要がある。
- 最近 RFC 5006 で RA で DNS サーバのアドレスを広告するというのが出た。(2007年9月…)
- DNS には UDP パケットの最大サイズ512バイトの制限がある。IPv6のレコード(名前/アドレス)を収めるには短すぎるのでは?
- ルートサーバーやレジストラはDNSサーバーの名前を短くして対応。(圧縮機能があるから、あんまり変わらないような気が。)
- TCP で問い合わせれば 512 バイト以上でもよい。でも、遅い。
- EDNS0 (Extension mechanisms for DNS version 0) で拡張。要求時に受信可能サイズを渡すことができる。
IPアドレスの自動構成はいいとして、名前解決はどうするの? †
- LLMNR (Linklocal Multicast Name Resolution) っつーのでやるとのこと。Windows はこれ。
- mDNS という方法もある。Mac はこれ。
- UDP 5353 ポート
- 昔 Apple が Rendezvous と呼んでいた。今は Bonjour と呼んでいる。
- iTune とか入れると勝手にぶち込まれるのがこれ。
IPアドレスを自動構成するってことは、グローバルアドレス割り当てられたら外から丸見え? †
- はい。丸見え。NAT でセキュリティを確保していた場合、ルータでパケットフィルタなどを用意しないとダメ。
- 大半のパケットフィルタは IPv4 用で、IPv6 はスルーだったりするので要注意。
ISP が IPv6 のサービスしてくれないんじゃ、使えないんじゃ? †
- 外部のトンネリングサービスを利用する。(6to4)
local ISP tunneling remote
+------------+ +----+ +------------+ +----+ +----+
|IPv6 -> IPv4|--|IPv4|--|IPv4 -> IPv6|--|IPv6|--|IPv6|
+------------+ +----+ +------------+ +----+ +----+
ISP の IPv6 たけーんですけど †
- いや、金取りたいのはわかるんですけどね。水道のパイプを金属からプラスティックに変えるのに料金負担させますか。
IPv6 試しに使ったらやけに遅いんだけど †
- 「IPv6 にしたら速くなる」ってことは、残念だけどまずないです。プロバイダは IPv6 が速いかのように宣伝してますが大ウソです。
- デュアルスタックでは、DNS をAレコードを検索してから、AAAAレコードを検索します。
- AAAA からじゃねーの? と思うけど、Aレコードの方が多いのでこっちかららしい。
- IPv6 で DNS に問い合わせてアクセスして失敗したら IPv4 に切り替えてやり直します。
- たぶん遅くなる大半がこれ。
- よって、IPv6 アドレスと IPv4 アドレスとを同じドメイン名で提供するとろくなことにならないようです。('A`)
- よって「透過的な移行」なんてたぶんできないです。
- IPv6 はヘッダがでかくなります。
- 6to4 なんかやってたら、当然おそくなります。
プログラミングはどうすりゃいいの? †
で、結局普及するの? †
- Windows 2000 では IPv6 Technology Preview をインストールする必要がある。でも、一番使うであろう IE 6.x は IPv6 Technology Preview に未対応。
- Windows XP はすぐにインストール可能。でもトンネルがない。
- 以下のコマンドをたたくと IPv6 スタックがインストールされる
ipv6 install
- アンインストールしたい時には以下のコマンドをたたく
ipv6 uninstall
- Windows Vista は IPv6 標準装備。トンネルも用意。
- Windows 7 では、Teredo サーバー(teredo.ipv6.microsoft.com )が用意された。知らず知らずのうちに IPv6 reachable になっているが、名前解決で IPv6 のアドレスが取得されないのであれば、全く使われない。
- NTT東西のフレッツは地域網として IPv6 対応済みだが、Internet reachable ではない。('A`)
- djb は普及しないと見ている。デュアルスタックのクライアント/経路/サーバーのコストが異様に高いと見ているため。でも、クライアント側は Windows Vista で一変しそうな雰囲気。残るは経路とサーバー。
- サーバーも大部分はOSレベルでは対応済みだったりする。
- 問題は
- IPv6のアドレス割り当て(コストかかる)
- IPv6を通してくれる経路(コストかかる)
- アプリケーション対応(IPv4用アプリをIPv6も可能に書き換える必要あり。)(コストかかる)
- ルータとかファイアウォールとか負荷分散装置とかのIPv6対応、対応品への交換(コストかかる)
- 「IPv6? 何それ? IPv4で同じサービスできるならそれでいいじゃん」「はい、ごもっともです。」
- 新規プロジェクトならIPv6使う可能性はあるかも?
- でも、IPv6 を知ってる技術者どのくらいいるの? 見たことないよ。
- え、KAMEプロジェクト解散済みだったのか
- KDDIがやってた6to4実験ルーター停止
- IPTVテクノロジの本質 http://itpro.nikkeibp.co.jp/article/COLUMN/20080526/304009/?ST=ngn
- うれしいのは消費者じゃなくて権利者だけっぽいですね…
- いつ帯域使い切ってトラブル起こすか(・∀・)ニヤニヤしながら見守ってます