子どもが小学校の入学にあたりタブレット学習などが取り入れられてきたのを気に、ネットを通じた不要な広告や有害なサイトのブロックする方法として、DNSブロックというものがあると知り環境構築しました。その際の構築方法です。
- ルーターの購入(今回は中古で1000円のルーターを購入しました)
- OpenWrtのインストール
- unboundのインストール及びOpenWrtの設定 ← 今回の記事
DNS(Domain Name System)とは
DNS(Domain Name System)とは、一言でいうと、ネットワーク上の名前解決の仕組みです。以下はJPNICの概要解説です。
unboundとは
Unboundは、オランダのNLnet Labsの開発しているオープンソースのDNSキャッシュサーバである。〜中略〜
特徴
Wikipedia
DNSキャッシュサーバとして特化しており、シンプルな設計となっていることから、比較的設定が容易かつ高速で動作する。1つの設定ファイル(unbound.conf)のみで全ての設定が可能というのも特徴的である。
unboundはDNSキャッシュサーバーに特化しているとありますが、DNSサーバーには、以下のようにコンテンツサーバーとキャッシュサーバーという機能の分類があります。
DNS機能分類 | 機能 |
コンテンツサーバー | 自身のドメイン内のサーバーの情報を保持して外部からの問い合わせに応答する |
キャッシュサーバー | 問合わせに応じて別のDNSサーバーに問い合わせを行った結果を返し、それを一定期間保存する役割 |
unboundはメインとしてキャッシュサーバーの機能を持ち、コンテンツサーバーとしての機能は限られているようです。
unboundのインストール
unboundのインストールはLuciから行えるのでとても簡単です。
System -> Software から 「Update lists」ボタンを押下すると、インストールできるアプリケーションの一覧が出ててきます。(opkg updateコマンドが実行されています)
Filterに「unbound」と入力すると、unbound関係のアプリ一覧が出てきます。
依存関係があるので、勝手にインストールされるものもありますが、以下をインストールします。
unboundの設定一覧
以下の設定を変更しました。
外タブ | 内タブ | 項目 | 内容 | 説明 |
Unbound | Basic | ListeningPort | 53 ->10053 | デフォルトの待ち受けポートを変更 |
DHCP | DHCP Link | dnsmasq | プルダウンで選択 | |
Zones | Enable | チェック | デフォルトで設定されている一番上の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 | |
Files | Edit: Server | include: adblock.conf | Server 句でincludeディレクティブを使用し、取り込む.confファイルを指定しています。 |
設定のポイント
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通りあります。
- local-zoneのTypeに”static”を利用する場合
local-zone: "example.com." static
上記のように指定することで、example.comはローカルのゾーンで、タイプはstaticだけど、local-data:の記載が何もないため、NODATAかNXDOMAINを返します。
この書式の”example.com”にブロックするサイトのドメインを記載すれば完成です。
- 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
おわりに
unboundを利用した広告ブロックをするためにOpenwrtを導入し、ひとまずこれで広告ブロックとしては完成しました。後は、cronでファイルの更新をするようにしています。今後は、フィルタリスト、Zones(Forward TLS)を再考しようかなと思っています。DNS及び広告ブロックは奥が深く、機能もそうですがセキュリティ面も学ぶ必要があると認識しました。
また、Openwrtも奥が深く、いろんなことができるようで、途中、失敗もしましたが、広告ブロックと並行して、Wireguradを導入したり、WOLを実行できるようになりました。
参考
unbound.conf(5) — Unbound 1.17.1 documentation (nlnetlabs.nl)
unboundをインストールしてdns問い合わせしつつ、書き換えする。 – それマグで! (hatenablog.jp)