Ubuntu で Unbound を設定してローカルの名前解決や危険なドメインを排除する

Ubuntu で Unbound の環境を作成し、ローカルの名前解決や危険なドメインにアクセスしないようにします。


# 事前の環境作成

LXD環境で行うことを想定しています。

コンテナの作成を行います。
~~~
LXCNAME=dnsnb1
lxc launch ubuntu:20.04 $LXCNAME
lxc exec $LXCNAME -- sh -c "apt update && apt full-upgrade -y && apt autoremove -y"
lxc exec $LXCNAME -- sh -c "reboot"
~~~


# インストールと初期設定

ログインして Unbound をインストーします。
~~~
lxc exec $LXCNAME -- /bin/bash
apt install unbound
~~~

ubuntu ユーザーでsudoはできないようにします。
~~~
rm /etc/sudoers.d/90-cloud-init-users
~~~


confの編集を行います。

~~~
cd /etc/unbound/
mkdir /etc/unbound/unbound.conf.d/mynetwk/
vi unbound.conf.d/main-dmsty.conf
~~~

「main-dmsty.conf」は以下のように設定します。
~~~ main-dmsty.conf
server:
    verbosity: 1
    
    do-ip4: yes
    interface: 10.21.15.10          # アクセスを受け付けるIP  
    port: 53
    
    do-udp: yes
    do-tcp: yes
    # IPv6 は使用しない
    do-ip6: no
    
    # アクセスを許可する設定
    access-control: 127.0.0.0/8 allow
    access-control: 10.21.15.0/24 allow
    
    # Version 等を表示しない
    hide-version: yes
    hide-identity: yes
    
    # その他の設定
    include: "/etc/unbound/unbound.conf.d/mynetwk/*.conf"

# 「/etc/unbound/unbound.conf.d/mynetwk」内のconfにない
# ドメインの問い合わせ先を設定します。
# ブロードバンドルーターの DNS や Google DNS で問題ありません。
# 複数設定も可能です。
forward-zone:
    name: "."
    forward-addr: 192.168.10.254

~~~


この２ファイルの設定はそのままでもいいようです。

~~~ unbound.conf.d/root-auto-trust-anchor-file.conf
server:
    auto-trust-anchor-file: "/var/lib/unbound/root.key"
~~~
~~~ unbound.conf.d/qname-minimisation.conf
server:
    qname-minimisation: yes
~~~



# ローカルの名前解決と危険なドメインの排除

「/etc/unbound/unbound.conf.d/mynetwk」ディレクトリ内のconfを読み込むようにしています。

## ローカルの名前解決

まずはローカルの名前解決ができるようにします。

~~~ unbound.conf.d/mynetwk/mydomain.conf
local-data: "sv1.mydomain.localdomain.  IN A 192.168.10.20"
~~~


## 危険なドメインの排除

ICANN 等の関係者が何を考えているのかは不明ですが、「zip」とか「mov」とかの危険なトップレベルドメインがあるため、そのIPを返さないようにします。

~~~ unbound.conf.d/mynetwk/kiken-block.conf
local-zone: "zip." redirect
local-data: "zip. IN A 127.0.0.1"
local-zone: "mov." redirect
local-data: "mov. IN A 127.0.0.1"
local-zone: "link." redirect
local-data: "link. IN A 127.0.0.1"

# 他にもIPを返さないようにしたいドメインがある場合は、下記のようにすれば設定できます。
local-zone: "example.com." redirect
local-data: "example.com. IN A 127.0.0.1"
~~~ 


最後に、設定ファイルが間違っていないか確認します。
~~~ 
unbound-checkconf
~~~ 



# systemd-resolvedサービスのDNS設定を変更

このDNSを使いたい Ubuntu Server もこの項目の設定を行います。
デスクトップPCの場合は、それぞれのネットワーク設定の項目を設定してください。


「resolved.conf」に、UnboundサーバーのIPを記載します。

~~~ /etc/systemd/resolved.conf
[Resolve]
DNS=10.21.15.10
~~~ 

設定後にDNSキャッシュを空にして、systemd-resolvedを再起動します。
~~~ 
systemd-resolve --flush-caches
systemctl restart systemd-resolved
~~~ 

設定を確認するには下記のコマンドを使用します。
~~~ 
resolvectl status
~~~ 


# Unbound の起動

設定の完了した Unbound を起動し、自動起動もONにします。

~~~
systemctl start unbound.service
systemctl enable unbound.service
systemctl status unbound.service
~~~

もしここで起動に失敗する場合、DNSポート（PORT:53）を使ってるサービスがあるかもしれないので、下記のコマンドで確認して対処します。
~~~
ss -luntp | grep 53
~~~


ちなみに、chrome のDNSキャッシュをクリアするには、URL欄に下記を入れてアクセスし「Clear host cache」をクリックして下さい。
~~~
chrome://net-internals/#dns
~~~


# 参考URL

https://qiita.com/umaxiaotian/items/b7f8f4866468d5c400b3

https://qiita.com/shirakawa4756/items/4f86c0f0c01f8fa12877

https://gihyo.jp/admin/serial/01/ubuntu-recipe/0386
https://takashikono.hatenadiary.jp/entry/2022/03/02/082710
https://intaa.net/net/unbound_adblock
https://unbound.jp/unbound/unbound-conf/