IPv6
RFC1883 -> RFC2460 -> RFC8200
基本的にはIPv4と変わらない。が次の内容が大きく違う。
IPヘッダ
IPアドレスの自動設定機能
1つのインタフェースに複数アドレス付与可能
アドレス長が32bit -> 128bitに伸びた。
IPv6 Header
Headerは全部で40 byteで固定長。IPv4は可変長だった。
version: 4bit filead 6をあらわす0110が埋め込まれている。IPv6を示す。
TrafficClass: TOS相当。優先制御につかう。
Flow label: RFC 6437まだあまり使い方がきまってない、
Payload Length: Playloadの長さ。これに40を足した値がIPv6パケット全体の長さ。
NextHeader: IPv6ヘッダの次に続くヘッダを示す。IPv4との最大の違い。
TCPヘッダがつづくなら6
IPv6拡張ヘッダ(ルーティングヘッダ)が続くなら43
IPv6拡張ヘッダを解釈するのはIPv6ヘッダのdst AddressのNodeのみ
HopLimit: ルーターの最大ホップ数。経路ループでの暴走防止機構。TTL相当。
Souce Adress
Destiantion Address
IPv6 Extend Header
順番大事
MTU
IPv6は最小のMTUは1280 octetsと規定されている。
ipv6表記
:: による0省略、大文字小文字などがあってわりと色々な書き方ができてしまう・・
設定ファイルを絞り込む際に不便・・
RFC5952で明確にルールが決められたのでこれを守るとよい。
先頭の0はすべて省略
::は最も長い部分に適用
同じ長さの場合には前半に適用
1フィールド(hextet)だけの”::”利⽤は禁⽌
2001:db8::1:1:1:1:1はNG
2001:db8:0:1:1:1:1:1はOK
アルファベットは⼩⽂字を⽤いること
IPv6とIPv4の違い
IPv4アドレスは32bit, IPv6は128bit
IPv4
ARP
ICMP
ネットワークアドレス部はCIDRで自由に変えられる
IPv6
自動探索
MLD
Error notification
ネットワークアドレス部が/64で固定
これ以上のネットワーク分割ができない。
複数のネットワークが必要なら/63などより大きい単位でもらう必要がある。
IPv4は一つのネットワークインターフェースに設定するIPは一つ
IPv4だと一つの物理的IFに複数IPをふりたい場合はこれまではsub intefaceを別途作っていた。
IPv6は1つのネットワークインターフェースに複数IPを割り当てられる。
IPv4のIP割り当てはDHCP。ISPからは一つのIPアドレスを割り当てられる。
IPv6はDHCPv6-PD。ISPからネットワークプレフィックスレベルで割り当てられる。
RAもある。
中継ノードでパケットフラグメントはIPv6では禁止
IPv6ではブロードキャスト廃止、IPv6ではマルチキャストする。
マルチプレフィックス問題
次の二つが付与されると通信がうまくできないよねという問題
プロバイダーから付与されるipv6アドレス
インターネットにでれないNTTからのipv6アドレス
ipv6ではI/Fに複数アドレスを付与できる都合で様々な考慮事項が増える
送信元アドレス選択
I/Fに複数アドレスあるので通信の際にどちらを使うかという問題
RFC6724,6725で規定
アドレス種別で優先度をポリシーテーブルに記載して選択している
デフォルトゲートウェイ選択
複数のRAを受けれるのでデフォルトゲートウェイも複数付与可能。
デフォルトゲートウェイアドレスはRAの送信元ルーターになるらしい
一応RAでPreferece値を設定できるが、同じ場合はどうなるのか。
実装依存らしい
送信元アドレスとデフォルトゲートウェイの組み合わせ
Address aと対応するゲートウェイ A
Address bと対応するゲートウェイ B
src aでゲートウェイAになげればうまくいく
src aでゲートウェイBになげてうまく通信するかはかなり怪しい
非対称経路になるので間にファイアーウォール等があれば間違いなく落ちる。
IPv6アドレス構造
前半64bit: ネットワークプレフィックス。IPv4のネットワークアドレス。
後半64bit: インタフェースID。IPv4のホストアドレスに相当。
一つの組織には/48のprefixが割り当てられて/64prefixでサブネット割り当てが可能。
ipv6 アドレス
グローバルユニキャストアドレス
現在は2000::/3を利用
ユニークローカル
fc00::/7 実質はfd00://8
ipv4でいうプライベートアドレス
ただしNATをさせたいわけではない。
ipv6は複数アドレスを割り振れるので、インターネットに接続させたいならグローバルも振るのが原則
グローバルIDというものがある。
ネットワーク統合時にプライベートアドレス競合が必要の際に利用
ユニークなIDをアドレスに埋め込んでユニークにする仕組み
リンクローカル
自動付与
fe80::/10
同一セグメントでの通信につかわれる
ルーターはリンクローカルパケットはルーティングしない
不正RA注意
L2スイッチでRAガードいれるのが手っ取り早い
あとはフラグメントされたNDPパケットの利用禁止(RFC6980)
不正NAもある
ユニキャストアドレス
loopback
::1/128
文章用アドレス
192.0.2.0/24
2001:db8://32
マルチキャストアドレス
ff00://8
1:n通信を使う場合に使用
映像配信ライブ配信などの特定グループに向けて送信
NDPでも利用している
scopeがある
全ノードマルチキャストアドレス
要請ノードマルチキャストアドレス
RFC4291問題
000 bitではじまるものを除き、すべてのインターフェースIDは64bit長、つまりサブネットは/64であると定義。
/127のp2pリンクなどの例外がある。このためホスト側の実装でIFにつくアドレスのサブネットは/64固定で実装されているものがよくある。例えばファイアウォールや一部ルーターでp2pで接続するlinkに/127でアドレスを付与しようとしても、このルールによるホスト側の実装都合で/64でしかアドレスを与えられないケースがある。
IPv6アドレス種類
ユニキャストアドレス
グローバルユニキャストアドレス:全世界でユニークなアドレス。ISPから配布される。
リンクローカルユニキャストアドレス: 同一リンク内だけで利用できるアドレス。FE80::ではじまる。自動的に設定される。
ユニークローカルユニキャストアドレス: 自由に使えるが完全に一意でないアドレス。ipv4ローカルリンクアドレスのようにつかう。正直使わない。
マルチキャストアドレス: FFで始まる。ブロードキャストのかわり
エニーキャストアドレス: 単一の一番近い相手と通信するのに使う。
IPv6アドレス設定方法
RA(Router Advertisement)
DHCPv6
static
RA(Router Advertisement)
Happy Eyeballs
RFC6555
IPv6,v4のデュアルスタック環境でフォールバック問題をどうにかするためのipv6,ipv4のDNS、TCP接続の制御アルゴリズム。
v1,v2がある。
大雑把には次のアルゴリズム。ipv6が不安定または使えないならipv4を使うようになっている。
v1だとipv6のAAAAレコード問い合わせを先にする。
問い合わせ完了後(またはランダム時間後に)にipv4のAレコードを問い合わせをする
得られたアドレスの接続が早く完了したものを優先して使わせる。
早く問い合わせをする分、基本的にはipv6を有利にしている
現在だとv2であるRFC 8305が推奨される。
v2はipv6,ipv4 同時にクエリ問い合わせを実行して使えるほうを使う
ただし実装によってはipv4のクエリが早く帰ってきてもipv6を50msecまつ仕組みもある
IPv6をなるべく使いたいという感じ
現在の機器はhappy eyeballsに従うかはともかくipv6を大体優先する仕組みにはなっている。
AAAAレコードだけを下手に登録するhappy eyeballs対応できてない機器はタイムアウトまで待ってしまうので注意
ipv6対応するぜと言って下手にいきなりAAAA登録するとそれだけで遅延につながるかも
NDP: ARPとICMPv6
macaddressを知る手段としてNDP(Neighbor Discovery Protocol)を利用する。
IPv4のようにARPは使わない。
ip neibhorとかでわかる。
arpコマンドだと確認不可能なので注意。
IPv6 Documentation prefix
IPv6 VRRP
本当なのか知らんが理由としてはlink-local がIPv6のneighbor discoveryで使われいてホストのデフォルトルートとして
設定されるからとか書かれている。
ipv6を有効にするとDNS round robinうまくいかずにアプリ側での対応が必要かもという話。ただかなり古い話なので注意
ipv6のソースアドレス選択について
Lets all ipv6 RA suppress
ipv6 nd ra suppress
上記はよく使われるが、間違っていてる。
IXやサーバーファームセグメントでは無駄なRA抑止のため、上記設定がされている。
上記設定では実はたりない。以下の設定が必要
ipv6 nd ra supress all
allがないとRS(Router Solicaitation)パケットを受け取ったときにRAを返してしまっている。
要はホスト側からの要求がきたらRAを返している。
ホスト側の設定いかんでホストに意図しないアドレスを付与してしまっている。
allなしのsupressの厄介なのが,intervalでのRA広報だけは停止していること
定期的なRAがないのでホストのRAで作成されたIP等々がしばらくするとliftime expiredされる
起動時からしばらくは通信できて、一定時間後に通信できないという珍妙な障害に繋がる
routeing header type 0 DOS
source route で使う
昔このパケットの扱いでDOSの問題があったらしい
source routing 使わないならno ipv6 source-routeで抑制
ospf
interface-id snmp-if-index
passive-interface default
timers throttle spf 1000 1000 1000
timers throttle lsa 1 1000 5000
トラフィック状況
2022年現在ではおおよそ25-30%くらいのトラフィックがipv6っぽい
ただこれはあくまでgoogleでの話。
さらにいうとおそらくはこれらは動画トラフィックが割合としては多いはず
結局インターネット全体としてみるとipv4がまだまだトラフィックとしてははるかに強い。
ユーザーがipv6を使うようになっているといってもインターネットではCGNでのipv4通信になっていたりするので
ipv6トラブルシューティング
ipv6取得方法
2つ
IPアドレス指定事業者(ISP)から
JPNICから直接分配を受ける
/48の割り当てをうける
すでにIP指定事業者ならば/32の割り振りを行う
APNICもらうに申請してももらうことはできる
addressing
基本的にはipv4と同じ
経路集約
リンクローカルアドレスは手動で行う
ipv6 filterについて