自宅ネットワークをIPv6対応にした話

自宅ネットワーク(左側の拠点)ではフレッツ光ネクストを足回りに、プロバイダはASAHIネットを利用していますが、IPv6インターネット接続に対応したということで設定してみました。

301 Moved Permanently

なお地域によっては、IPv6設定を追加することで速度向上につながるようですが(※NTT網(IPv4)の混雑区間をバイパスできるため)、当方の環境では特に速度低下は確認されておらず、IPv4でも150Mbps程度の速度が出ているため、単純に技術的興味からの設定変更となります。

ASAHIネット IPv6接続の概要

以下のページに記載してあります。

http://asahi-net.jp/service/ftth/ipv6/

ただ本ページから私が読み取れたのは

  • 接続方式:IPoE
  • IPv6アドレスは固定ではない
  • 特に設定変更なく利用できる(NTT貸与のひかり電話ルータを利用している場合)

のみで、如何せん情報不足かと思います。
自前ルータを設置している私は何をしたら良いのかわかりませんでした。

IPv6の基礎知識

怠慢によりIPv6について理解していなかったので、これを機に勉強することにします。

IPv6 - Wikipedia

アドレスは128bit

全体として128bitで構成されており、16進数(つまり4bit単位で32桁)で表記します。
4文字(16bit)単位でコロンで区切り、2001:0db8:bd05:01d2:288a:1fc0:0001:10ee のように表記します。

最も一般的なLANネットマスクは/64

IPv4と同様にCIDR表記でネットワークを分割することができます。
IPv4における/24のような一般的なLANアドレスは/64のようです。16エクサ個のホストを収容できるので、ほぼ無限といえます。

NATはしない、プライベートアドレスは存在しない

ほぼ無限にアドレスが存在するため、アドレス変換は必要とせず末端にまでグローバルIPを付与することが基本です。以前はプライベートアドレス帯域の指定もあったが現在は廃止されています。

ルータアドバタイズ(RA)によるアドレス配布ができる

ルータにてルータアドバタイズ(RA)を有効にすれば、配下のホストにネットワークアドレスとルータのIP(ゲートウェイ)を通知できます。受信したホストは自身のMACアドレスからIPアドレスを生成することができます。
DNSサーバアドレスの通知はRAではできないため、DHCPv6と併用することが基本です。

IPoE接続とは

要するにPPPoE等のトンネルセッションを利用せずに直接接続することを言うらしい。

フレッツ網におけるIPv6 - Wikipedia

固定IPではない、との説明ではありましたが、余程のことが無い限り変わらないかと。

設定変更

IPv6アドレスの取得

さて、概要がわかったところで設定変更に入ることにします。
IPoE接続のため、単にIPv6アドレスをRAにより設定できればいいことになります。

当方の場合、WAN側インタフェースはLAN3なので

# ipv6 lan3 dhcp service client
# ipv6 lan3 address dhcp
# ipv6 route default gateway dhcp lan3

すると、確かに2405から始まるIPv6アドレスが設定され通信ができるようになりました。

# show ipv6 address lan3
LAN3 scope-id 3 [up]
 Received:    945588 packets 112687415 octets
 Transmitted: 240 packets 31261 octets

 グローバル     2405:XXXX:XXXX:1310:2a0:deff:fe6b:1fa3/60 (lifetime: 13631/13631)
 リンクローカル fe80::2a0:deff:fe6b:1fa3/64
 リンクローカル ff02::1/64
 リンクローカル ff02::2/64
 リンクローカル ff02::1:ff6b:1fa3/64

# show ipv6 route
Destination              Gateway                  Interface  Type
default                  fe80::1eb1:7fff:fe73:e11e
                                                  LAN3(DHCP) static
2405:XXXX:XXXX:1310::/60 -                        LAN3       implicit

# ping6 kizawa.info
2600:9000:2029:9400:f:8f26:c140:93a1から受信, シーケンス番号=0 hlim=52 時間=11.900ミリ秒
2600:9000:2029:9400:f:8f26:c140:93a1から受信, シーケンス番号=1 hlim=52 時間=8.271ミリ秒
2600:9000:2029:9400:f:8f26:c140:93a1から受信, シーケンス番号=2 hlim=52 時間=8.165ミリ秒
2600:9000:2029:9400:f:8f26:c140:93a1から受信, シーケンス番号=3 hlim=52 時間=7.970ミリ秒
2600:9000:2029:9400:f:8f26:c140:93a1から受信, シーケンス番号=4 hlim=52 時間=8.072ミリ秒
IP情報はマスキングしています。

拠点①のRTX1200では /60のネットマスクでRAを受信しました。
実はひかり電話の契約有無で動作が異なります(当方は契約あり)

ひかり電話契約がある場合はフレッツ網より /56 のRA通知がされますが、ホームゲートウェイで一旦受信され配下には /60 のRAが通知されます。未契約の場合は /64 が通知されます。

ホームゲートウェイでアドレス持って行きすぎだよ!と思いつつも上記の通り1文字で4bit単位を表記する以上、中途半端な位置で切っても解りにくいだけ、との判断であったのでしょうか。

なお、ホームゲートウェイのデフォルト設定ではインバウンドのIPv6通信は通さないようになっていますので、以下の設定においてフィルタリングの設定は省いています。

宅内ネットワークアドレスの分割(拠点①)

