このチュートリアルでは、広く使用されているBIND9DNSソフトウェアを使用してUbuntu18.04、16.04でローカルDNSリゾルバーを設定する方法を示します。 DNSリゾルバーは多くの名前で知られており、その一部を以下に示します。それらはすべて同じものを指します。
- フルリゾルバー(スタブリゾルバーとは対照的)
- DNSリカーサー
- 再帰DNSサーバー
- 再帰的リゾルバー
また、DNSサーバーはネームサーバーとも呼ばれることに注意してください。 DNSリゾルバーの例は8.8.8.8(GoogleパブリックDNSサーバー)と1.1.1.1(CloudflareパブリックDNSサーバー)です。 PCの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を使用してUbuntu18.04、16.04でローカルDNSリゾルバーを設定する
BIND(Berkeley Internet Name Domain)は、安定性と高品質により、Unix/Linuxで広く使用されているオープンソースのDNSサーバーソフトウェアです。もともとはカリフォルニア大学バークレー校によって開発されましたが、1994年に、その開発はInternet Systems Consortium、Inc(ISC)に移されました。
次のコマンドを実行して、デフォルトのリポジトリからUbuntu 18.04、16.04にBIND9をインストールします。 BIND 9は現在のバージョンであり、BIND10はデッドプロジェクトです。
sudo apt update sudo apt install bind9 bind9utils bind9-doc bind9-host dnsutils
バージョンを確認してください。
named -v
サンプル出力:
BIND 9.11.3-1ubuntu1.3-Ubuntu (Extended Support Version) <id:a375815>
バージョン番号とビルドオプションを確認するには、
を実行しますnamed -V
デフォルトでは、BINDはインストール後に自動的に開始されます。ステータスは次のように確認してください:
systemctl status bind9
実行されていない場合は、次のコマンドで開始します:
sudo systemctl start bind9
起動時に自動起動を有効にします:
sudo systemctl enable bind9
BINDサーバーはbind
として実行されます 次のコマンドを実行するとわかるように、インストール中に作成され、TCPおよびUDPポート53でリッスンするuser:
sudo netstat -lnptu | grep named
通常、DNSクエリはUDPポート53に送信されます。TCPポート53は、512バイトを超える応答サイズ用です。
BINDデーモンは名前付きと呼ばれます 。 (デーモンは、バックグラウンドで実行されるソフトウェアの一部です。)named
バイナリはbind9
によってインストールされます パッケージと別の重要なバイナリがあります:rndc
、bind9utils
によってインストールされるリモート名デーモンコントローラー パッケージ。 rndc
バイナリは、BINDデーモンの他の側面をリロード/停止および制御するために使用されます。通信はTCPポート953を介して行われます。
たとえば、BINDネームサーバーのステータスを確認できます。
sudo rndc status
ローカルDNSリゾルバーの構成
/etc/bind/
BINDの構成を含むディレクトリです。
- named.conf :他の3つのファイルの構成を含むプライマリ構成ファイル。
- db.root :ルートヒント DNSリゾルバーがルートDNSサーバーを照会するために使用するファイル。
a.root-servers.net
からのルートDNSサーバーの13のグループがありますm.root-servers.net
へ 。 - db.127 :localhostIPv4逆マッピングゾーンファイル。
- db.local :ローカルホスト転送IPv4およびIPv6マッピングゾーンファイル。
- db.empty :空のゾーンファイル
箱から出して、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 bind9
BINDサーバーでファイアウォールを実行している場合は、ポート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 bind9
これにより、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)
Ubuntu18.04サーバーでのデフォルトのDNSリゾルバーの設定
Systemd-resolvedは、Ubuntu18.04でスタブリゾルバーを提供します。この記事の冒頭で述べたように、スタブリゾルバーはエンドユーザーのコンピューター上の小さなDNSクライアントであり、FirefoxなどのアプリケーションからDNS要求を受信し、要求を再帰的リゾルバーに転送します。
デフォルトの再帰的リゾルバーは、このコマンドで確認できます。
systemd-resolve --status
ご覧のとおり、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サーバーを構成する必要がある可能性があります。
Ubuntu18.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
ファイルを保存して閉じます。次に、変更を適用します。
sudo netplan apply
注: 次のエラーメッセージが表示された場合、netplanは構成ファイルを処理できません。
Invalid YAML at /etc/netplan/01-netcfg.yaml inconsistent indentation
一貫性のないインデントを修正し、sudo netplan apply
を実行する必要があります もう一度コマンドします。
Ubuntu16.04サーバーでのデフォルトのDNSリゾルバーの設定
Ubuntu16.04はresolvconf
を使用します /etc/resolv.conf
でDNSリゾルバーを管理するプログラム ファイル。 resolvconf
をインストールします パッケージ。
sudo apt install resolvconf
Ubuntu 16.04サーバーでBINDをデフォルトのリゾルバーとして設定するには、/etc/resolvconf/resolv.conf.d/head
を編集する必要があります。 ファイルを作成し、「nameserver 127.0.0.1
」を追加します 」をこのファイルに追加します。これは、次のコマンドを実行することで実行できます。
echo "nameserver 127.0.0.1" | sudo tee -a /etc/resolvconf/resolv.conf.d/head
このファイルで定義されているリゾルバーは、何があっても常に最初のDNSリゾルバーになります。ここでresolvconf
を再起動します サービス。
sudo systemctl restart resolvconf
/etc/resolv.conf
の内容を確認できるようになりました 。
cat /etc/resolv.conf
ご覧のとおり、127.0.0.1がデフォルトのDNSリゾルバーです。
Linodeのような一部のホスティングプロバイダーは、ネットワークヘルパーを使用して/etc/resolv.conf
を自動生成する場合があることに注意してください。 ファイル。デフォルトのDNSリゾルバーを変更するには、ホスティングコントロールパネルでそのネットワークヘルパーを無効にする必要があります。
更新 :後で、Ubuntu16.04のBINDパッケージにSystemdサービスユニットbind9-resolvconf.service
が付属していることに気付きました。 、UbuntuサーバーでデフォルトのDNSリゾルバーを設定するのに役立つため、上記のように手動で設定する必要はありません。デフォルトでは、このサービスは無効になっています。起動して起動時に自動起動を有効にする必要があります。
sudo systemctl start bind9-resolvconf sudo systemctl enable bind9-resolvconf
resolvconf
を確認してください パッケージがインストールされます。 2行のコマンドとBINDが、Ubuntu16.04サーバーのデフォルトのDNSリゾルバーとして設定されます。
クライアントコンピューターでのデフォルトの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 / bind9を開くだけです。 ファイル
sudo nano /etc/default/bind9
オプションに「-4」を追加します。
OPTIONS="-u bind -4"
ファイルを保存して閉じます。次に、BINDを再起動すると、完了です。
sudo systemctl restart bind9
BIND SERVFAIL
BINDリゾルバーがDNSクエリに応答できない場合(SERVFAIL)、BINDログに次の行が表示されます。
dnssec: warning: managed-keys-zone: Unable to fetch DNSKEY set '.': timed out
サーバーにIPv6接続が機能していないことが原因である可能性があります。これは私のサーバーの1つに起こりました。 IPv6接続は通常どおり機能していると思いましたが、知らなかった理由で突然切断されました。 BINDでIPv6を無効にすると、DNS解決が再び機能します。
BIND max-cache-size
BINDは、DNS結果をサーバーにキャッシュして、クライアントのDNSルックアップを高速化できます。 BINDは、専用のDNSリゾルバーを実行していること、つまり、同じホストで他のWebサービスが実行されていないことを前提としているため、デフォルトのキャッシュサイズ(max-cache-size
で定義) )は、最高のパフォーマンスを実現するために、RAM全体の90%に設定されています。 BINDログ(sudo journalctl -eu bind9
)に次のような行が表示されます。 )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 bind9
結論
このチュートリアルが、BIND9を使用してUbuntu 18.04、16.04でローカルDNSリゾルバーをセットアップするのに役立つことを願っています。いつものように、この投稿が役に立った場合は、無料のニュースレターを購読して、その他のヒントやコツを入手してください。気をつけて🙂