外部の動画を実質的に見られなくする

子供が隠れてテレビ内蔵の機能を使ってYouTubeを見ているので、それを実質的にできないようにする試みをしてみた。

テレビのリモコンを持って行って隠したりするので、現状のリモコンで工夫することは困難な状況(指紋認証などをしてから利用可能になるリモコンがあれば可能であろう)。

テレビは家族共用のもので、LAN内機器からDLNAを使って録画などを見ているので、単純にネットワークを遮断することはできない。また、TVで外部サービスの動画を見られるようにする必要はないが、外部との通信は(それなりの速度で)可能にしておく必要がある。

今のところは、有料の動画サービスは別の機器をHDMIでテレビと接続して見ているので、テレビ単独では動画が見られないようにするだけで良い。テレビ単独でもサービスによって制限の掛け方を変える必要がある場合には、設定が面倒になりそうである。

基本的な考え方

  • 他の家庭内の端末などには影響がないように、TVとLANの間に機器を導入して制御する
  • TVと外部のインターネットとの通信速度を制限する(100kbpsに制限)
    • 動画が全く再生されないわけではないが、頻繁に止まる
    • TVへの流入のみを制限すれば十分
  • TVと家庭内LAN内機器との通信は実質的に制限しない(100Mbpsに制限)

子供にネットワークについての知識はまだないので、ひっそりと設定しておけば、接続を元に戻して制限を回避してしまう心配は今しばらくはない。

導入した機器

導入する機器は Ubiquiti の EdgeRouter X とした。Amazonで 1万円弱のものを購入した。

必要なスループットが低いので安価な RaspberryPi  にLANアダプタを増設して使おうかとも思ったが、増設したLANアダプタが既製のケースから出てしまうし、ケースを工夫していると手間もかかる。小型PCのBarebone Kit を使うことも検討してみたが、大きさも必要以上に大きくなるので安価で設定が柔軟にできるルーターを探した。Ubiquiti のルータが安価で柔軟に設定できそうなことがわかった。性能はあまり必要ないので最も安価な EdgeRouter X に決めた。

構成

次の図のようにeth0は設定用にし、eth2はLANに接続し、eth3をTVに接続することとした。eth2とeth3はブリッジ BR0 をハブとして使うようにする。LANからの流入するデータの通信速度に limiter で制限を加えることにした。

設定

Webベースの設定ツールである UNMS (Ubiquiti Network Management System) を使って設定をした。最初にハブとして使う設定にしてから、 Config Tree ビューで設定を行った。

L2スイッチとしてハードウェアの switch0 を使うと traffic policy がうまく機能しないようなので、ソフトウェアスイッチのBridge を作成して使った。使用する eth2、eth3 から不必要な設定を取り除いておかないとうまく機能しなかったため、少し手間取った。

Bridge BR0 の作成

traffic-policy  を定義する

inlimitという名前の traffic-policy を定義する(他の名前でももちろん良い)。eth2 の入力の制限に利用する。

ソースIPアドレスがLAN内の場合

IPパケットのソースIPアドレスがLAN内 (192.168.1.0/24)の場合には速度制限を100Mbit/s (100mbit)に設定した。

ソースIPアドレスがLAN外の場合

IPパケットのソースIPアドレスがLAN外の場合(default)には、速度制限を100kbit/s (100kbit) に設定した。少し試しただけだが、100kbit/s では快適に動画を見ることができない。

eth2の設定

bridge-groupを BR0 に設定

eth2の in の traffic-policyに inlimit  を設定

eth3の設定

bridge-groupを BR0 に設定

関連する設定のまとめ

UNMSのSystemタブの中に設定の保存のボタンがあった。それを使用して保存をした。以下に、interfaces と traffic-policyの関連した部分のみを記録のために残しておく。

interfaces

interfaces {
    bridge br0 {
        aging 300
        bridged-conntrack disable
        hello-time 2
        max-age 20
        priority 32768
        promiscuous disable
        stp false
    }
    ethernet eth0 {
        address 192.168.1.1/24
        description "Local 2"
        duplex auto
        speed auto
    }
    ethernet eth2 {
        bridge-group {
            bridge br0
        }
        description Local
        duplex auto
        speed auto
        traffic-policy {
            in inlimit
        }
    }
    ethernet eth3 {
        bridge-group {
            bridge br0
        }
        description Local
        duplex auto
        speed auto
    }
}

traffic-policy

traffic-policy {
    limiter inlimit {
        class 10 {
            bandwidth 100mbit
            burst 15k
            match inaddress {
                ip {
                    source {
                        address 192.168.1.0/24
                    }
                }
            }
            priority 20
        }
        default {
            bandwidth 100kbit
            burst 15k
        }
    }
}

改善すべき点

現状の構成ではケーブルを付け替えることで、制限を回避できるなどの心配もあるので、本来であれば、インターネットとつながっているルータで、TVとの通信を制限した方が良いと思われる。ただし、そうするとルータの性能もそれなりに高いものにする必要があるし、TVのアドレスを特定しておかなければならなくなる。

もっとも、制限を解除できるようになれば、このようなことは不要なので、そうなることを期待したい。