概要
Knot-Resolverを使い、Androidの「プライベートDNS設定」で利用できるDoTサーバーを構築します
また、RPZゾーンの機能を利用し広告ブロックも行います
DoTを利用するには何でもいいのでドメインが必要になります。
ドメインを持っていない人はMyDNSなど、無料の物を利用してもかまいません。
目次
環境
1 2
| $ cat /etc/redhat-release Red Hat Enterprise Linux release 9.3 (Plow)
|
EPELを有効にする
今回はRHELを使用しているので、Subscription ManagerからEPELを有効にしていきます
1 2
| $ sudo subscription-manager repos --enable codeready-builder-for-rhel-9-$(arch)-rpms $ sudo dnf install https://dl.fedoraproject.org/pub/epel/epel-release-latest-9.noarch.rpm
|
knot-resolverをインストールする
knot-resolverはdnfからすんなりインストールできます
1
| $ sudo dnf install knot-resolver
|
RPZゾーンファイルを用意する
dns-blというRPZを自動生成するスクリプトを利用します。
かなり古いですが、正常動作を確認しています。
dns-blのインストール
1 2
| $ cd /opt/ $ sudo https://github.com/p7cq/dns-bl.git
|
configファイルの編集
1
| $ sudo vim /opt/dns-bl/conf/dns-bl.ini
|
複数の広告除去用hostsファイルやマルウェア配布URLリストを指定したコンフィグを例示します。
コピペで上書きしてください
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47
| [global] rpz_file = /etc/knot-resolver/rpz.zone redirect = IN CNAME .
whitelist_file_prefix = whitelist_
[source/1] url = https://urlhaus.abuse.ch/downloads/hostfile/ file_type = text categories = malware enabled = yes
[source/2] url = https://raw.githubusercontent.com/blocklistproject/Lists/master/alt-version/ads-nl.txt file_type = text categories = ads enabled = yes
[source/3] url = https://logroid.github.io/adaway-hosts/hosts.txt file_type = text categories = ads enabled = yes
[source/4] url = https://adaway.org/hosts.txt file_type = text categories = ads enabled = yes
[source/5] url = https://warui.intaa.net/adhosts/hosts_lb.txt file_type = text categories = ads enabled = yes
[source/6] url = https://raw.githubusercontent.com/StevenBlack/hosts/master/hosts file_type = text categories = ads enabled = yes
[source/7] url = https://pgl.yoyo.org/adservers/serverlist.php?hostformat=hosts&showintro=0&mimetype=plaintext file_type = text categories = ads enabled = yes
|
自動更新スクリプトの作成
dns-blを定期的に実行してrpzファイルを更新するスクリプトを作成します。
本記事ではこのスクリプトを/root/scripts/rpz_update.shという名前で保存しています。
1 2
| $ sudo su # vim /root/scripts/rpz_update.sh
|
以下のシェルスクリプトをコピペで上書きしてください。
1 2 3 4 5
| #!/bin/bash /opt/dns-bl/bin/run.sh chown knot-resolver:knot-resolver /etc/knot-resolver/rpz.zone restorecon -FR /etc/knot-resolver/ systemctl restart kresd@*
|
その後、実行権限を付与してください
1
| # chmod +x /root/scripts/rpz_update.sh
|
Cron設定
cronに上記スクリプトを登録します
テキストエディタが開いたら以下のように入力してください(毎日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 2 3 4 5 6 7 8 9 10 11 12 13 14 15
| net.tls("/etc/knot-resolver/fullchain.pem","/etc/knot-resolver/privkey.pem") net.listen('0.0.0.0', 53, { kind = 'dns' }) net.listen('0.0.0.0', 853, { kind = 'tls' }) modules = { 'hints > iterate', 'stats', 'predict', 'view', } view:addr('192.168.0.0/16',policy.all(policy.PASS)) view:addr('172.16.0.0/12',policy.all(policy.PASS)) view:addr('10.0.0.0/8',policy.all(policy.PASS)) view:addr('0.0.0.0/0',policy.all(policy.TC)) policy.add(policy.rpz(policy.DENY, '/etc/knot-resolver/rpz.zone')) log_level('warning')
|
kresdを起動
はじめに自動更新スクリプトを手動で実行し、RPZファイルを事前生成しておきます
実行に成功すると生成されたゾーンファイルの行数か何かが出力されます。
1 2 3
| $ sudo su # /root/scripts/rpz_update.sh 346934
|
kresdを起動します
1 2
| $ sudo systemctl enable kresd@1 $ sudo systemctl start kresd@1
|
動作確認
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
| C:\Users\admin>nslookup google.com <サーバIP> サーバー: UnKnown Address: <サーバIP>
権限のない回答: 名前: google.com Addresses: 2404:6800:4004:823::200e 142.250.199.110
C:\Users\admin>nslookup ads.google.com <サーバIP> サーバー: UnKnown Address: <サーバIP>
*** UnKnown が ads.google.com を見つけられません: Non-existent domain
|
参考資料
How to install EPEL on RHEL and CentOS Stream | Enable Sysadmin
ブラウザから無料で簡単に証明書を発行できる ZeroSSL | DevelopersIO
Configuration Overview — Knot Resolver 5.7.1 documentation