さてルータで受信できたところで、LAN内アドレスの設定(配布)を行います。
/60 でアドレス割り当てを受けたので、つまり /64 のセグメントを16個作成できることになります。必要十分、といったところでしょうか。

拠点①のDMZ(LAN2)には 2405:XXXX:XXXX:1311::/64 を、内部セグメント(LAN1)には 2405:XXXX:XXXX:1312::/64 を割り振りました。

(内部セグメント)
# ipv6 lan1 dhcp service server
# ipv6 lan1 address dhcp-prefix@lan3::2:0:0:0:1/64

# ipv6 prefix 2 dhcp-prefix@lan3::2:0:0:0:1/64
# ipv6 lan1 rtadv send 2 m_flag=off o_flag=on

(DMZ)
# ipv6 lan2 dhcp service server
# ipv6 lan2 address dhcp-prefix@lan3::1:0:0:0:1/64

# ipv6 prefix 1 dhcp-prefix@lan3::1:0:0:0:1/64
# ipv6 lan2 rtadv send 1 m_flag=off o_flag=off

DMZセグメントではDNSサーバのアドレス通知等は不要のため、以下のサイトを参考にDHCPv6を無効としRAのみ動作させました。

CentOS6
2020/3/16変更
ヤマハの技術情報に従い、プレフィックスの末尾を1に変更しました

IPv6 over IPv4 トンネル設定(拠点②)

拠点②のISPでは現時点でIPv6接続提供の予定はありません。
折角なので拠点②でもIPv6を利用したい、ということで既存IPv4トンネルを介してIPv6を行えるようにしました。

とは言っても難しくなく、既存トンネルにv6のルーティングを通しただけです。

拠点①側設定(RTX1200)

/60ネットワークを半分に区切り、後半(1318~131F)のセグメントを拠点②にルーティングします。/60の半分ですから/61ですね。

# ipv6 route 2405:XXXX:XXXX:1318::/61 gateway tunnel 1
拠点②側設定(RTX1100)

拠点②のDMZ(LAN1)には 2405:XXXX:XXXX:1318::/64 を、内部セグメント(LAN2)には 2405:XXXX:XXXX:1319::/64 を割り振りました。

(DMZ)
# ipv6 lan1 dhcp service server
# ipv6 lan1 address 2405:XXXX:XXXX:1318::1/64

# ipv6 prefix 1 2405:XXXX:XXXX:1318::1/64
# ipv6 lan1 rtadv send 1 m_flag=off o_flag=off

(内部セグメント)
# ipv6 lan2 dhcp service server
# ipv6 lan2 address 2405:XXXX:XXXX:1319::1/64

# ipv6 prefix 2 2405:XXXX:XXXX:1319::/64
# ipv6 lan2 rtadv send 2 m_flag=off o_flag=on

(デフォルトルート設定)
#ipv6 route default gateway tunnel 1

本来であれば(アドレスが変わるかもしれないので)拠点①側で受信したプレフィックス情報をRAで拠点②側に配布したいのですが、色々試したもののできませんでした。

つきましてはIPv6アドレスが変更になった際には異常が出ると思われます。

動作確認

拠点②の内部セグメント(2405:XXXX:XXXX:1319::/64)に接続されたPCからIPv6テストサイトにアクセスし確認した結果です。

Test your IPv6.
This will test your browser and connection for IPv6 readiness, as well as show you your current IPv4 and IPv6 address.

IPv4とIPv6の割り当てプロバイダが異なるため、トンネルを利用していることがバレてしまいましたね。それでも全く利用には問題ないようです。

ひとまず問題ないようで満足です。
デュアルスタック接続で快適なインターネット接続となりましたが、OpenVPNクライアントセグメントにも割り振りたいとか、課題はまだ残っている状態です。

将来的に拠点②側のIPv6接続がリリースされた際には、IPv4 over IPv6のトンネルに変更しようかなー。夢が膨らみますね。

コメント

  1. トモヒロくん@IPv6勉強中 より:

    はじめまして。
    私も似たようなことを試している最中なので、よろしければ教えてください。

    > 本来であれば(アドレスが変わるかもしれないので)拠点①側で受信したプレフィックス情報をRAで拠点②側に配布したいのですが、色々試したもののできませんでした。

    これって、「RTX1200のDHCPv6サーバにPD機能がない」ってことなのかなと思っているのですが、何かご存知でしょうか?

  2. kizawa2020 より:

    こんばんは。コメントありがとうございました。
    記事では端折ってしまいましたが、以下の経緯となります。

    記事では拠点①ー②間のトンネルをアンナンバードで設定していますが、この場合はプレフィックスを受け渡す方法が無いかと思います。
    そこでトンネルの拠点①側のインタフェースにIPv6アドレスを付与してDHCPv6サーバを稼働させてプレフィックスを受け渡せば良いのでは?と考えて設定してみましたが、拠点②側にアドレス付与はできませんでした。

    原因はIPv4トンネルがアンナンバードの設定であるためなのかもしれませんので、IPv4トンネルもナンバードの設定にすればできるかもしれません。
    (結構大掛かりの設定変更のためまだ試していません)

  3. SLAAC より:

    IPv6のDUIDは時刻とMACアドレスを連結したものを元にして算出してる場合もあるので、結局1回目と2回目ではIPv6の値が変わってしまうことは大いにあるのでどちらも同じと思われます