#author("2024-03-06T23:48:52+00:00;2024-03-06T13:46:56+00:00","default:mogamin","mogamin")
#author("2024-03-06T23:49:52+00:00;2024-03-06T13:46:56+00:00","default:mogamin","mogamin")
* フレッツにひかり電話を追加して複数のサブネットに IPv6oE を提供する [#h0c34321]

自宅のフレッツ光ネクストにひかり電話を追加して、固定電話番号とより広い IPv6 アドレス空間を使えるようにしたはなし。

** もくじ [#b373e6cb]

#contents


** なんでひかり電話 [#g82430cc]

#ref(./tel.jpg,right,around,15%);
#ref(./tel.jpg,right,around,12%);

フレッツ光ネクストは通常、ルータ広告 RA で /64 の IPv6 プレフィックスをユーザのルータに配布する。
ところが /64 のプレフィックスは IPv6 アドレスの仕様上 分割ができないため、割り当てられるサブネットは1つに限られ、複数のサブネットに IPoE による IPv6 (以下 IPv6oE) 接続を提供することはできない。

- [[Poem/IPv6 GUA で /64 より細かいプレフィックスは設定しないほうがいいかも]]

いっぽう、ひかり電話に加入した回線では DHCPv6 Prefix Delegation で /56 のプレフィックスをユーザのルータに配布する。
これを /60, /64 などに分割して各セグメントに配布すれば、IPv6oE 接続性のある複数のサブネットの構築が可能になる。

ハ○フで「601形自動式卓上電話機」いわゆる黒電話を入手したので設置したかった。

うちは VDSL だからここに VoIP を流せば VoIPoEoV みたいなことになっておもしろいのでは。

#clear

→ひかり電話引こう

** NW 構成 <変更前> [#i595b726]

図は VLAN を含めた論理構成。なので L2SW は物理的には1台だけ。

#ref(./0.png,wrap,50%);

RTX1100 をアクセスルータとして、インターネットへは IPv6oE、DS-Lite による IPv4、PPPoE による IPv4 の3経路を利用している。

: IPv6oE (v6) |
NGN 上を IPv6 で流れて IPv6 インターネットに出ていく経路。

: DS-Lite (v4) |
RTX1100 を起点に transix の端点まで IPv4 over IPv6 トンネルを掘ってインターネットに出ていく IPv4 の主の経路。

: PPPoE (v4) |
RTX1100 を起点に IIJ の網終端装置まで PPP トンネルを掘ってインターネットに出ていく IPv4 の副の経路。

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 接続性が提供されていない。

** やりたいこと [#ja6e1eb8]

- vlan2 に IPv6oE 接続性を提供する
- 単体電話機から発着信ができるようにする

** NW 構成 <変更後> [#g6ee68ed]

#ref(./1.png,wrap,50%);

- フレッツと直接つながるルータを RTX1100 から NVR500 に置き換えた
- RTX1100 は残し、ルータ2台構成にした
- ひかり電話を契約したので IIJ から /56 のプレフィックスをもらえるようになった
- NVR500 で /56 のプレフィックスを /64 に分割し、lan1, vlan2 にルータ広告するようにした
- PPPoE の端点を RTX1100 から NVR500 に移した
- NVR500 につないだ単体電話機で発着信できるようにした

IPv4 は RTX1100 をデフォルトゲートウェイとし、通常時は RTX1100 から DS-Lite でインターネットに出ていき、DS-Lite ダウン時は PPPoE via NVR500 に迂回するようにした。
IPv6 は NVR500 をデフォルトゲートウェイとして IPv6oE でインターネットに出ていくようにした。

~
概説はこんな感じで、以下は 申し込み ~ 構成が決まるまで の雑多になる。
これらの変更を要した理由も以下に。

** 申し込みから開通まで [#z2b75d3d]

自宅のフレッツは光コラボの IIJmio ひかり なので、すべての問い合わせはまず IIJ に投げる必要がある。というわけで IIJ の問い合わせ窓口に電話をかけ、IVR にしたがってそれっぽい窓口につないでもらう。

オペレータにつながったら、mio ひかりを利用しているのでこれにひかり電話を追加したいと伝える。ユーザ情報など必要事項を聞かれるので告げたあと、ひかり電話対応機器は自前で用意する意思を伝えておく。今回は NVR500 を SIP クライアントにつかうので HGW がいらないからだ。ここでなにも伝えないと NTT から HGW が支給され、月額料金にこれのレンタル代が加算されてしまう。高機能だし壊れないから借りてもいいけど。

そうすると、いったん IIJ があずかり、同社の ひかりプロビジョニングセンター に取り次がれて後日調整の電話をくれるので、これを待つ。この日程はこちらから指定ができる。そうしてかかってきた調整の連絡で、設置場所、電話番号の選択((新規払い出しの場合。いくつかの電話番号の候補を告げられるので、希望する1つを伝える))、有料オプションの加入確認、電話帳や 104 への掲載希望などを聞かれ、最後に工事日 (開通日) を告げられる。今回は無派遣工事((作業員が設置場所に派遣されず、開通にかかる設置場所での作業をすべて加入者の手で行う必要がある工事形態。工事費が安い))にしてもらった。

*** 開通 [#hb2e87a4]

開通日の朝になると、上流からの 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

** 変更後の構成を考える [#mfe6b756]

ここからは%%行き当たりばったり%%機材の条件などを考慮しながら要件を満たす最終的な構成を決めていく。

*** 使用する機材 [#g209a7e4]

- RTX1100 ... 既設
- NVR500 ... 今回追加

*** 使用する機材の制約 [#fdaf1202]

試行錯誤していくうちに把握できた、使用する機器たち (RTX1100, NVR500) が「できないこと」がこれだけでてきた。これらの制約を回避する構成にしないといけない。

: I. &color(#3399cc){RTX1100};/&color(#cc0000){NVR500};: 上流の DHCP/DHCPv6 サーバから受け取った SIP サーバ情報を下流に通知することはできない |
ひかり電話の SIP サーバは NGN から DHCP option 120((https://datatracker.ietf.org/doc/html/rfc3361)) または DHCPv6 option 22((https://datatracker.ietf.org/doc/html/rfc3319)) で通知される((技術参考資料 https://flets-w.com/opt/hikaridenwa/download/hikari_ngn11.3.pdf pp.15))。SIP クライアント (NVR) より上流にほかのルータ (RTX) を置く場合、RTX から送出される DHCP/DHCPv6 メッセージにはすくなくとも前述 SIP サーバアドレスを含める必要があると考えられる。~
RTX の DHCP (v4) サーバ機能は任意のオプションを指定するコンフィグはあるものの、その値として別セグメントの DHCP で受け取ったオプションの内容を指定するようなことはできない。Lua スクリプト機能を使えばできそうだけれど今回は見送った。また DHCPv6 サーバ機能はドメイン名や SNTP サーバの情報は上流から下流にプロキシされたけれど、SIP サーバの情報はプロキシされなかった。~
ちなみに、NGN から降りてくる DHCP メッセージには Tel Number のような vendor-specific っぽいオプションもあった。

: II. &color(#3399cc){RTX1100};/&color(#cc0000){NVR500};: DHCPv6 でプレフィックスを委譲することはできない |
DHCPv6-PD はできないみたいだ。

: III. &color(#3399cc){RTX1100};/&color(#cc0000){NVR500};: PPPoE パススルーはできない |
RTX1210 くらいからできるようになったけれど、%%買うお金がない%%今回の機器で対応しているものはない。

: IV. &color(#cc0000){NVR500};: 終端できるトンネル数 (tunnel select '''N''') は最大で 4 |
ヤマハの資料では「VPN 対地数」と紹介されているこの数は NVR500 では RTX1100 の 30 に対してだいぶん少ない。

: V. &color(#cc0000){NVR500};: 静的経路バックアップが使えない |
RTX には `ip route '''destination''' gateway '''gateway''' keepalive '''N'''` という形式のコマンドで、keepalive N が down したときにその静的経路を殺す機能がある。これは NVR500 には備わっていない。

ちなみに VRF に相当する機能もこれらの機種にはない。

*** 構成の決定 [#ga72957e]

最終的に以下のようになった。

''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 接続性を提供できる。

|#ref(./2.png,50%);|#ref(./3.png,50%);|

** ひととおりやってみて [#j51c8a20]

%%NVR510 が1台あれば済むことこんな手間かける意味ない。%%

IPv6 で LAN 側構成をしっかりやりたいなら、DHCPv6-PD クライアント+サーバ を備えたルータはほしいかも。

NAT 配下の IPv4 ではプライベートアドレスの体系を自由に計画できるから、既存の NW にてきとうなルータをつないで、決め打ちでアドレスプールを割り当てて、てきとうなルーティングを設定すれば、かんたんにサブネットを生やせた。上流の気分しだいでプレフィックスが変わる、固定でないグローバルアドレスではこうはいかず、上流でプレフィックスが変更されたときには下流にきちんと変更を伝播させる必要があり、それができる機材が必要になる。

これの発端は「上流から配られるプレフィックス長のおかげで LAN の構成が縛られてしんどい」だったけれど、こういう問題をまとめていい感じに解決できる技術がもっと身近になればいいよね。
NAT66 必要かって聞かれたら、ぼくはいまは首を縦に振りたい。

** FYI [#gf35c250]

フレッツ光クロスでは、ひかり電話の契約状態にかかわらず DHCPv6-PD で /56 の IPv6 プレフィックスが付与されるようになった((技術参考資料 https://flets-w.com/service/next/download/tool/gijyutsu_sankou_cross_next_light.pdf pp.22))。やったね。

ISP によっては PPPoE 方式の IPv6 接続で /56 などの分割可能なプレフィックスを配っているところがあるので、POI が混雑してないなら IPv6oE をやめてこっちで v6 LAN を構築してもいいと思う。

** config 例とめも [#yaa44dd9]

*** NVR500 [#rf63c682]

&attachref(NVR500.txt);

 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:&color(#ff0000){''1''};/64` と設定する必要がある((http://www.rtpro.yamaha.co.jp/RT/manual/rt-common/ipv6/ipv6_prefix.html))。

 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 設定。

*** RTX1100 [#k758726c]

&attachref(RTX1100.txt);

 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 アドレスをもっておく必要がある。

トップ   編集 差分 履歴 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS