最近は学校からの課題配布や塾の一部講義もオンラインで行われる機会が増え、うちの子供もタブレットや Chromebook を利用する場面が少なくありません。
しかし、そうした端末がまっとうな目的だけに使用されるわけもなく、妙な広告に釣られて感化されたり、不健全なサイトに誘導されたりすることがどうしても出てきます。多少は大目に見ていましたが、最近は限度を超えるものも少なくないようなのでDNSフィルタリングを導入することにしました。
クライアント側に専用アプリを入れたり設定を施す方法も考えましたが、そのような仕掛けは回避されるリスクがあります。そこで、ルータに『YAMAHA NVR510』、アクセスポイントに『Meraki Go (GR10)』という“逸般の誤家庭”な機材構成だからこそできるアプローチとして、ルータ側でしっかり制御を施すことにしました。
自宅でも仕事を行う関係上、もともと子供用端末は専用SSIDに接続させる形で分離していたので、ここにタグVLANを割り当ててこの通信にのみ「AdGuard Family DNS」を通すよう設定を施すことで、既存のネットワークには何ら影響を与えることなくフィルタリングを実現しました。
アクセスポイント『Meraki Go (GR10)』の設定
これまで子供用SSIDは「NATモード」+「ゲストネットワーク機能」で動かしていましたが、これだと上流のルータで制御することが難しいので、「Bridgeモード」に変更したうえでタグVLAN IDとして「51」を設定。
これにより、子供用SSIDのトラフィックはタグ付きVLAN「51」として上流に流れるようになり、ルータ側でフィルタリングや制御を柔軟に行えるようになります。
L2スイッチ『YAMAHA SWX2110-5G』の設定
アクセスポイント上がってくるタグ付きVLAN「51」のトラフィックをルータまで正しく通すため、間に入れているL2スイッチ『YAMAHA SWX2110-5G』のポートもトランクポートとしてタグ付きVLAN「51」を通過可能に設定。
SWX2110にはコンソールポートがなく直接コマンド投入はできないので、NVR510の管理画面にある「LANマップ」からポートをトランクに設定する形になります。
アクセスポイント及びルータに接続している2つのポートの動作モードを「トランクポート」に変更、ネイティブVLAN IDは「1 (default)」、トランクVLAN IDの「51 (VLAN51)」にチェックを入れておけばOK。
普通のスイッチングハブならVLANタグはそのまま透過するので特段意識も設定も不要ですが、SWX2110シリーズのようなL2 スイッチを使用している場合はこうした設定も必須になります。(逸般の誤家庭ならでは…苦笑)
ルータ『YAMAHA NVR510』の設定
もともとNVR510はIPoE(DS-Lite)接続するよう設定していましたが、そこに以下を追加投入。
! ===== VLAN51 からの問い合わせは AdGuard Family DNS へ =====
vlan lan1/1 802.1q vid=51
ip lan1/1 address 192.168.51.1/24
dhcp scope 51 192.168.51.100-192.168.51.200/24
dhcp scope option 51 dns=94.140.14.15,94.140.15.16
! ===== VLAN51 端末のDNS直指定を無力化 =====
ip filter 510000 pass 192.168.51.0/24 94.140.14.15 udp * 53
ip filter 510001 pass 192.168.51.0/24 94.140.15.16 udp * 53
ip filter 510002 pass 192.168.51.0/24 94.140.14.15 tcp * 53
ip filter 510003 pass 192.168.51.0/24 94.140.15.16 tcp * 53
ip filter 510010 reject 192.168.51.0/24 * udp * 53
ip filter 510011 reject 192.168.51.0/24 * tcp * 53
ip filter 510020 reject 192.168.51.0/24 * tcp * 853
ip filter 510021 reject 192.168.51.0/24 * udp * 853
! ===== VLAN51 内相互通信を全面遮断 =====
ip filter 510030 reject 192.168.51.0/24 192.168.51.0/24 * * *
ip filter 510099 pass * * * * *
ip lan1/1 secure filter in 510000 510001 510002 510003 510010 510011 510020 510021 510030 510099
これにより子供用のSSIDに繋いでVLAN「51」に属した端末は広告及びアダルトコンテンツを除去する「AdGuard Family DNS」(94.140.14.15、94.140.15.16)の利用が強制され、仮に「Google Public DNS」(8.8.8.8)などが手動で設定されてもしっかりブロックされます。さらに DoT (DNS over TLS, 853/tcp) も拒否することで、Android の「プライベートDNS」機能を有効にする抜け道も防止。
もちろん、子供用SSID以外のSSIDに接続した端末や有線LAN接続した端末は従来通りNVR510のキャッシュDNSも利用可能で、日常利用や業務への影響はありません。
ちなみに、万が一、将来フィルタリングが不要になった際には以下の投入ですべて撤去可能です。
no vlan lan1/1 802.1q vid=51
no ip lan1/1 address 192.168.51.1/24
no dhcp scope 51
no dhcp scope option 51
no ip filter 510000
no ip filter 510001
no ip filter 510002
no ip filter 510003
no ip filter 510010
no ip filter 510011
no ip filter 510020
no ip filter 510021
no ip filter 510030
no ip filter 510099
no ip lan1/1 secure filter in 510000 510001 510002 510003 510010 510011 510020 510021 510030 510099
まとめ
こうして子供用ネットワークだけを「AdGuard Family DNS」に通す仕組みを導入したことで、怪しい広告や不健全なサイトに振り回されるリスクを最大限抑えられるようになりました。既存のネットワークには影響を与えず、必要なところにだけフィルタを効かせられるのはVLANとルータの柔軟性があってこそです。
実用上は十二分に堅牢な仕組みが構築出来たと言えるでしょう。類似の設定事例はあまり見当たらなかったので、これから同種の取り組みを検討される方の参考になれば幸いです。