0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Unboundを使って,フォワーダーとDoTで通信するキャッシュDNSサーバーを作る

Posted at

はじめに

DNSサーバーとの通信は多くの場合、暗号化されずに平文で行われるため、第三者に通信内容を閲覧されたり、改ざんされたりするリスクがあります。

こうした課題を解決する手段の一つとして、DNS over TLS(DoT) が注目されています。DoT は、DNSのクエリとレスポンスをTLS(Transport Layer Security)暗号化することで、通信の秘匿性と完全性を確保する技術です。

こうした通信に対応するパブリックDNSサーバーは未だ少数に留まりますが、今回はCloudflare DNSと自宅キャシュDNSサーバーとの通信をDoTで通信し、よりセキュアなDNS通信を行います。

システム概要図

今回作るシステムはこんな感じです。
システム概要図

LAN内のDNSクエリを受け付ける、キャッシュDNSサーバーとして利用することを想定します。

LAN内のクエリについては、平文で通信を行いますが、キャッシュされていないDNSレコードをパブリックDNSより受け取る際に、DoT で通信を行うというものです。

方法

今回は、Raspberry PiUnbound をインストールすることを想定します。

同じDebian 系OSを使っていれば手順は変わらないと思います。

1. Unboundをインストールする

aptを使ってUnboundをインストールします。

sudo apt update && sudo apt install unbound

2. 設定ファイルを編集する

続いて設定ファイルを編集し、Unboundの初期設定を行います。

/etc/unbound/unbound.confをお好きなエディタで開きます。

sudo nano /etc/unbound/unbound.conf

開いたファイルに以下のように書き換えます。

/etc/unbound/unbound.conf
# Unbound configuration file for Debian.
#
# See the unbound.conf(5) man page.
#
# See /usr/share/doc/unbound/examples/unbound.conf for a commented
# reference config file.
#
# The following line includes additional configuration files from the
# /etc/unbound/unbound.conf.d directory.
server:
    # 基本設定
    verbosity: 4
    interface: 0.0.0.0
    interface: ::0
    num-threads: 4
    #logfile: /var/log/unbound.log
    # デフォルト拒否
    access-control: 0.0.0.0/0 refuse
    access-control: ::0/0 refuse
    # IPv4設定
    access-control: 127.0.0.0/8 allow
    access-control: 192.168.100.0/24 allow
    # IPv6設定
    access-control: ::1 allow
    access-control: ::ffff:127.0.0.1 allow

    # IPv6 対応
    do-ip6: yes
    do-ip4: yes
    do-udp: yes
    do-tcp: yes

    # DNSのセキュリティ対策
    hide-identity: yes 
    hide-version: yes
    harden-glue: yes
    harden-dnssec-stripped: yes

# DNS over TLS を Cloudflare に使う
forward-zone:
    name: "."
    forward-tls-upstream: yes
    forward-addr: 1.1.1.1@853
    forward-addr: 1.0.0.1@853
    forward-addr: 2606:4700:4700::1111@853
    forward-addr: 2606:4700:4700::1001@853

今回の設定ファイルでは、Cloudflare DNS をフォワーダーとして使用し、通信にはDoTを使用するほかに

  • IPv4, v6の双方の通信を受付
  • 同一サブネット(家庭内LAN)からの通信を許可
  • udp, tcp両方を使う
  • クライアントにアイデンティティ情報やバージョン情報を知られないようにする
  • glueレコードに対して厳密な検証を行う

という設定を盛り込んでいます。

3. 設定ファイルの適用

先ほど記述した設定ファイルに構文のエラーがないか、チェックを行います。
以下のコマンドを実行してください。

unbound-chekconf

設定ファイルに問題がなければ、

unbound-checkconf: no errors in /etc/unbound/unbound.conf

と返ってきます。もし、エラーがある場合にはインデントミスやタイプミスがないか、チェックしましょう。

問題がなければ、設定ファイルの適用を行います。以下のコマンドを実行し、unboundを再起動しましょう。

sudo systemctl restart unbound

動作確認

続いて正しくunboundが動作しているか確認していきます。今回はLinuxMacOS に標準搭載されている、digコマンドで動作を確認します。

以下のコマンドを実行し、正しく返答が返ってくるか確認しましょう。

dig A @キャッシュDNSサーバーのアドレス google.com 

ANSWER SECTIONの欄に以下のような返答が返ってきていたら成功です。

;; ANSWER SECTION:
google.com.             263     IN      A       142.250.206.206

お疲れ様でした。

余談

キャッシュDNSサーバーは家庭用の無線LANルーターに搭載されていることが多く、わざわざ自身で構築する理由がないように見えるかもしれません。

しかし、家庭用の無線LANルーターに搭載されているDNSサーバーは平文で通信を行っていることも多いのが現状です。

そのため、今回のように自分でキャッシュDNSサーバーを作成することで、DNSの上流への問い合わせを暗号化することができるようになります。

また、自分のキャッシュDNSサーバーを構築するメリットとして、特定のドメインはローカルで名前解決をしてしまうこともできるようになります。

したがって、example.homeというドメインについては、192.168.1.1を返す、といったようにSSH接続をする際にIPを手打ちする必要がなくなるというのもメリットといえるでしょう。

参考文献

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?