ひかりTV IPv6問題 再発
ひかりTVのIPv6問題とは言っても、最も影響の大きい無線機器は別経路になっているので、特に性能問題が起きると言う訳ではない。ひかりTVのマルチキャスト放送波はMLDスヌーピングの機能があれば専用チューナー(ST-3200)のみに送られる事になる。うちの場合は、根元のブロードバンドルータと中継するスイッチ(EHB-SG2A08)がMLDスヌーピングに対応しており、マルチキャストが他のノードに溢れる事はない。が、今までもEHB-SG2A08のIPアドレスを変更したりすると、何故か放送波が届かなくなったりと不穏な兆候はあった。設定し直すと回復するので、だましだまし使っていたのだが、マルチセッション障害の対応でブロードバンドルータがPR-400NEに変更となってから、ひかりTVの放送波がまったくチューナーに届かなくなってしまった。
切り分けのために、EHB-SG2A08スイッチのアップリンクを直接ST-3200チューナーに繋いでみる。これで2FにあるPR-400NEルータとST-3200を直結している格好になり、放送波は受けられるようになった。やはり中継するEHB-SG2A08が何か悪さをしている可能性が高い。次にEHB-SG2A08で中継した上でMLDスヌーピングの設定を消してみると、これでも放送波を受ける事が出来た。どうやらEHB-SG2A08のMLDスヌーピングが悪さをしているようだ。久々に公式サイトでマニュアルを見てみてるとMLDスヌーピングの説明欄に『※EHB-SG2A08、EHB-SG2A08-PLにはこの機能はありません』との注意書き。。。こんな仕様以前からあったかな。明らかにMLDスヌーピングらしき動作はしていたにもかかわらず、それが存在しないという説明に変わってしまったので公式サポートは期待出来なくなってしまった。
以前と比べて、宅内のlinuxノードが増えたので、この際詳しく動作を調べてみる。利用したのは先日購入したZBOX AD11の2台で、これをEHB-SG2A08配下と上流側に設置。これだけ気軽に配置換えが出来るlinuxノードが存在すると、ネットワーク調査が捗る。PR-400NE、EHB-SG2A08、AD11間でIPv6の通信状態を確認する。ルータがIPv6のpingに対応したのも改めてありがたい。しかし、linuxノードたちはIPV6 pingによるNeighbor Solicitation(NS)が流れても反応しない事がある。問題のノードでtcpdumpをしているとNeighbor Advertisement(NA)を返してくれる。つまりpromiscuous modeだとNSに反応するが、そうでないと反応しない。ぐぐってみると『multicast_snooping』という設定値がある事に気付く。この設定を無効にしてやれば、NSに反応するようになった。これで準備OK。
echo 0 > /sys/devices/virtual/net/br0/bridge/multicast_snooping
まずはMLDスヌーピングを停止した状態から。ST-3200チューナーを再起動すると、ST-3200からrouter solicitation(RS)がマルチキャストされ、PR-400NEがrouter advertisement(RA)を返してネットワークが確立。ST-3200はIPv6アドレスをもらえて放送波を受けられる。これらのDHCPv6通信は上流でも下流でも確認する事が出来た。続いてMLDスヌーピングを有効にしてST-3200を再起動してみる。今度はRAどころかRSすら周りのノードにはまったく聞こえない。どうやらEHB-SG2A08のMLDスヌーピングがRSを潰してしまっているようだ。RSのマルチキャストが通らなければ、当然ST-3200はIPv6アドレスをもらう事ができず、ひかりTV放送波を受ける事が出来ない。
EHB-SG2A08の設定を変えた訳ではないので、この問題は以前から存在していたはず。以前のルータ(PR-S300SE)では何故うまくいっていたのか。自分のメモを見返すと、ST-3200が明示的にIPv6アドレスをもらえてから、MLDスヌーピングの設定を入れる順序になっている。逆に言えば、IPv6アドレスをもらう前にMLDスヌーピングを設定すると動作しなかったのだろう。一度アドレスをもらえれば、その後はチューナーを何度再起動しても問題なく放送波を受けられるし、MLDスヌーピングも正しく動作する。しかし、今度のルータはその再起動が許されない。既に以前のルータがなくなってしまったので、具体的な違いを確認する事は出来なかった。
EHB-SG2A08の問題は、MLDスヌーピング有効時にRAやRSを流すマルチキャストアドレス(ff02::1,ff02::2)までブロックしてしまうこと。MLDスヌーピングそのものは動作しているように見える。RAとRSを何とか通せば通信を確立できそうだが、マルチセッション障害でも薄氷の上に成り立つネットワーク体系で痛い目に遭ったので、大人しく諦めることに。マニュアルにもサポートしないと明記されてしまったし。MLDスヌーピングできないと死ぬって訳でもないんだけど、ここまできたら何とかしたい。改めてMLDスヌーピングをサポートしてそうなスイッチを探してみる。具体的な実績を示すような記述は見つからないが、値段も手頃なBuffaloの『BS-GS2008』を試してみる。ダメだったらヤフオクで売ればいいし、というのが最近の考え方。積極的に人柱w
|
バッファロー BS-GS2008 Gigaスイッチ 8ポート ネットワークハブ |
スイッチとしての通常動作を確認後、公式からビジネススイッチ設定ツールというのをダウンロード。windows8.1用しか置いてなかったが、windows10でも動作した。このツールでIPを設定し、そのIPに対してブラウザからアクセス。詳細設定>MLD>設定でMLDスヌーピングを有効化。ひかりTVのマルチキャスト放送波を受けてみると、しばらくしたら対象ノードのみに絞られた。MLDスヌーピングはOK。今度は以前のスイッチで問題だったST-3200再起動を試してみる。これも問題なし。うおおお、正しく動作するスイッチって素晴らしい!まあ、最初から動いたらIPv6とかまるで勉強しなかったから複雑な気持ちだけどw