diary.sorah.jp

フレッツ光ネクスト (ひかり電話あり) 回線において、ひかり電話と自前の設備を IPoE IPv6 的な意味で仲良くさせる

tl;dr ひかり電話ルータ (HGW) のひかり電話だけを生かしながら DHCPv6-PD を自前設備で喋りたい場合、ひかり電話ルータ部の送受信するパケットのうち IPv6 パケットだけフィルタすれば良い。具体的には IPv4, PPPoE だけブリッジすれば良い。一切保証はしないけど…。

近年ではひかり電話はルータ・ONU機能と一体となったホームゲートウェイあるいは「ひかり電話ルータ」 (以下 HGW) から提供される。こちらとしては得体のしれない HGW は使用せず、直接フレッツ NGN 網と通信したい需要しかないので、どうにかする必要がある。

実際、HGW 内部で、ONU とルータ部自体は分離されており、ルータ部と ONU 部の接続を利用者側で奪う事ができる (小型 ONU 不採用 HGW の場合 UNI ポート)。なので、 ONU の接続されているフレッツ NGN に自前の設備を直接ぶら下げる運用は可能とされている。

が、この場合、ひかり電話を生かしたい時に若干面倒になる。HGW ルータ部は通常のルータ同様の挙動を取るため、L2 レベルで ONU の下、自前機器の真横に HGW ルータ部を接続した時に IPv6 について問題が発生する。

これはフレッツ光ネクストにおいて提供されている所謂 IPoE 方式の IPv6 接続性について、ひかり電話契約の有無によって挙動が異なるため。

ひかり電話契約が無い場合は NGN から Router Advertisement (prefix /64) が送出されて SLAAC で IPv6 アドレスを確定、フレッツ側ルータと端末毎に直接通信する形となる。日本の各種家庭用ルータに「IPv6 パススルー」機能がついているのはこのため。このオプションを使用すると L2 レベルで v6 パケットのみ上流 (WAN ポート) とブリッジ (あるいは NDP proxy?) され、無事 NGN 側のルータと直接通信する事ができるようになる。

一方、ひかり電話契約が有る場合、NGN からは Router Advertisement が降ってくるものの m-flag がついていて、DHCPv6-PD の利用が必要になる。現時点で /56 の prefix 委譲がなされ、DHCPv6-PD クライアントはルータとみなされ、委譲された prefix への経路はそのルータに向くようになる。そのため、自前の設備を利用したい場合、だいたいの場合はひかり電話契約を付けて /56 の prefix 委譲を受けたほうが圧倒的に便利。電話として使わなくてもひかり電話には絶対加入しましょう。

しかし今回の回線は諸処の事情により "ひかり電話" も電話としてちゃんと運用する必要があったので、ひかり電話を生かしながら DHCPv6-PD を自前の機器で受ける必要が出てきた。

前述のように HGW ルータ部は通常のルータと同様の挙動を取る。つまり、DHCPv6-PD クライアントとして機能してしまう -- ONU から L2 レベルで直下にいるルータが DHCPv6-PD を喋って prefix 委譲を受けても、HGW ルータ部の気分次第で HGW ルータ部に prefix 委譲が移動して、取り合いが発生してしまう。DHCPv6-PD クライアント機能は無効化できそうになくて不便。

というわけで、IPoE 方式で DHCPv6-PD を自前機器から喋りながら、ひかり電話を利用するための方法を探した。

前提

  • フレッツ光ネクスト ファミリー・ギガラインタイプ (栃木県宇都宮市)
    • 2017/01 オーダ、02/15 開通
  • ひかり電話ルータ PR-400MI
    • 小型ONU。
    • 直近の契約だと黙っていると小型 ONU 採用タイプが来るので、明示的に小型ONU不使用タイプの払出しを希望した

(小型 ONU 採用タイプでは NGN と直接通信するためには SFP 対応スイッチ・ルータが必要になる。さらに auto negotiation 対応が必須の模様で、安い SFP 対応スイッチは対応してない事もあるみたいなので消耗の対象です。)

調査

雑に HGW ルータ部のパケットを覗いて確認すると、

  • ひかり電話自体の通信は IPv4 のみ
  • NGN にいる設備と DHCPv4 で通信している
  • IPv4 で SIP の通信が発生している
  • PPPoE は確認できなかったけど発生する事もある模様? [要出典]

という状態だった。

実装

IPv6 パケットだけフィルタしてみる。NGN と DHCPv4 通信が必要っぽいので一旦 NGN 直下に収容。DHCP relay でもうまく動くのかもと今は思うけど、試してない。

  • HGW の ONU 部 UNI ポートと、ルータ側 UTP ケーブルを取り外す。UNI ポートには自前のスイッチを接続し、ルータ側の UTP ケーブルは RJ-45 中継アダプタを通して別のスイッチあるいは VLAN へ接続する。
  • ONU 部とルータ部を L2 ブリッジして IPv6 のパケットだけフィルタする。
    • 当初は ebtables でも使うかと思っていたけど、通信速度いらないし IX2015 で十分だと気付いたので、HGW 収容・NGN 収容の 2 VLAN を用意して IX2015 でブリッジ設定をした。
bridge irb enable
no bridge 1 bridge ipv6

! Fa0/0 untagged (NGN)
interface FastEthernet0/0.0
  no ip address
  bridge-group 1
  no shutdown
! Fa0/1 tagged dot1q id=3 (HGW)
interface FastEthernet0/1.3
  encapsulation dot1q 3 tpid 8100
  auto-connect
  no ip address
  bridge-group 1
  no shutdown

結果

ひかり電話は上手く動いた。ファームウェア自動取得とかは死んでるのでそこは諦める方向で。

ついでに HGW ルータ側についている LAN スイッチから自前設備への接続を増やしておくとリモートからメンテできたり SIP 接続できて便利だよ。

再起動時、DHCPv6-PD をある程度の時間待つらしく、起動までの時間がやたらかかる様になってしまったのと、起動後も DHCPv6-PD をすごい頑張っていて可哀想な HGW ルータ部を眺める事ができます。

繰り返すけど一切保証しません。ある日とつぜん動かなくなったら困るなあ、とおもいながら設定しました。

その他

Backfilled at , Published at