hIPv4の枯渇が騒がれる今日この頃。
そろそろIPv6の知識を身につけないと、、という事でオライリーのIPv6 エッセンシャルズをずっとgdgd読んでましたがやっぱり実際に実験しながらじゃないとわからないんですよね。
でもやっぱり実際に触りながらでないと覚えれないタイプの人間なので困った物です。
ので、これはHurricane Electric Free IPv6 Tunnel BrokerでIPv6の/64と/48を取得してテスト運用するまでの記録です。
が、その前にIPv6のおさらい(思いっきり間違ってる可能性があるので決して参考にせず運用ではちゃんとRFCか読んでください。あと間違ってたら教えて下さい)
アドレスについて
そこらへんの石ころ全部に付けても足りるとか言われてますが今更書きません
忙しい人向け解説です
- 16ビットごとにコロンで区切って16進数で表記
- 128bitで構成されており/64なら真ん中でブッった切った先頭64bitがサブネットプリフィックス、後半64bitがインターフェース識別子
- 0が続く所は省略できるがルールがある。連続する 0 がいちばん長いフィールドを省略し、長さが同じ場合は前方を省略するとのこと
- 2回以上0 が連続するところは “::” で省略することができるが、アドレスでこの省略を使えるのは一回だけ
- fe80:: から始まるのはリンクローカルアドレス。同一ネットワークでしか動作しない
- リンクローカルアドレスには自身の区別のためインターフェース名や番号が入る
- ::1/128はループバックアドレス。他にもIPv4互換アドレスなどあり
- 多すぎて単位がなじめないが、、アドレス数はIPv4の43億から340澗(340兆の1兆倍)に増加とりあえずいっぱいって事
- /128=当然だが128bitアドレスなのでIPv4の/32に相当、一個を意味
- /64で43億*43億
- /48で43億×43億× 65536個
- これより大きいプリフィックスは普通にはまず利用しないといっていい
サブネットに関してはこのページのアドレスである
2001:470:8644:0001:64c3:beff:fe17:c8bcを例とすると
プロバイダなどのネットワーク部(/32)
組織に割り当てられるネットワーク部(/48)
ユーザーに割り当てられるネットワーク部(/64)
一意のホストネットワーク部(/128)
となる
接続方法について
ネイティブでの接続サービスは探した限りKDDI/IIJしかやっていない
というかIPv6の特性上使えてもIDCかプロバイダでも作らない限り現状では高いお金を払う利点がビジネス上ない、、ような
トンネル(6in4)
IPv6の現実的な対応としてIPv4の中にIPV6を通すトンネル方式(GRE or PPTP or IPIP or TSP etc..)
国内では
海外のサービスはWikipediaにまとまっている
Wikipedia: List of IPv6 tunnel brokers
現在接続しているプロバイダがIPv6コネクティビティサービスかデュアルスタックでの接続を提供していない場合はトンネルを掘るしかない
6to4と6in4は名前は似ているが別物
6in4/6to4/6rd/は全てIPv4ネットワーク上でIPv6で扱う技術だが、実装と仕様がいろいろ違う
Wikipedia: IPv6 トンネリング
アドレスの種類、構成、特殊アドレス
大きく分けて
- ユニキャストアドレス
- マルチキャストアドレス
- エニーキャストアドレス
さらにスコープがあり
- リンクローカルスコープ
- グローバルスコープ
- サイトローカルスコープ(廃止)
エニーキャストはアドレス重複ありで最も近い機器に送られる。電話でいう110番みたいなもの。冗長化に使える。v4ではDNSルートサーバーなどで利用されているもの。
リンクローカルアドレス(fe80::/10)はユニキャストアドレスの一種、1サブネットのみで有効
リンクローカルスコープがルーターを超える事はない
インタフェースIDがIPv6アドレスの後ろに付く
予約、割当済みや特殊なアドレス、範囲等は
- ::/128 未割当
- ::1/128 ループバックアドレス
- 2001:db8::/32 文書作成の為の予約
- 2001::/16 現在払い出し中
- 2002:0000::/32 Teredo用
- 2002::/16 6in4トンネル用
- 3ffe::/16 実験用。廃止済み
- fe80::/10 リンクローカルアドレス
- FF00::/8 マルチキャスト用
- 2000::/3 集約可能グローバルユニキャストアドレス
- FC00::/7 ユニークローカルユニキャストアドレス
- FD00::/8 ローカルIPv6アドレス
- ::ffffからはじまるIPv4射影アドレス(IPv4- mapped address)
- ::/96 IPv4互換アドレス(IPv4-compatible address)
- ::/0 デフォルトルート
アドレスの自動設定とルーター広告[RFC 3756]
大体のネットワーク機器はデフォルトの設定ではステートレスになっているのでDHCPがなくても同じネットワークならつなぐだけで通信可能になる(Plug & Play)
これはfe80::/10を全てのネットワーク機器が持つため。fe80::以降はMACアドレスにFFFEを足して自動生成される
ちなみにMACアドレスは枯渇しないの?とかよく聞かれるから書いとくと70兆ある+ローカルネットワークでしか使用しないので問題ない
ルーター広告(RA)はIPv4にはない概要。ルーターは自身のIPv6プレフィックスを一定間隔でマルチキャストで送出する
この際DNSアドレスは広告されないが、RFC 5006というものもあるがその後進展はない様子
Neighbor Discovery Protocol(NDP RFC 2461)があり、近隣のノードを自動で探索する
ICMPv6 Type=134、Router Advertisement messageを受信してステートレスの機器はルーターのアドレスをとプレフィックスを計算し自動設定を行う
だから無条件でICMPをフィルタするとマズい事になる、、と思われる
あとはここにspoofして悪い事ができるみたいな
DNSまわり
すでにほとんどのルートサーバーはAAAAレコードを持っており=IPv6対応済み
JPドメインはIPv6が使えます(IPv6 Ready)IPv6レコードは当然IPv4と全部共存できる
- IPv6アドレスを示すIPv4で言うAレコードはAAAA
- NSレコードをレジストリに申請できるIPv6 glue
- NSレコードを申請する際は一つのhostレコードにIPv4アドレスとIPv6アドレスの二つを申請すると両方使える
- BindはデフォルトIPv6をListenしてないのでlisten-on-v6をセットする事
Bindでの逆引きがクソ長い、、本当に長い!混乱するのでわかりやすいように色付けしてみる
2001:470:8644:0:64c3:beff:fe17:c8bcのPTRはこんな感じ
c.b.8.c.7.1.e.f.f.f.e.b.3.c.4.6.0.0.0.0.4.4.6.8.0.7.4.0.1.0.0.2.ip6.arpa.
この場合定義するBindの ZONE名は/64とすると真ん中をぶった切って
zone “0.0.0.0.4.4.6.8.0.7.4.0.1.0.0.2.ip6.arpa”
レコードは残り半分をひっくり返して
c.b.8.c.7.1.e.f.f.f.e.b.3.c.4.6 IN PTR www.insaneworks.co.jp.
こんな感じ。特に逆引きは長過ぎる上にアドレスが多すぎるのでどうするべきか。。
各種サーバーの対応
httpdはデフォルトでON、bindやpostfixはデフォルトOFF、sysklogdは未対応
ブラウザでIPv6アドレスでの要求をするにはhttp://[IPv6Addr]/で行う
IPv6でのコマンドはping -> ping、Traceroute -> Traceroute6、wget -> wget -6、ssh -> ssh -6
sshやping6でリンクローカルアドレス(fe80)で接続するにはインターフェース名が必須
ping6 -I eth0 fe80::xxxx
sshの場合は-Iオプションがないのでこのように指定
ssh fe80::xxxx%eth0
PostfixではIPv6はデフォルトOFFなのでinet_protocolsでlistenさせる
その他パケット、ヘッダー構造など
IPv6のプロトコル番号は41
ルーターでのパケットのフラグメントは行われない
IPv6ヘッダーは固定長で40byte、固定長なのでルーター処理がサクサク
ルーティングプロトコルはRIPng、BGP4、OSPFv3で対応、経路集約しやすい
拡張ヘッダが追加
等々いっぱいありますので省略
次回から実際にトンネルを掘って接続してみたいと思います
参考サイト
IPv6 Forum :: Driving IPv6 Deployment
6to4はIPv4のネットワーク上でIPv6で扱う技術です。なにせつい先ほどtun6to4をセットアップしたばかりだから。
指摘ありがとうございます。修正しました。
IPv6アドレスでのコメントは初ですねw