GNU/Linux >> Linux の 問題 >  >> Ubuntu

Ubuntu20.04サーバーでUnboundDNSリゾルバーを設定する

このチュートリアルでは、 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)リゾルバーを設定する

いつものように、この投稿が役に立った場合は、無料のニュースレターを購読して、より多くのヒントやコツを入手してください。気をつけて🙂


Ubuntu
  1. Ubuntu22.04でWireGuardを設定する方法

  2. Ubuntu22.04にUnboundDNSリゾルバーをインストールする方法

  3. Ubuntu20.04でUnboundDNSリゾルバーを設定する方法

  1. Ubuntu18.04にSquidプロキシサーバーをセットアップしてインストールする方法

  2. Ubuntu20.04でDNSネームサーバーを設定する方法

  3. Ubuntu16.04でTeamSpeakサーバーをセットアップする方法

  1. Ubuntu18.04でOpenVPNサーバーをセットアップする方法

  2. Ubuntu18.04でDNSネームサーバーを設定する方法

  3. Ubuntu20.04でNginxサーバーブロックを設定する方法