auひかりで DHCPv6 で prefix delegation (IA-PD)

auひかりに移行した

フレッツだと夜 21時頃から0時頃までどうにも通信が詰まる。 だましだまし使っていたが、家族からの苦情により auひかりに引っ越した。 本当は Nuro がよかったのだが、諸事情で auひかりしか選択肢がなかった。

ホームゲートウェイにもう一個ルータをぶら下げる

auひかりでは貸与されたホームゲートウェイを使わないと接続できないが、 subnet を分離したかったので FreeBSD マシンをルーターにして図のように接続した。 IPv4 に関しては、本題ではないので詳しくは書かないが、 ホームゲートウェイからは 192.168.0.0/24 を払い出し、 それぞれの subnet 内で 192.168.1.0/24 と 192.168.2.0/24 からアドレスを振っている。 ホームゲートウェイで各 subnet について静的ルーティングの設定が必要である。

f:id:cugel:20220320133117p:plain
家庭内LANの構成

ホームゲートウェイの設定

うちで借りている機種は BL900HW である。Aterm

Prefix delegation (IA-PD) を使うので、DHCPv6 を有効にする必要がある。

ホームゲートウェイの設定画面から、 詳細設定→DHCPv6サーバ設定→IPv6アドレス配布設定→配布する情報 を 「設定2 [RA: プレフィックス配布 DHCPv6: プレフィックス/IPv6アドレス配布]」 または 「設定3 [RA: プレフィックス配布しない DHCPv6: プレフィックス/IPv6アドレス配布]」 に設定する。

設定3 の方がデバッグはしやすいが、設定2 の方が一般的な設定だろうか。

こう設定すると、ひかり電話を契約していても、ホームゲートウェイからは /64 の prefix が配布される。

WIDE-DHCP6 の設定

DHCPv6 client は WIDE DHCP6 を使う。ただし、isc-dhcp client の設定に応用するのは難しくないと思う。

よく見る設定

検索してよく出てくる設定は、フレッツでひかり電話を契約していると /56 の prefix が受け取れるので、 それを分割して各 subnet に設定するもので、dhcp6c.conf はこんな感じになる。

interface em0 {
    send ia-pd 0;
    send ia-na 0;
};

id-assoc pd 0 {
    prefix-interface em1 {
        sla-id 1;
        sla-len 8;
    };
    prefix-interface em2 {
        sla-id 2;
        sla-len 8;
    };
};

id-assoc na 0 {
};

しかし、降ってくる prefix が /64 だとこれではうまくいかない。 subnet にアドレスを配るのは SLAAC になると思うが、/64 を sla-len 8 で分割すると /72 になってしまう。 SLAAC は /64 でないとうまく動かない。 (DHCPv6 で配ればいけるのかもしれないが試していない)

降ってくる prefix が /64 でも subnet にも IPv6 が配れる IA-PD の設定方法

ここで落ち着いて設定の意味を考えてみよう。 ia-pd を送るということは、id に対応した prefix を要求するということになる。 ということは、id を変えて複数 ia-pd を送れば、複数の prefix が割り当てられるのではなかろうか。 そう考えると、dhcp6c.conf は次のようになる。

interface em0 {
    send ia-pd 1;
    send ia-pd 2;
    # send ia-na 0;
};

interface em1 {
    send ia-na 1;
};

interface em2 {
    send ia-na 2;
};

id-assoc pd 1 {
    prefix ::/64 1800;
    prefix-interface em1 {
        sla-len 0;
    };
};

id-assoc pd 2 {
    prefix ::/64 1800;
    prefix-interface em2 {
        sla-len 0;
    };
};

# id-assoc na 0 {
# };

id-assoc na 1 {
};

id-assoc na 2 {
};

つまり、ID を変えて複数の ia-pd を発行し、割り当てられた prefix をそのまま各 subnet に割り振るというやり方である。

2箇所、# でコメントアウトした部分があるが、上でホームゲートウェイの DHCPv6サーバーの設定を行ったところで「設定3」を選んだ場合はコメントインして id-na 0 を有効にしないといけない。

rtadvd の設定

あとは、SLAAC でアドレスを配布するために rtadvd を動かす設定である。 まず /etc/rtadvd.conf に

default:\
        :prefixlen#64:\

/etc/rc.conf に

rtadvd_enable="YES"
rtadvd_interfaces="em1 em2"

で特に問題なく動くと思う。client が FreeBSD の場合は rtsold を動かすのをお忘れなく。

今後の課題

現在電話オプションをつけているが、電話オプションがないと /56 もらえないという話は、検索するとフレッツについてしか出てこない。auひかりはどうかというと、これが情報がないので一度電話オプションを外してもここに書いた設定が動くか確認したい。もしも電話オプションなしでも prefix delegation が動くなら、毎月500円だか600円だか節約できる。

あとまあ、この設定は動いたけど、まだいろいろ設定できていないことがあるのはなんとかしたい。