「ひかり電話 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
neighbor cashも分離できそうなVRF(Virtual Router and Forwarder)で確認してみた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
通過するパケットは上手くルーティングされるが、enp3s0で受けたパケット応答がenp3s0経由で送出されない。「ip -6 route show table 2」と「ip -6 route show vrf Tvrf」で結果が異なる(local routeが異なる)のでバグかもしれない。。。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ファイアウォール機能の「無効」化
が改善されるか注視する。