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

BIND9を使用してUbuntu20.04でローカルDNSリゾルバーを設定する

このチュートリアルでは、広く使用されているBIND9 DNSソフトウェアを使用して、Ubuntu20.04でローカルDNSリゾルバーを設定する方法を示します。 DNSリゾルバーは多くの名前で知られており、その一部を以下に示します。それらはすべて同じものを指します。

  • フルリゾルバー(スタブリゾルバーとは対照的)
  • DNSリカーサー
  • 再帰DNSサーバー
  • 再帰的リゾルバー

また、DNSサーバーはネームサーバーとも呼ばれることに注意してください。 DNSリゾルバーの例は8.8.8.8(Googleパブリック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リゾルバーを実行することもできます。

Webサイトを所有していて、ドメインレジストラのDNSサーバーを使用する代わりに、独自のDNSサーバーでドメイン名の名前解決を処理する場合は、DNSリゾルバーとは異なる権限のあるDNSサーバーを設定する必要があります。 BINDは、権限のあるDNSサーバーとDNSリゾルバーとして同時に機能できますが、異なるボックスで2つの役割を分離することをお勧めします

このチュートリアルでは、ローカルDNSリゾルバーを設定する方法を示します。ローカルホスト/ローカルネットワークで使用されるため、暗号化(DNSoverTLSまたはDNSoverHTTPS)は必要ありません。 DoTリゾルバーまたはDoHリゾルバーの設定については、今後の記事で説明します。

ヒントLocal 自宅のコンピューターを意味するものではありません。むしろ、DNSリゾルバーがDNSクライアントと同じボックスで実行されることを意味します。自宅のコンピューターにBINDDNSリゾルバーをインストールできます。自宅のコンピューターのローカルです。 BIND DNSリゾルバーはクラウドサーバーにインストールでき、クラウドサーバーに対してローカルです。

BIND9を使用してUbuntu20.04でローカルDNSリゾルバーを設定する

BIND(Berkeley Internet Name Domain)は、安定性と高品質により、Unix/Linuxで広く使用されているオープンソースのDNSサーバーソフトウェアです。もともとはカリフォルニア大学バークレー校によって開発されましたが、1994年に、その開発はInternet Systems Consortium、Inc(ISC)に移されました。

次のコマンドを実行して、デフォルトのリポジトリからUbuntu20.04にBIND9をインストールします。 BIND 9は現在のバージョンであり、BIND10はデッドプロジェクトです。

sudo apt update
sudo apt install bind9 bind9utils bind9-dnsutils bind9-doc bind9-host

バージョンを確認してください。

named -v

サンプル出力:

BIND 9.16.1-Ubuntu (Stable Release) <id:d497c32>

バージョン番号とビルドオプションを確認するには、

を実行します
named -V

デフォルトでは、BINDはインストール後に自動的に開始されます。ステータスは次のように確認してください:

systemctl status named

実行されていない場合は、次のコマンドで開始します:

sudo systemctl start named

起動時に自動起動を有効にします:

sudo systemctl enable named

BINDサーバーはbindとして実行されます 次のコマンドを実行するとわかるように、インストール中に作成され、TCPおよびUDPポート53でリッスンするuser:

sudo netstat -lnptu | grep named

通常、DNSクエリはUDPポート53に送信されます。TCPポート53は、512バイトを超える応答サイズ用です。

BINDデーモンは名前付きと呼ばれます 。 (デーモンは、バックグラウンドで実行されるソフトウェアの一部です。)named バイナリはbind9によってインストールされます パッケージと別の重要なバイナリがあります:rndcbind9utilsによってインストールされるリモート名デーモンコントローラー パッケージ。 rndc バイナリは、BINDデーモンの他の側面をリロード/停止および制御するために使用されます。通信はTCPポート953を介して行われます。

たとえば、BINDネームサーバーのステータスを確認できます。

sudo rndc status

ローカルDNSリゾルバーの構成

/etc/bind/ BINDの構成を含むディレクトリです。

  • named.conf :他の3つのファイルの構成を含むプライマリ構成ファイル。
  • db.127 :localhostIPv4逆マッピングゾーンファイル。
  • db.local :ローカルホスト転送IPv4およびIPv6マッピングゾーンファイル。
  • db.empty :空のゾーンファイル

Ubuntu 20.04のbind9パッケージには、db.rootは付属していません。 ファイル、/usr/share/dns/root.hintsにあるルートヒントファイルを使用するようになりました 。 ルートヒント ファイルは、ルートDNSサーバーを照会するためにDNSリゾルバーによって使用されます。 a.root-servers.netからのルートDNSサーバーの13のグループがあります m.root-servers.netへ 。

箱から出して、UbuntuのBIND9サーバーはローカルホストとローカルネットワーククライアントにのみ再帰サービスを提供します。外部クエリは拒否されます。したがって、構成ファイルを編集する必要はありません。 BIND 9の構成に慣れるために、とにかく再帰サービスを有効にする方法を説明します。

メインのBIND構成ファイル/etc/bind/named.conf 他の3つのファイルから設定を取得します。

  • /etc/bind/named.conf.options
  • /etc/bind/named.conf.local
  • /etc/bind/named.conf.default-zones

再帰サービスを有効にするには、最初のファイルを編集します。

sudo nano /etc/bind/named.conf.options

options 句、次の行を追加します。 allow-recursionのIPアドレスを置き換えます 独自のローカルネットワークアドレスを使用したステートメント。

 // hide version number from clients for security reasons.
 version "not currently available";

 // optional - BIND default behavior is recursion
 recursion yes;

 // provide recursion service to trusted clients only
 allow-recursion { 127.0.0.1; 192.168.0.0/24; 10.10.10.0/24; };

 // enable the query log
 querylog yes;

ファイルを保存して閉じます。次に、構成ファイルの構文をテストします。

sudo named-checkconf

テストが成功した場合(サイレント出力で示されます)、BIND9を再起動します。

sudo systemctl restart named

BINDサーバーでUFWファイアウォールを実行している場合は、ポート53を開いて、LANクライアントがDNSクエリを送信できるようにする必要があります。

sudo ufw allow in from 192.168.0.0/24 to any port 53

これにより、TCPおよびUDPポート53がプライベートネットワーク192.168.0.0/24に開かれます。次に、同じLAN内の別のコンピューターから、次のコマンドを実行してgoogle.comのAレコードを照会できます。 192.168.0.102をBINDリゾルバーのIPアドレスに置き換えます。

dig A google.com @192.168.0.102

次に、BINDリゾルバーで、次のコマンドを使用してクエリログを確認します。

sudo journalctl -eu named

これにより、bind9サービスユニットの最新のログメッセージが表示されます。ログに次の行が見つかりました。これは、google.comのAレコードに対するDNSクエリが192.168.0.103のポート57806から受信されたことを示しています。

named[1162]: client @0x7f4d2406f0f0 192.168.0.103#57806 (google.com): query: google.com IN A +E(0)K (192.168.0.102)

Ubuntu20.04サーバーでのデフォルトのDNSリゾルバーの設定

Systemd-resolvedは、Ubuntu20.04でスタブリゾルバーを提供します。この記事の冒頭で述べたように、スタブリゾルバーはエンドユーザーのコンピューター上の小さなDNSクライアントであり、FirefoxなどのアプリケーションからDNS要求を受信し、要求を再帰的リゾルバーに転送します。

デフォルトの再帰的リゾルバーは、このコマンドで確認できます。

systemd-resolve --status

ヒント:上記のコマンドがすぐに終了しない場合は、Qキーを押して終了させることができます。

ご覧のとおり、BINDはデフォルトではありません。 BINDサーバーで次のコマンドを実行する場合

dig A facebook.com

このDNSクエリはBINDログに見つかりません。代わりに、BINDを使用するようにdigに明示的に指示する必要があります。

dig A facebook.com @127.0.0.1
を掘る

BINDをデフォルトのリゾルバーとして設定するには、systemdで解決された構成ファイルを開きます。

sudo nano /etc/systemd/resolved.conf

[Resolve]で セクションに、次の行を追加します。これにより、サーバーのグローバルDNSサーバーが設定されます。

DNS=127.0.0.1

ファイルを保存して閉じます。次に、systemd-resolvedサービスを再起動します。

sudo systemctl restart systemd-resolved

次に、次のコマンドを実行して、デフォルトのDNSリゾルバーを確認します。

systemd-resolve --status

ここで、127.0.0.1を指定せずにDNSクエリを実行します 。

dig A facebook.com

BINDログにDNSクエリが表示されます。これは、BINDがデフォルトの再帰リゾルバーになったことを意味します。 BINDログにクエリが表示されない場合は、リンクごとのDNSサーバーを構成する必要がある可能性があります。

Ubuntu20.04でリンクごとのDNSサーバーを構成する

リンクごとのDNSサーバーを構成することもできます。これにより、グローバルDNSサーバーが上書きされます。リンクごとのDNSサーバーを構成する方法は2つあります。

  • systemd経由-解決済み
  • ネットプラン経由

systemd-解決済み

/etc/systemd/network/の下にファイルを一覧表示します ディレクトリ。

ls /etc/systemd/network/

サンプル出力:

05-eth0.network  99-default.link

ご覧のとおり、2つのリンク構成ファイルがあります。 05-eth0.network ファイルはメインのネットワークインターフェイス用なので、このファイルを編集します。

sudo nano /etc/systemd/network/05-eth0.network

ファイル名が異なる場合があります。このディレクトリの下にファイルがない場合、リンクごとのDNS構成はsystemd-resolvedによって制御されません。 。

デフォルトのDNSおよびドメインエントリをコメントアウトし、独自のDNSエントリを追加します。

DNS=127.0.0.1

ファイルを保存して閉じます。次に、systemd-resolvedを再起動します およびsystemd-networkd サービス。

sudo systemctl restart systemd-resolved systemd-networkd

ネットプラン

一部のUbuntuサーバーは、netplanを使用してリンクごとのネットワークを構成している可能性があります。この場合、.yamlでDNSサーバーを構成する必要があります /etc/netplan/の下のファイル ディレクトリ。このディレクトリ内のファイルを一覧表示します。

ls /etc/netplan/

サンプル出力:

01-netcfg.yaml

だから私はこのファイルを編集します。

sudo nano /etc/netplan/01-netcfg.yaml

nameserversでDNSサーバーアドレスを設定します セクション。

      nameservers:
        search: [ invalid ]
        addresses:
                - 127.0.0.1

以下のように複数のDNSリゾルバーを指定できます。これにより、DNS障害の可能性を減らすことができます。

      nameservers:
        search: [ invalid ]
        addresses:
                - 127.0.0.1
                - 8.8.8.8
                - 1.1.1.1

ファイルを保存して閉じます。次に、変更を適用します。

sudo netplan apply

注: 次のエラーメッセージが表示された場合、netplanは構成ファイルを処理できません。

Invalid YAML at /etc/netplan/01-netcfg.yaml  inconsistent indentation

一貫性のないインデントを修正し、sudo netplan applyを実行する必要があります もう一度コマンドします。

トラブルシューティング

/etc/resolv.confの内容を確認してください 。

cat /etc/resolv.conf

ご覧のとおり、127.0.0.1(BIND)がデフォルトのDNSリゾルバーです。別の値が表示された場合、それはBINDがまだデフォルトのDNSリゾルバーではないことを意味します。 resolveconfユーティリティを使用して、BINDをデフォルトのリゾルバとして設定できます。

resolvconfをインストールします パッケージ

sudo apt install resolvconf

次に、named-resolvconfを開始します サービス。

sudo systemctl start named-resolvconf.service

起動時に自動起動を有効にします。

sudo systemctl enable named-resolvconf.service

次に、/etc/resolv.confを確認します 再度ファイルします。 BINDは、UbuntuサーバーのデフォルトのDNSリゾルバーになります。

cat /etc/resolv.conf

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

このファイルを手動で作成して読み取り専用にして、同じサーバー上の他のアプリケーションによる上書きを防ぐこともできます。

sudo rm /etc/resolv.conf

echo "nameserver 127.0.0.1" | sudo tee /etc/resolv.conf

sudo chmod 444 /etc/resolv.conf

systemd-resolvedが実行されていません

systemd-resolve --statusを実行した後、次のエラーが表示された場合 コマンド、

Failed to get global data: Unit dbus-org.freedesktop.resolve1.service not found.

systemd-resolvedの可能性があります 実行されていません。開始:

sudo systemctl status systemd-resolved

自動起動を有効にします。

sudo systemctl enable systemd-resolved

クライアントコンピューターでのデフォルトのDNSリゾルバーの設定

Ubuntuデスクトップでは、上記の手順に従ってデフォルトのDNSリゾルバーを設定できますが、127.0.0.1をBINDサーバーのIPアドレスに置き換えることを忘れないでください。 MacOSおよびWindowsでデフォルトのDNSリゾルバを設定する手順は、インターネットで見つけることができます。

BINDでIPv6を無効にする方法

ネットワークでIPv6を使用しない場合は、BINDでIPv6をオフにすることをお勧めします。オフにしないと、以下のようにBINDログでIPv6に関する多くのエラーが発生します。

network unreachable resolving 'mirrors.fedoraproject.org/A/IN': 2001:4178:2:1269:dead:beef:cafe:fed5#53
network unreachable resolving 'mirrors.fedoraproject.org/AAAA/IN': 2001:4178:2:1269:dead:beef:cafe:fed5#53
network unreachable resolving 'mirrors.fedoraproject.org/A/IN': 2610:28:3090:3001:dead:beef:cafe:fed5#53
network unreachable resolving 'mirrors.fedoraproject.org/AAAA/IN': 2610:28:3090:3001:dead:beef:cafe:fed5#53

UbuntuのBINDでIPv6を無効にするには、 / etc / default / namedを開くだけです。 ファイル

sudo nano /etc/default/named

-4を追加します オプションに。

OPTIONS="-u bind -4"

ファイルを保存して閉じます。次に、BINDを再起動すると、完了です。

sudo systemctl restart named

BIND SERVFAIL

BINDリゾルバーがDNSクエリに応答できない場合(SERVFAIL)、BINDログに次の行が表示されます。

dnssec: warning: managed-keys-zone: Unable to fetch DNSKEY set '.': timed out

サーバーにIPv6接続が機能していないことが原因である可能性があります。これは私のサーバーの1つに起こりました。 IPv6接続は通常どおり機能していると思いましたが、知らなかった理由で突然切断されました。 BINDでIPv6を無効にすると、DNS解決が再び機能します。

名前付き自動再起動

何らかの理由で名前付きプロセスが強制終了された場合は、次のコマンドを実行して再起動する必要があります。

sudo systemctl restart named

このコマンドを手動で入力する代わりに、named.serviceを編集することで、Namedを自動的に再起動させることができます。 systemdサービスユニット。デフォルトのsystemdサービス構成を上書きするために、別のディレクトリを作成します。

sudo mkdir -p /etc/systemd/system/named.service.d/

次に、このディレクトリの下にファイルを作成します。

sudo nano /etc/systemd/system/named.service.d/restart.conf

ファイルに次の行を追加します。これにより、障害が検出されてから5秒後にNamedが自動的に再起動します。

[Service]
Restart=always
RestartSec=5s

ファイルを保存して閉じます。次に、systemdをリロードします。

sudo systemctl daemon-reload

これが機能するかどうかを確認するには、Named with:

を強制終了します。
sudo pkill named

次に、名前付きステータスを確認します。 Namedが自動的に再起動されます。

systemctl status named

BIND max-cache-size

BINDは、DNS結果をサーバーにキャッシュして、クライアントのDNSルックアップを高速化できます。 BINDは、専用のDNSリゾルバーを実行していること、つまり、同じホストで他のWebサービスが実行されていないことを前提としているため、デフォルトのキャッシュサイズ(max-cache-sizeで定義) )は、最高のパフォーマンスを実現するために、RAM全体の90%に設定されています。 BINDログ(sudo journalctl -eu named)に次のような行が表示されます。 )BINDが開始したとき。

