フレッツ光ネクストのIPv6との戦い


IPv6のことがある程度知っている前提で書いています。
分からない方は、勉強しながら見てください。

ひかり電話の有無で変わるprefix

これが全ての元凶でした。
IPv6 IPoEで利用しようとすると、ひかり電話の有無でIPv6のアドレス取得方法が異なるうえ、prefixが異なるという、大変厄介なモノです。

ひかり電話ありの場合

ひかり電話が利用できる状態の時だと、DHCPv6-PD+RAでフレッツ網からIPv6のアドレスを取得してきます。
その時、NTTのホームゲートウェイがprefix/56で受け取ります。
ホームゲートウェイ配下に設置しているRouterにはDHCPv6-PDで/60のprefixを配ってきます。

ひかり電話なしの場合

ひかり電話が利用できない状態の時だと、RAでフレッツ網からprefix/64のアドレスしかもらうことができません。
そのため、Routerを介したネットワークを組むことができなくなり、インターネット側とLAN側をL2で繋がないといけなくなります。

セキュリティとネットワーク構築の観点から、インターネット側とLAN側をIPv6のみL2接続するのはいかがなモノかと思うところがあります。

RouterBoardでの苦悩

さて、ここからが本題です。

ひかり電話が無い状態でどうRouterBoardを用いてIPv6ネットワークを構築するかです。
結果からお伝えします。”IPv6 PPPoE”を利用するです。

フレッツ光ネクスト特有のわけわからん仕様を海外製のRouterBoardが対応してるわけありませんから。

数日、RAが直接クライアントのマシンに届くように、インターネット側のポートもLAN側のbridgeに割り当てて、ごにょごにょしようとしましたが、PPPoEやDHCPの問題がでて諦めました。一応、RAはクライアントのマシンに届き、IPv6のインターネットはできましたよ。


フレッツ光ネクストのIPv6との戦い」への7件のフィードバック

  1. g_yotuya

    これも、課題の一つですね。
    某所で話題のscriptを配置しておきます。
    自分はrOSの後ろでシェルを走らせ、これを走らせてたりします。

    see U
    ———————————————————————————————————以下script

    #!/bin/bash

    eth=eth0

    while :
    do
    ping -6 ff02::2 -c 3 >/dev/null
    tcpdump -i $eth -x -t -n -l -c50>/dev/shm/ra

    if cat /dev/shm/ra |grep -sq “router advertisement, length 56”; then

    cat /dev/shm/ra |sed -n -e “/router advertisement, length 56/,/0x0050/p” >/dev/shm/ipv6
    cat /dev/shm/ipv6|sed -e ‘1,2d’|sed -e ‘2,4d’|sed -n ‘1,2p’|sed -e “s/\t0x0010: //”|sed -e “s/\t0x0050: //”|sed -e “s/ /:/g”>/dev/shm/ra
    busybox ifconfig $eth >/dev/shm/eth
    cat /dev/shm/eth |grep Scope:Link|sed -e “s/ inet6 addr: fe80:://”|sed -e “s#/64 Scope:Link##” >> /dev/shm/ra
    cat /dev/shm/ra |sed -n ‘1p’>/dev/shm/gw
    cat /dev/shm/ra |sed -n ‘2p’>/dev/shm/address
    cat /dev/shm/ra |sed -n ‘3p’>/dev/shm/mac

    gw=`cat /dev/shm/gw`
    address=`cat /dev/shm/address`
    mac=`cat /dev/shm/mac`

    gw=`echo $gw|cut -c 1-19`
    address=`echo $address|cut -c 1-19`

    gw=`echo route -A inet6 add default gw fe80::$gw dev $eth`
    address=`echo busybox ifconfig $eth add $address:$mac/64`

    eval $gw
    eval $address

    if ! echo “$address”|grep -sqE “0000:0000:”;then
    break
    fi
    busybox ifconfig $eth down
    busybox ifconfig $eth up
    fi

    if cat /dev/shm/ra |grep -sq “router advertisement, length 112”; then

    cat /dev/shm/ra |sed -n -e “/router advertisement, length 112/,/0x0080/p” >/dev/shm/ipv6
    cat /dev/shm/ipv6|sed -e ‘1,2d’|sed -e ‘2,7d’|sed -n ‘1,2p’|sed -e “s/\t0x0010: //”|sed -e “s/\t0x0080: //”|sed -e “s/ /:/g”>/dev/shm/ra
    busybox ifconfig $eth >/dev/shm/eth
    cat /dev/shm/eth |grep Scope:Link|sed -e “s/ inet6 addr: fe80:://”|sed -e “s#/64 Scope:Link##” >> /dev/shm/ra
    cat /dev/shm/ra |sed -n ‘1p’>/dev/shm/gw
    cat /dev/shm/ra |sed -n ‘2p’>/dev/shm/address
    cat /dev/shm/ra |sed -n ‘3p’>/dev/shm/mac

    gw=`cat /dev/shm/gw`
    address=`cat /dev/shm/address`
    mac=`cat /dev/shm/mac`

    gw=`echo $gw|cut -c 1-19`
    address=`echo $address|cut -c 21-39`

    gw=`echo route -A inet6 add default gw fe80::$gw dev $eth`
    address=`echo busybox ifconfig $eth add $address:$mac/64`

    eval $gw
    eval $address

    if ! echo “$address”|grep -sqE “0000:0000:”;then
    break
    fi
    busybox ifconfig $eth down
    busybox ifconfig $eth up
    fi

    done

    rm /dev/shm/gw /dev/shm/address /dev/shm/ipv6 /dev/shm/ra /dev/shm/eth /dev/shm/mac

    返信
    1. Hiroki Chinen 投稿作成者

      情報ありがとうございます。
      何かの機会に試してみたいと思います

      返信
  2. 匿名

    個人的な所感ですが,nativeにIPv6をもってくるIPoEよりも
    NGNを跨ぐためにPPPoEを使うという日本独自のPPPoEのほうが
    IPv6の受け取り方としてはフレッツ独自では……

    返信
    1. Hiroki Chinen 投稿作成者

      そうですよね。。。
      ひかり電話の有無でアドレスの振り方を変えずに、DHCPv6でアドレス振って欲しいです。

      返信
  3. inshin

    すみません、通りすがりのOpenWrtを使ってるものです。
    純粋に思ったのが、RouterBoardにRA, HDCPv6, NDPなどのリレーモードはないんでしょうか?

    返信
    1. Hiroki Chinen 投稿作成者

      返信遅くなりました。
      リレーとして動く機能は無さそうです(見聞きした記憶が無いです)。NGN網のやり方が世界的に見ても独特なのかもしれないです。

      返信
  4. hatta

    IPv6 PPPoEは、設備投資の観点から、普及することは無いと思われます。
    確かに、日本独自の実装かもしれませんが、なんとか対応してもらいたいものです。

    返信

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です