2021年5月13日の自動バージョンアップで「ひかり電話 HGW PR-600MIのfirmware更新とIPv6パケットフィルターの不具合」が発生した。バージョンを戻す(01.00.0007->01.00.0005)事を考え、NTTの「0120-970-413」へ電話した(「0120-000-113」では、機器交換しか対応出来ないとの事だった)。結果、「0120-000-113」へ回される。そして、「バージョンを戻すfirm提供が出来ない」「技術者派遣で機器確認しか対応出来ない」との事。コロナ下で入室させ対面対応はお断りし、「様子見」で状態確認を進めていた。「ひかり電話 HGW PR-600MIのIPv6パケットフィルターがネットボランチDDNS登録をTCP廃棄」で「2409:10:XXXX:YY00::/64」からの通信不具合が発生したり、「ひかり電話 HGW PR-600MIのIPv6パケットフィルタを無効にしてもTCP廃棄発生」で、万策つき、再度問い合わせを行った。サポートの方曰く、チェックツールで確認すると「グローバルprefixが二つ登録されている(?)」との事。複数の機器からDHCPv6-PDを行なっているので履歴がそのようになっているのかもしれない。時間切れで翌日対応。PR-600MIのIPv6パケットフィルタ「無効」対応のFirewallゲートウェイを介さず確認したいとの事だったので、深夜にVLAN設定を変更し、Firewallゲートウェイを外した。PR-600MIのDHCPクライアント取得情報が「保存済み自動設定情報にて起動」で取得出来ない。この状態になるとリースタイムが切れるまで取得出来ない。2時間30分から3時間程掛かるので翌朝の確認とした。翌朝、NTTサポートから連絡があり、「グローバルPrefixの登録が一つになっている」と連絡、「2409:10:XXXX:YY00::/64」からの通信が正常になっている事を確認した。
「ひかり電話 HGW PR-600MIのSPI設定とIPv6パケットフィルタ設定(IPoE)で不具合」を解決させるのが目的だが、「ひかり電話 HGW PR-600MIのIPv6パケットフィルタを無効にしてもTCP廃棄発生」なのでどうにもならない。NTTサポートから「IPv6ファイアウォール機能の無効化」が出来ない件、「IPv6パケットフィルタ設定(IPoE)が有効にならない」件について、製品担当部門へ要望を上げてくれるとの事で終了した。
(1)「2409:10:XXXX:YY00::/64」からの通信不具合時構成
「ひかり電話HGW PR-S300SEのIPv6スループットを確認する」「ひかり電話 HGW PR-600MIのIPv6スループットを確認する」「ひかり電話 HGW PR-600MI のオフライン設定」と同様の構成で「ひかり電話 HGW PR-600MIのIPv6パケットフィルタを無効にしてもTCP廃棄発生」と同じ「ip6tablesによるFirewall」を構成している。
PR-600MIのLAN4から「2409:10:XXXX:YY00::/64」ネットワークに接続され、NVR510。NVR500、OpenWrtなどのルータが接続されている。ホームネットワーク機器は、NVR510配下の「2409:10:XXXX:YY10::/64」ネットワークに接続されている。NVR510のネットボランチDDNS登録は、WAN側アドレス「2409:10:XXXX:YY00:ae44:f2ff:feaa:bbcc/64」をソースアドレスとして登録する。「2409:10:XXXX:YY00::/64」ネットワークでは、PR-600MIからのRAとDHCPv6-PDでホストやルータのアドレスが決定される。「2409:10:XXXX:YY00::/64」からのIPv6パケットは、PR-600MIのLAN4ポートを経由し、ルーティングされ、WANポートからDebian10のbr0ポートへ送られる。Debian10でルーティングされbr0ポートからLinkLocalアドレス経由でUNIポートを介し、NTT-GWへ送られる。応答パケットも逆順でこの経路を通過する設計。
(2)不具合原因
Debian10のenp3s0ポートが「2409:10:XXXX:YY00::/64」ネットワークに接続されているため、このポートから応答パケットが「2409:10:XXXX:YY00::/64」の機器にルーティングされるためだった。ネットワークに接続されると「暗黙」で経路が経路テーブルに設定され、IPv6 neighbor cashに接続機器のMACアドレスが記録される。
tcp接続では、「syn」パケットがPR-600MI -> Debian10 -> NTT-GW経由で宛先ホストに到達、「syn/ack」パケットがNTT-GW -> Debian10 -> 送出ホストへ戻り、「ack」パケットがPR-600MIへ送られる。PR-600MIのSPIが「syn/ack」を確認していないため、「ack」パケットを「TCP 廃棄[パケットフィルタ]」した。
ping(icmpv6)は、応答パケットが、送出ホストに戻るため、疎通が確認されていた。
(3)不具合対策
ポリシールーティング(PBR)で解決を計ったが、うまくいかない。neighbor cashも分離できそうなVRF(Virtual Router and Forwarder)で確認してみた
通過するパケットは上手くルーティングされるが、enp3s0で受けたパケット応答がenp3s0経由で送出されない。「ip -6 route show table 2」と「ip -6 route show vrf Tvrf」で結果が異なる(local routeが異なる)のでバグかもしれない。。。
Namespaceを試してみる
これは、上手く動作する。
(4)その他
firmwareのバージョンアップを契機に最初に発生した「ひかり電話 HGW PR-600MIのfirmware更新とIPv6パケットフィルターの不具合」に関して、再現しなくなってしまった。引き続き、状況を見守る事とした。firmwareの自動更新は、停止した。
・IPv6パケットフィルタ設定(IPoE)
・IPv6ファイアウォール機能の「無効」化
が改善されるか注視する。
「ひかり電話 HGW PR-600MIのSPI設定とIPv6パケットフィルタ設定(IPoE)で不具合」を解決させるのが目的だが、「ひかり電話 HGW PR-600MIのIPv6パケットフィルタを無効にしてもTCP廃棄発生」なのでどうにもならない。NTTサポートから「IPv6ファイアウォール機能の無効化」が出来ない件、「IPv6パケットフィルタ設定(IPoE)が有効にならない」件について、製品担当部門へ要望を上げてくれるとの事で終了した。
(1)「2409:10:XXXX:YY00::/64」からの通信不具合時構成
「ひかり電話HGW PR-S300SEのIPv6スループットを確認する」「ひかり電話 HGW PR-600MIのIPv6スループットを確認する」「ひかり電話 HGW PR-600MI のオフライン設定」と同様の構成で「ひかり電話 HGW PR-600MIのIPv6パケットフィルタを無効にしてもTCP廃棄発生」と同じ「ip6tablesによるFirewall」を構成している。
PR-600MIのLAN4から「2409:10:XXXX:YY00::/64」ネットワークに接続され、NVR510。NVR500、OpenWrtなどのルータが接続されている。ホームネットワーク機器は、NVR510配下の「2409:10:XXXX:YY10::/64」ネットワークに接続されている。NVR510のネットボランチDDNS登録は、WAN側アドレス「2409:10:XXXX:YY00:ae44:f2ff:feaa:bbcc/64」をソースアドレスとして登録する。「2409:10:XXXX:YY00::/64」ネットワークでは、PR-600MIからのRAとDHCPv6-PDでホストやルータのアドレスが決定される。「2409:10:XXXX:YY00::/64」からのIPv6パケットは、PR-600MIのLAN4ポートを経由し、ルーティングされ、WANポートからDebian10のbr0ポートへ送られる。Debian10でルーティングされbr0ポートからLinkLocalアドレス経由でUNIポートを介し、NTT-GWへ送られる。応答パケットも逆順でこの経路を通過する設計。
(2)不具合原因
Debian10のenp3s0ポートが「2409:10:XXXX:YY00::/64」ネットワークに接続されているため、このポートから応答パケットが「2409:10:XXXX:YY00::/64」の機器にルーティングされるためだった。ネットワークに接続されると「暗黙」で経路が経路テーブルに設定され、IPv6 neighbor cashに接続機器のMACアドレスが記録される。
tcp接続では、「syn」パケットがPR-600MI -> Debian10 -> NTT-GW経由で宛先ホストに到達、「syn/ack」パケットがNTT-GW -> Debian10 -> 送出ホストへ戻り、「ack」パケットがPR-600MIへ送られる。PR-600MIのSPIが「syn/ack」を確認していないため、「ack」パケットを「TCP 廃棄[パケットフィルタ]」した。
ping(icmpv6)は、応答パケットが、送出ホストに戻るため、疎通が確認されていた。
(3)不具合対策
ポリシールーティング(PBR)で解決を計ったが、うまくいかない。
PBR
/etc/iproute2/rt_tables
100 PR600
-----------------------
ip -6 rule add iif br0 table PR600
ip -6 rule add from 2409:10:XXXX:YY02::/64 table PR600
ip -6 route add default via fe80::212:e2ff:feab:cdef dev br0 table PR600
ip -6 route add 2409:10:XXXX:YY00::/56 via fe80::2ae9:8eff:fe12:3457 dev br0 table PR600
VRF
ip link add Tvrf type vrf table 2
ip link set dev enp3s0 up
ip link set dev enp3s0 master Tvrf
ip -6 route add default via fe80::2ae9:8eff:fe12:3456 dev enp3s0 table 2
Namespaceを試してみる
namespace
ip netns add net0
ip link set dev enp3s0 netns net0
ip netns exec net0 ip link set enp3s0 up
ip netns exec net0 ip -6 a add fe80::c225:e9ff:fe67:89ab/64 dev enp3s0
ip netns exec net0 ip -6 a add 2409:10:XXXX:YY00::1:110/64 dev enp3s0
ip netns exec net0 ip -6 route add default via fe80::2ae9:8eff:fe12:3456 dev enp3s0
(4)その他
firmwareのバージョンアップを契機に最初に発生した「ひかり電話 HGW PR-600MIのfirmware更新とIPv6パケットフィルターの不具合」に関して、再現しなくなってしまった。引き続き、状況を見守る事とした。firmwareの自動更新は、停止した。
・IPv6パケットフィルタ設定(IPoE)
・IPv6ファイアウォール機能の「無効」化
が改善されるか注視する。