Knot-ResolverでAndroid向けの広告をブロック
概要
Knot-Resolverを使い、Androidの「プライベートDNS設定」で利用できるDoTサーバーを構築します
また、RPZゾーンの機能を利用し広告ブロックも行います
DoTを利用するには何でもいいのでドメインが必要になります。
ドメインを持っていない人はMyDNSなど、無料の物を利用してもかまいません。
目次
- 環境
- EPELを有効にする
- knot-resolverをインストールする
- RPZゾーンファイルを用意する
- ZeroSSLで証明書を取得する
- knot-resolverの設定
- kresdを起動
- 動作確認
- 参考資料
環境
1 | cat /etc/redhat-release |
EPELを有効にする
今回はRHELを使用しているので、Subscription ManagerからEPELを有効にしていきます
1 | sudo subscription-manager repos --enable codeready-builder-for-rhel-9-$(arch)-rpms |
knot-resolverをインストールする
knot-resolverはdnfからすんなりインストールできます
1 | sudo dnf install knot-resolver |
RPZゾーンファイルを用意する
dns-blというRPZを自動生成するスクリプトを利用します。
かなり古いですが、正常動作を確認しています。
dns-blのインストール
1 | cd /opt/ |
configファイルの編集
1 | sudo vim /opt/dns-bl/conf/dns-bl.ini |
複数の広告除去用hostsファイルやマルウェア配布URLリストを指定したコンフィグを例示します。
コピペで上書きしてください
1 | [global] |
自動更新スクリプトの作成
dns-blを定期的に実行してrpzファイルを更新するスクリプトを作成します。
本記事ではこのスクリプトを/root/scripts/rpz_update.shという名前で保存しています。
1 | sudo su |
以下のシェルスクリプトをコピペで上書きしてください。
1 |
|
その後、実行権限を付与してください
1 | chmod +x /root/scripts/rpz_update.sh |
Cron設定
cronに上記スクリプトを登録します
1 | sudo crontab -e |
テキストエディタが開いたら以下のように入力してください(毎日00:00に更新)
1 | 0 0 * * * /bin/bash /root/scripts/rpz_update.sh |
ZeroSSLで証明書を取得する
ZeroSSLからTLSサーバ証明書を取得します。
※LetsEncryptを使用するとAndroidの一部のバージョンでは正常に利用できません
以下の記事を参考に証明書ファイルをダウンロードしてください。
ブラウザから無料で簡単に証明書を発行できる ZeroSSL | DevelopersIO
その後、取得した証明書はサーバの/etc/knot-resolver/に保存します。
この記事では秘密鍵をprivkey.pem証明書をfullchain.pemという名前で保存しています。
別の名前で保存した場合は設定ファイルの1行目を書き換えてください。
knot-resolverの設定
Configを編集します
1 | sudo vim /etc/knot-resolver/kresd.conf |
以下のconfigをコピペで上書きしてください
1 | net.tls("/etc/knot-resolver/fullchain.pem","/etc/knot-resolver/privkey.pem") |
kresdを起動
はじめに自動更新スクリプトを手動で実行し、RPZファイルを事前生成しておきます
実行に成功すると生成されたゾーンファイルの行数か何かが出力されます。
1 | sudo su |
kresdを起動します
1 | sudo systemctl enable kresd@1 |
動作確認
1 | C:\Users\admin>nslookup google.com <サーバIP> |
参考資料
How to install EPEL on RHEL and CentOS Stream | Enable Sysadmin
ブラウザから無料で簡単に証明書を発行できる ZeroSSL | DevelopersIO
Configuration Overview — Knot Resolver 5.7.1 documentation
Knot-ResolverでAndroid向けの広告をブロック
https://lunatic.red/2024/03/10/Knot-ResolverでAndroid向けの広告をブロック/