none:100: 'max-cache-size 90%' - setting to 7165MB (out of 7961MB)

BINDはRAMの90%をすぐには使用しないことに注意してください。 DNSリクエストが少ない場合、キャッシュするDNS結果が少ないため、BINDは少量のRAMしか使用しません。 DNSリクエストがたくさんある場合は、DNSキャッシュを保存するために大量のRAMを使用します。

RAMが制限されている場合は、BINDがRAMの90%をキャッシュに使用したくない場合があります。 BIND構成ファイル/etc/bind/named.conf.optionsを編集します 。

sudo nano /etc/bind/named.conf.options

optionsに次のディレクティブを追加します 句。 50%をお好みの値に変更します。

max-cache-size 50%;

変更を有効にするには、BINDを再起動します。

sudo systemctl restart named

:BINDを再起動すると、キャッシュ全体がフラッシュされます。

サーバーに到達できませんでした

クライアントコンピューターでdigコマンドを使用したときに次のエラーが表示された場合

;; connection timed out; no servers could be reached

それかもしれません

  • ファイアウォールルールが間違っています。ファイアウォールログを確認してください。
  • BINDリゾルバーが実行されていません。
  • BINDはネットワークインターフェースをリッスンしていません。
  • DNSクライアントからDNSリゾルバーにpingを実行できますか?

結論

このチュートリアルが、BIND9を使用してUbuntu20.04でローカルDNSリゾルバーをセットアップするのに役立つことを願っています。いつものように、この投稿が役に立った場合は、無料のニュースレターを購読して、より多くのヒントやコツを入手してください。気をつけて🙂


Ubuntu
  1. Ubuntu20.04でDnsmasqを使用してローカルDNSリゾルバーをセットアップする方法

  2. ubuntuでarp-scanを使用してローカルネットワークをスキャンします

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

  1. Ubuntu18.04でUFWを使用してファイアウォールを設定する方法

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

  3. Ubuntu16.04でUFWを使用してファイアウォールを設定する方法

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

  2. Ubuntu20.04でUFWを使用してファイアウォールを設定する方法

  3. Ubuntu 18.04 /Ubuntu16.04でDNSサーバーを構成する方法