自宅のフレッツ光ネクストにひかり電話を追加して、固定電話番号とより広い IPv6 アドレス空間を使えるようにしたはなし。
フレッツ光ネクストは通常、ルータ広告 RA で /64 の IPv6 プレフィックスをユーザのルータに配布する。
ところが /64 のプレフィックスは IPv6 アドレスの仕様上 分割ができないため、割り当てられるサブネットは1つに限られ、複数のサブネットに IPoE による IPv6 (以下 IPv6oE) 接続を提供することはできない。
いっぽう、ひかり電話に加入した回線では DHCPv6 Prefix Delegation で /56 のプレフィックスをユーザのルータに配布する。
これを /60, /64 などに分割して各セグメントに配布すれば、IPv6oE 接続性のある複数のサブネットの構築が可能になる。
ハ○フで「601形自動式卓上電話機」いわゆる黒電話を入手したので設置したかった。
うちは VDSL だからここに VoIP を流せば VoIPoEoV みたいなことになっておもしろいのでは。
→ひかり電話引こう
図は VLAN を含めた論理構成。なので L2SW は物理的には1台だけ。
RTX1100 をアクセスルータとして、インターネットへは IPv6oE、DS-Lite による IPv4、PPPoE による IPv4 の3経路を利用している。
IPv4 の経路は RTX1100 にて DS-Lite の経路上の最寄りのゲートウェイに死活監視を行い、fail を観測するとデフォルトゲートウェイを PPPoE に切り替えるバックアップを設定している。
また RTX1100 をサーバにして、インターネットから L2TP/IPsec で LAN 内に最大5台の端末が同時に入れるリモートアクセス VPN と、某所に契約している VPS との間の拠点間 VPN がある。これらの VPN は IPv6oE (v6) または PPPoE (v4) でホストしている。なお、カオス化するので VPN 関係は図に載せていない。
LAN 側の L2 セグメントはメインで使用する lan1 と、PPPoE 専用の vlan2 がある。
RTX に配布されている IPv6 プレフィックスは /64 であり、分割しての配布ができないため、vlan2 には IPv6 接続性が提供されていない。
IPv4 は RTX1100 をデフォルトゲートウェイとし、通常時は RTX1100 から DS-Lite でインターネットに出ていき、DS-Lite ダウン時は PPPoE via NVR500 に迂回するようにした。
IPv6 は NVR500 をデフォルトゲートウェイとして IPv6oE でインターネットに出ていくようにした。
概説はこんな感じで、以下は 申し込み ~ 構成が決まるまで の雑多になる。
これらの変更を要した理由も以下に。
自宅のフレッツは光コラボの IIJmio ひかり なので、すべての問い合わせはまず IIJ に投げる必要がある。というわけで IIJ の問い合わせ窓口に電話をかけ、IVR にしたがってそれっぽい窓口につないでもらう。
オペレータにつながったら、mio ひかりを利用しているのでこれにひかり電話を追加したいと伝える。ユーザ情報など必要事項を聞かれるので告げたあと、ひかり電話対応機器は自前で用意する意思を伝えておく。今回は NVR500 を SIP クライアントにつかうので HGW がいらないからだ。ここでなにも伝えないと NTT から HGW が支給され、月額料金にこれのレンタル代が加算されてしまう。高機能だし壊れないから借りてもいいけど。
そうすると、いったん IIJ があずかり、同社の ひかりプロビジョニングセンター に取り次がれて後日調整の電話をくれるので、これを待つ。この日程はこちらから指定ができる。そうしてかかってきた調整の連絡で、設置場所、電話番号の選択*1、有料オプションの加入確認、電話帳や 104 への掲載希望などを聞かれ、最後に工事日 (開通日) を告げられる。今回は無派遣工事*2にしてもらった。
開通日の朝になると、上流からの IPv6 プレフィックス配布方法がルータ広告から DHCPv6-PD に強制的に切り替わる。つながっていた RTX1100 はプレフィックスを受け取れなくなっていた。NTT からレンタルされる HGW ならここは自動で追従するんだろうか。
RTX1100 で設定変更し、ルータ広告で v6 プレフィックスを受け取る設定を DHCPv6-PD で取得する設定に置き換えれば、ふたたび v6 インターネットに出ていけるようになった。
- ipv6 lan2 dhcp service client ir=on + ipv6 lan2 dhcp service client - ipv6 prefix 1 ra-prefix@lan2::/64 + ipv6 prefix 1 dhcp-prefix@lan2::/64 + ipv6 lan2 address dhcp + ipv6 route default gateway dhcp lan2
ここからは行き当たりばったり機材の条件などを考慮しながら要件を満たす最終的な構成を決めていく。
試行錯誤していくうちに把握できた、使用する機器たち (RTX1100, NVR500) が「できないこと」がこれだけでてきた。これらの制約を回避する構成にしないといけない。
ちなみに VRF に相当する機能もこれらの機種にはない。
最終的に以下のようになった。
I. の制約のため SIP クライアントである NVR500 を NGN に直結する必要がある。ので、NVR500 を最上流につなぐ。
V. NVR500 は経路バックアップ機能がないため、LAN 側からスター型に RTX1100 を置き IPv4 のデフォルトゲートウェイに指定して、RTX でバックアップ時の経路切替を行うようにした。
DS-Lite の IPIP トンネルは RTX1100 で終端、III. PPPoE パススルーはできないため PPP トンネルは NVR500 で終端し、通常時は IPv4 では 端末 → RTX → DS-Lite という経路で、バックアップ時は 端末 → RTX → NVR → PPPoE という経路で IPv4 パケットが出ていくようにする。もどりのパケットは場合によって PPPoE → NVR → 端末 という非対称経路になるけれど、非対称区間にはパケットフィルタなどステートフル機器は適用しないので問題ない。
IV. VPN は NVR500 ではトンネル数が不足するため、変更前に引き続き RTX1100 に収容するようにした。
II. の DHCPv6-PD での再委譲ができないことで困るのは、下図左のように既存のサブネット配下のてきとうなハブにてきとうなルータをつないで新しいサブネットを生やしたいとき。
そこで NVR で LAN 側で必要となる L2 セグメント数ぶんのタグ vlan をあらかじめ切っておき、/64 に分割した IPv6 プレフィックスを用意して、ルータ広告でそれぞれの vlan に配布することにした。blahblahnet で IPv6 接続性が必要になった場合は rt-blah で vlan3 のルータ広告をプロキシする、あるいは vlan3 と blahblahnet をブリッジさせれば、既存 LAN とは別のネットワークアドレスで IPv6 接続性を提供できる。
NVR510 が1台あれば済むことこんな手間かける意味ない。
IPv6 で LAN 側構成をしっかりやりたいなら、DHCPv6-PD クライアント+サーバ を備えたルータはほしいかも。
NAT 配下の IPv4 ではプライベートアドレスの体系を自由に計画できるから、既存の NW にてきとうなルータをつないで、決め打ちでアドレスプールを割り当てて、てきとうなルーティングを設定すれば、かんたんにサブネットを生やせた。上流の気分しだいでプレフィックスが変わる、固定でないグローバルアドレスではこうはいかず、上流でプレフィックスが変更されたときには下流にきちんと変更を伝播させる必要があり、それができる機材が必要になる。
これの発端は「上流から配られるプレフィックス長のおかげで LAN の構成が縛られてしんどい」だったけれど、こういう問題をまとめていい感じに解決できる技術がもっと身近になればいいよね。
NAT66 必要かって聞かれたら、ぼくはいまは首を縦に振りたい。
フレッツ光クロスでは、ひかり電話の契約状態にかかわらず DHCPv6-PD で /56 の IPv6 プレフィックスが付与されるようになった*6。やったね。
ISP によっては PPPoE 方式の IPv6 接続で /56 などの分割可能なプレフィックスを配っているところがあるので、POI が混雑してないなら IPv6oE をやめてこっちで v6 LAN を構築してもいいと思う。
ipv6 prefix 10 dhcp-prefix@lan2::a:0:0:0:1/64 ipv6 prefix 11 dhcp-prefix@lan2::b:0:0:0:1/64 ipv6 prefix 12 dhcp-prefix@lan2::c:0:0:0:1/64 vlan lan1/2 802.1q vid=2 name=vlan2 ipv6 lan1/2 address dhcp-prefix@lan2::a:0:0:beef:2/64 ipv6 lan1/2 rtadv send 10 o_flag=on ipv6 lan1/2 dhcp service server vlan lan1/3 802.1q vid=3 : vlan lan1/4 802.1q vid=4 :
タグ VLAN を切り、IPv6 プレフィックスを割り当てる。
この例では2セグメント余分に用意してる。
`ipv6 prefix 10 dhcp-prefix@lan2::a:0:0:0:0/64` と書いてはならず `ipv6 prefix 10 dhcp-prefix@lan2::a:0:0:0:1/64` と設定する必要がある*7。
ip filter 200100 pass * 192.168.0.1 esp * * ip filter 200101 pass * 192.168.0.1 udp * 500 ip filter 200102 pass * 192.168.0.1 udp * 4500 nat descriptor masquerade static 1 1 192.168.0.1 esp nat descriptor masquerade static 1 2 192.168.0.1 udp 500 nat descriptor masquerade static 1 3 192.168.0.1 udp 4500
PPPoE から LAN 側にある RTX1100 (192.168.0.1) の VPN サーバに IPv4 IPsec/IKE パケットを通すための F/W と NAT 設定。
ipv6 filter 1020 pass * dhcp-prefix@lan2::beef:1 esp * * ipv6 filter 1021 pass * dhcp-prefix@lan2::beef:1 udp * 500
IPv6oE から LAN 側にある RTX1100 (::beef:1) の VPN サーバに IPv6 IPsec/IKE パケットを通すための F/W 設定。
ipv6 filter 1022 pass * dhcp-prefix@lan2::beef:1 4 * *
IPv6oE から LAN 側にある RTX1100 (::beef:1) に DS-Lite の IPv4 over IPv6 パケットを通すための F/W 設定。
ip route default gateway 192.168.0.2 filter 1000 1001 1002 1010 1011 gateway tunnel 30 keepalive 30 hide gateway tunnel 29 weight 0 keepalive 29 hide gateway 192.168.0.2 weight 0 ip filter 1000 pass * * esp * * ip filter 1001 pass * * udp 500 * ip filter 1002 pass * * udp 4500 * ip filter 1010 pass 192.168.100.0/24 * * * * ip filter 1011 pass 192.168.1.0/24 * * * *
IPv4 デフォルトゲートウェイ設定。長いので手で改行してある。
2行目は RTX1100 の IPsec サーバ、リモートアクセス VPN (192.168.100.0/24)、vlan2 (192.168.1.0/24) からのパケットを (NVR500 の) PPPoE に固定で流す設定。
IPv4 IPsec パケットは PPP で外から入ってくるので、外に返すときも経路バックアップ状態にかかわらず PPPoE に流さないといけない。
リモートアクセス VPN からインターネットに出ていく経路は PPPoE にしないと、DS-Lite だとうまく出ていかないときがある。なんで。
3-5行目は経路バックアップをいれたデフォルトゲートウェイ設定。
6行目以降はフィルタ型ルーティングの定義。
ipv6 lan1 address ra-prefix@lan1::beef:1/64 ipv6 lan1 dhcp service client ir=on
NVR500 が送出したルータ広告をもとに IPv6 アドレスを割り当てる設定。
RTX1100 は IPv6 のルーティングはしないけれど、DS-Lite の IPIP トンネルを張るための端点となる v6 アドレスをもっておく必要がある。