WSR-1166DHS2へのOpenWrt導入③(Unboundでネットワーク内の広告ブロック編)

この記事は約6分で読めます。

 子どもが小学校の入学にあたりタブレット学習などが取り入れられてきたのを気に、ネットを通じた不要な広告や有害なサイトのブロックする方法として、DNSブロックというものがあると知り環境構築しました。その際の構築方法です。

  • ルーターの購入(今回は中古で1000円のルーターを購入しました)
  • OpenWrtのインストール
  • unboundのインストール及びOpenWrtの設定 ← 今回の記事

DNS(Domain Name System)とは

 DNS(Domain Name System)とは、一言でいうと、ネットワーク上の名前解決の仕組みです。以下はJPNICの概要解説です。

DNSとは - JPNIC

 unboundとは

Unboundは、オランダのNLnet Labsの開発しているオープンソースのDNSキャッシュサーバである。〜中略〜

特徴
 DNSキャッシュサーバとして特化しており、シンプルな設計となっていることから、比較的設定が容易かつ高速で動作する。1つの設定ファイル(unbound.conf)のみで全ての設定が可能というのも特徴的である。

Wikipedia

 unboundはDNSキャッシュサーバーに特化しているとありますが、DNSサーバーには、以下のようにコンテンツサーバーとキャッシュサーバーという機能の分類があります。

DNS機能分類機能
コンテンツサーバー自身のドメイン内のサーバーの情報を保持して外部からの問い合わせに応答する
キャッシュサーバー問合わせに応じて別のDNSサーバーに問い合わせを行った結果を返し、それを一定期間保存する役割
DNSサーバーの機能分類

 unboundはメインとしてキャッシュサーバーの機能を持ち、コンテンツサーバーとしての機能は限られているようです。

unboundのインストール

unboundのインストールはLuciから行えるのでとても簡単です。

System -> Software から 「Update lists」ボタンを押下すると、インストールできるアプリケーションの一覧が出ててきます。(opkg updateコマンドが実行されています)

Filterに「unbound」と入力すると、unbound関係のアプリ一覧が出てきます。

依存関係があるので、勝手にインストールされるものもありますが、以下をインストールします。

unboundの設定一覧

以下の設定を変更しました。

外タブ内タブ項目内容説明
UnboundBasicListeningPort53 ->10053デフォルトの待ち受けポートを変更
DHCPDHCP Linkdnsmasqプルダウンで選択
ZonesEnableチェックデフォルトで設定されている一番上のForward TLSのEnableにチェックを付ける。(以下、その設定)
Type: Forward TLS
Zone Type: Forward(simple handoff)
Servers:1.1.1.1、1.0.0.1、他
DNS over TLS:チェック
TLS Name Index:cloudflare-dns.com
FilesEdit: Serverinclude: adblock.confServer 句でincludeディレクティブを使用し、取り込む.confファイルを指定しています。
unboundの設定

設定のポイント

Zones(Forward TLS)

 最初、デフォルトで設定されている一番上のFowrwrd TLS(Cloud FlareのTLS)をEnableとしました。

それだけでもよいのですが、今回は、Editボタンで編集画面に入り、Servers:を以下のように編集しました。

上記は、アダルトコンテンツ制限とマルウェア保護機能を備えたCloudflare Family Protectionです。
OpenwrtのDoTの設定例より

Files:

Edit:Sever

 テキスト部分に取り込むconfファイルを追加します。

ここでは、Server 句にincludeディレクティブを使用し、取り込む.confファイルを指定しています。confファイルの中身は以下で指定する書式に従って作成し、Openwrtルーターの指定したディレクトリへ格納します。

このconfファイルに広告関係のドメインなどを指定することでブロックできます。confファイルの書式としては、以下の2通りあります。

  1. local-zoneのTypeに”static”を利用する場合
local-zone: "example.com." static

上記のように指定することで、example.comはローカルのゾーンで、タイプはstaticだけど、local-data:の記載が何もないため、NODATAかNXDOMAINを返します。

この書式の”example.com”にブロックするサイトのドメインを記載すれば完成です。

  1. local-zoneのTypeに”redirect”を利用する場合

以下のように記載します。

local-zone: "example.com." redirect
local-data: "example.com A 0.0.0.0"
local-data: "example.com AAAA ::"

example.comはローカルのゾーンでタイプがリダイレクトなのでリダイレクトされます。リダイレクト先は0.0.0.0か::、つまり、宛先なしとして処理されます。

この書式の”example.com”にブロックするサイトのドメインを記載すれば完成です。

どちらを利用しようともブロックできるのですが、staticの方が記載が少なくて楽だと思います。

ブロックリストの参考情報

confファイルに記載するブロックリストの参考情報です。

Web上にブロックリストもあるようですが、DNSブロックアプリ用など色々あり、それぞれ書式も違います。また、いつまで更新し続けられるかは不明です。参考までに以下のリンクを記載しておきます。最終的には、自分で追加できるようになるのが一番よいと思います。

unboundのdnsブロッキングリストを更新する。 · GitHub

悪いインターネット

GitHub – tofukko/filter

おわりに

 unboundを利用した広告ブロックをするためにOpenwrtを導入し、ひとまずこれで広告ブロックとしては完成しました。後は、cronでファイルの更新をするようにしています。今後は、フィルタリスト、Zones(Forward TLS)を再考しようかなと思っています。DNS及び広告ブロックは奥が深く、機能もそうですがセキュリティ面も学ぶ必要があると認識しました。

 また、Openwrtも奥が深く、いろんなことができるようで、途中、失敗もしましたが、広告ブロックと並行して、Wireguradを導入したり、WOLを実行できるようになりました。

参考

unbound.conf(5) — Unbound 1.17.1 documentation (nlnetlabs.nl)

unboundをインストールしてdns問い合わせしつつ、書き換えする。 – それマグで! (hatenablog.jp)

Unboundでネットワーク内まるごと広告ブロック – がとらぼ (intaa.net)