このチュートリアルでは、 Unboundを使用してUbuntu20.04でローカルDNSリゾルバーを設定する方法を説明します。 。 DNSリゾルバーは多くの名前で知られており、その一部を以下に示します。それらはすべて同じものを指します。
- フルリゾルバー(スタブリゾルバーとは対照的)
- 再帰DNSサーバー
- 再帰ネームサーバー
- 再帰的リゾルバー
- DNSリカーサー
DNSリゾルバーの例は8.8.8.8
です。 (Google Public DNSサーバー)および1.1.1.1
(CloudflareパブリックDNSサーバー)。コンピューターのOSにもリゾルバーがありますが、機能が制限されているため、スタブリゾルバーと呼ばれます。 スタブリゾルバー FirefoxなどのアプリケーションからDNSリクエストを受信し、リクエストを再帰リゾルバーに転送する、エンドユーザーのコンピュータ上の小さなDNSクライアントです。 。ほとんどすべてのリゾルバーはDNS応答をキャッシュしてパフォーマンスを向上させることができるため、DNSサーバーのキャッシュとも呼ばれます。 。
独自のDNSリゾルバーを実行する理由
通常、コンピュータ、ルーター、またはサーバーはISPのDNSリゾルバーを使用してDNS名を照会しますが、なぜローカルDNSリゾルバーを実行するのですか?
- ローカルDNSリゾルバーはDNS要求のみをリッスンし、他のユーザーのDNS要求には応答しないため、DNSルックアップを高速化できます。したがって、リゾルバーのキャッシュから直接DNS応答を取得する可能性がはるかに高くなります。コンピューターとDNSリゾルバー間のネットワーク遅延が排除されるため(ほぼゼロ)、DNSクエリをルートDNSサーバーにより迅速に送信できます。
- メールサーバーを実行し、DNSブラックリスト(DNSBL)を使用してスパムをブロックする場合は、独自のDNSリゾルバーを実行する必要があります。URIBLなどの一部のDNSブラックリストはパブリックDNSリゾルバーからの要求を拒否するためです。
- VPS(仮想プライベートサーバー)で独自のVPNサーバーを実行している場合は、同じVPSにDNSリゾルバーをインストールすることもお勧めします。
- インターネットの閲覧履歴をサードパーティのサーバーに保存したくない場合は、独自のDNSリゾルバーを実行することもできます。
ヒント :Local
自宅のコンピューターを意味するものではありません。むしろ、DNSリゾルバーがDNSクライアントと同じボックスまたは同じネットワーク上で実行されることを意味します。 UnboundDNSリゾルバーを自宅のコンピューターにインストールできます。自宅のコンピューターのローカルです。 Unbound DNSリゾルバーをクラウドサーバーにインストールすることもできます。これは、クラウドサーバーに対してローカルです。
アンバウンドDNSリゾルバー
UnboundはオープンソースのDNS検証リゾルバーです。つまり、DNSSEC検証を実行して、DNS応答が本物であることを確認できます。バインドされていない機能:
- 本格的な信頼できるDNSサーバー機能を提供しないため、軽量で非常に高速です。私のサーバーの1つで、UnboundはBIND9に必要なメモリの4分の1を使用します。
- DNS応答キャッシュ
- プリフェッチ:期限切れが近づいているデータをフェッチして、データのTTLが期限切れになったときにルックアップをやり直す必要があるときにクライアントがレイテンシーの急上昇を起こさないようにします。
- DNS over TLS
- DNS over HTTPS
- クエリ名の最小化:プライバシーを強化するために、最小限の情報をアップストリームサーバーに送信します。
- DNSSEC検証済みキャッシュの積極的な使用
- 権限ゾーン、ルートゾーンのローカルコピー用
- DNS64
- DNSCrypt
- DNSSEC検証:Ubuntuではデフォルトで有効になっています🙂
- EDNSクライアントサブネット
- DNSフォワーダーとして実行できます。
- ローカルデータと応答ポリシーゾーンをサポートして、特定のドメイン名に対してカスタム回答を返します。
ステップ1:UnboundDNSResolverをUbuntu20.04にインストールする
次のコマンドを実行して、デフォルトのリポジトリからUbuntu20.04にUnboundをインストールします。
sudo apt update sudo apt install unbound
バージョンを確認してください。
unbound -V
サンプル出力:
デフォルトでは、Unboundはインストール後に自動的に開始されます。次のコマンドでステータスを確認します:
systemctl status unbound
実行されていない場合は、次のコマンドで開始します:
sudo systemctl start unbound
起動時に自動起動を有効にします:
sudo systemctl enable unbound
注 :UDPポート53でリッスンしている別のサービスがある場合、アンバウンドを開始できない可能性があります。アンバウンドを開始する前に、そのサービスを停止する必要があります。すでにUDPポート53を使用しているサービスを確認するには、次のコマンドを実行します。
sudo ss -lnptu | grep 53
以前にBIND9リゾルバーをインストールした場合は、次のコマンドを実行して停止および無効にする必要があります。これにより、UnboundはUDPポート53をリッスンできます。デフォルトでは、Unboundは127.0.0.1:53
でリッスンします。 および[::1]:53
sudo systemctl disable named --now
ステップ2:アンバウンドを構成する
Unboundの主な構成ファイルは/etc/unbound/unbound.conf
です。 。箱から出して、UbuntuのUnboundサーバーはローカルホストにのみ再帰サービスを提供します。外部からの問い合わせは拒否されます。
構成ファイルを編集します。
sudo nano /etc/unbound/unbound.conf
デフォルトでは、このファイルには設定行が1つだけあります。
include: "/etc/unbound/unbound.conf.d/*.conf"
これは、/etc/unbound/unbound.conf.d/
の下に構成ファイルを含めるためのものです。 ディレクトリ。2つの構成ファイルが含まれています。
-
qname-minimisation.conf
:QNAMEの最小化を有効にします。 -
root-auto-trust-anchor-file.conf
:DNSSEC検証を有効にします。
これらの2つのファイルに触れる必要はありません。それらがDNS解決に役立つことを知っておいてください。次に、カスタム構成を追加する必要があります。サンプルの設定ファイル/usr/share/doc/unbound/examples/unbound.conf
をご覧ください。 Unboundを構成する方法を学びます。あなたの便宜のために、私はあなたのために最小限の設定をコンパイルしました。 /etc/unbound/unbound.conf
に次の行を追加します ファイル。
server: # the working directory. directory: "/etc/unbound" # run as the unbound user username: unbound verbosity: 2 # uncomment and increase to get more logging. # listen on all interfaces, answer queries from the local subnet. interface: 0.0.0.0 # comment out the following line if your system doesn't have IPv6. interface: ::0 # perform prefetching of almost expired DNS cache entries. prefetch: yes access-control: 10.0.0.0/8 allow access-control: 127.0.0.1/24 allow access-control: 2001:DB8::/64 allow # hide server info from clients hide-identity: yes hide-version: yes remote-control: # Enable remote control with unbound-control(8) here. control-enable: no # what interfaces are listened to for remote control. # give 0.0.0.0 and ::0 to listen to all interfaces. # set to an absolute path to use a unix local name pipe, certificates # are not used for that, so key and cert files need not be present. control-interface: 127.0.0.1 # control-interface: ::1 # port number for remote control operations. control-port: 8953
上記の構成は自明です。考慮する必要があるかもしれない2つのことがあります。
(1)デフォルトでは、Ubuntuは127.0.0.53:53
でリッスンするsystemd-resolvedスタブリゾルバーを実行します 。アンバウンドが0.0.0.0:53
にバインドできるように、停止する必要があります 。
sudo systemctl disable systemd-resolved --now
(2)ローカルネットワークの範囲が10.0.0.0/8
でない場合 、たとえば、それを変更する必要があります
access-control: 192.168.0.0/24 allow
したがって、unboundは192.168.0.0/24ネットワークからのDNSクエリを受け入れます。
ファイルを保存して閉じます。次に、Unboundを再起動します。
sudo systemctl restart unbound
ステータスを確認してください。実行されていることを確認してください。
systemctl status unbound
アンバウンドサーバーでUFWファイアウォールを実行している場合は、ポート53を開いて、LANクライアントがDNSクエリを送信できるようにする必要があります。
sudo ufw allow in from 10.0.0.0/8 to any port 53
これにより、TCPおよびUDPポート53がプライベートネットワーク10.0.0.0/8に開かれます。
ステップ3:Ubuntu20.04サーバーでデフォルトのDNSリゾルバーを設定する
Ubuntu 20.04サーバーがDNSリゾルバーとして127.0.0.1を使用するようにする必要があるため、unboundはDNSクエリに応答します。 Ubuntuのunboundパッケージには、systemdサービスunbound-resolvconf.service
が付属しています。 それは私たちがこれを達成するのに役立つはずです。ただし、機能しないことがわかりました。
代わりに、カスタムのunbound-resolvconf.service
を作成できます ファイル。
sudo nano /etc/systemd/system/unbound-resolvconf.service
このファイルに次の行を追加します。
[Unit] Description=local unbound via resolvconf After=unbound.service ConditionFileIsExecutable=/sbin/resolvconf [Service] Type=oneshot RemainAfterExit=yes ExecStart=/bin/sh -c 'echo nameserver 127.0.0.1 | /sbin/resolvconf -a lo.unbound' ExecStop=/sbin/resolvconf -d lo.unbound [Install] WantedBy=unbound.service
このファイルを保存して閉じます。次に、systemdをリロードします。
sudo systemctl daemon-reload
システムにresolvconf
があることを確認してください バイナリ。
sudo apt install openresolv
次に、このサービスを再起動します。
sudo systemctl restart unbound-resolvconf.service
次に、/etc/resolv.conf
の内容を確認します 。
cat /etc/resolv.conf
ご覧のとおり、127.0.0.1(Unbound)がデフォルトのDNSリゾルバーです。
トラブルシューティング
/etc/resolv.conf
に別の値が表示されている場合 ファイル、つまり、UnboundはまだデフォルトのDNSリゾルバーではありません。 Linodeのような一部のホスティングプロバイダーは、ネットワークヘルパーを使用して/etc/resolv.conf
を自動生成する場合があることに注意してください。 ファイル。デフォルトのDNSリゾルバーを変更するには、ホスティングコントロールパネルでそのネットワークヘルパーを無効にする必要があります。
それでもこの方法が機能しない場合は、/etc/resolv.conf
が原因である可能性があります。 Ubuntuサーバー上のファイルは、/run/resolvconf/resolv.conf
へのシンボリックリンクではありません 。 /etc/resolv.conf
を削除する必要があります ファイルを作成し、シンボリックリンクを作成します。
sudo rm /etc/resolv.conf sudo ln -s /run/resolvconf/resolv.conf /etc/resolv.conf
UbuntuサーバーでWireGuardVPNクライアントを実行している場合は、WireGuardクライアント構成ファイルで次のDNS設定を使用する必要があります。
DNS = 127.0.0.1
次に、WireGuardVPNクライアントを再起動します。
ステップ4:クライアントコンピューターでのデフォルトのDNSリゾルバーの設定
Ubuntuデスクトップでは、上記の手順に従ってデフォルトのDNSリゾルバーを設定できますが、127.0.0.1をUnboundサーバーのIPアドレスに置き換えることを忘れないでください。 MacOSおよびWindowsでデフォルトのDNSリゾルバを設定する手順は、インターネットで見つけることができます。
非バインドでIPv6を無効にする方法
サーバーにIPv6接続がない場合は、非バインドでIPv6をオフにして、IPv6での不要なDNSルックアップを減らすことをお勧めします。 UbuntuのUnboundでIPv6を無効にするには、server:
に次の行を追加するだけです。 /etc/unbound/unbound.conf
の句 ファイル。
do-ip6: no
ファイルを保存して閉じます。次に、Unboundを再起動します。
sudo systemctl restart unbound
アンバウンドDNSSEC
DNSSECは、DNS応答が改ざんされていないことを検証する方法です。デフォルトのUbuntuリポジトリからUnboundをインストールすると、デフォルトで有効になります。 Ubuntu20.04サーバーで簡単なDNSクエリを実行してみましょう。
dig A linuxbabe.com
ad
が表示されます DNS応答のフラグ。 ADは本物のデータを意味します。
検証を機能させるには、ドメイン名でDNSSECを有効にする必要があることに注意してください。広告フラグが表示されない場合は、ドメイン名でDNSSECが有効になっていない可能性があります。
ローカルデータ
Unboundのローカルデータ機能を使用して、ローカルの内部ホスト名を提供したり、パブリックDNSレコードを上書きしたりできます。
たとえば、ブログWebサーバーにunboundをインストールする場合、server:
に次の4行を追加できます。 ドメインが常にlocalhostに解決されるように、Unbound構成ファイルの句。
local-data: "linuxbabe.com A 127.0.0.1" local-data: "www.linuxbabe.com A 127.0.0.1" local-data: "linuxbabe.com AAAA ::1" local-data: "www.linuxbabe.com AAAA ::1"
サーバーに到達できませんでした
dig
の使用時に次のエラーが表示された場合 クライアントコンピュータでのコマンド
;; connection timed out; no servers could be reached
ファイアウォールルールが間違っているか、Unboundリゾルバーが実行されていない可能性があります。
結論
このチュートリアルが、Unboundを使用してUbuntu20.04でローカルDNSリゾルバーをセットアップするのに役立つことを願っています。ローカルホスト/ローカルネットワークで使用されるため、暗号化(DNSoverTLSまたはDNSoverHTTPS)は必要ありません。 DoTリゾルバーまたはDoHリゾルバーの設定については、次のチュートリアルをお読みください。
- UbuntuでNginxを使用してDNSoverTLSリゾルバーを簡単に設定する方法
- DNSdistを使用してUbuntuでDNSoverHTTPS(DoH)リゾルバーを設定する
いつものように、この投稿が役に立った場合は、無料のニュースレターを購読して、より多くのヒントやコツを入手してください。気をつけて🙂