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

Ubuntu 18.04、16.04でBIND権限のあるDNSサーバーをセットアップする

このチュートリアルでは、広く使用されているBIND9ソフトウェアを使用してUbuntu18.04/16.04で独自の信頼できるネームサーバーをセットアップして実行する方法を示します。

:このチュートリアルでは、コマンドラインメソッドを示します。 Web GUIからDNSレコードを編集する場合は、無料のオープンソースサーバーコントロールパネルであるWebminを使用して信頼できるDNSサーバーを設定することをお勧めします。

権限のあるDNSサーバーとは何ですか?

ドメイン名を所有していて、ドメイン登録事業者のDNSサーバーを使用する代わりに、独自のDNSサーバーでドメイン名の名前解決を処理する場合は、権限のあるDNSサーバーを設定する必要があります。

権限のあるDNSサーバーは、ドメイン名の所有者がDNSレコードを保存するために使用します。これは、PC、スマートフォン、またはタブレットのエンドユーザーに代わってDNSレコードを照会するDNSリゾルバー(8.8.8.8や1.1.1.1など)に信頼できる回答を提供します。

BINDについて

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

BINDは、ゾーンとDNSリゾルバーの権限のあるDNSサーバーとして同時に機能できます。 DNSリゾルバーは、ローカルクライアントの再帰的なルックアップを実行するため、再帰的なネームサーバーと呼ぶこともできます。ただし、同時に2つの役割を担うことは有利ではありません。 2つの異なるマシンで2つの役割を分離することをお勧めします。

前回の記事では、Ubuntu 18.04/16.04でローカルDNSリゾルバーを設定する手順について説明しました。このチュートリアルでは、Ubuntu 18.04 / 16.04でBIND9を、再帰が無効になっている権限のある専用DNSサーバーとして設定する方法を説明します。

前提条件

このチュートリアルに従うには、すでにドメイン名を購入している必要があります。ドメイン名をNameCheapに登録したのは、価格が安く、whoisのプライバシー保護が一生無料になるためです。

また、2台のサーバーが必要です。 1台のサーバーはマスターDNSサーバー用で、もう1台はスレーブDNSサーバー用です。理想的には、2つのサーバーは異なる物理的な場所にある必要があります。一方のDNSサーバーがオフラインの場合でも、もう一方のDNSサーバーはドメイン名のDNSクエリに応答できます。

各サーバーに必要なRAMは512MBのみで、ここに私が推奨するホスティングプロバイダーがあります。私はそれらすべてを使用しました。

  • Vultr:月額$2.5から。クレジットカードが必要です。私の紹介リンクからVultrにアカウントを作成して、50ドルの無料クレジットを取得できます。
  • DigitalOcean:月額5ドルから。クレジットカードは必要ありません。あなたはPaypalを使うことができます。私の紹介リンクからDigitalOceanにアカウントを作成して、50ドルの無料クレジットを取得できます。

2台のサーバーを購入したら、それらにUbuntuをインストールし、以下の手順に従ってください。

BIND9を使用してUbuntu18.04/16.04に権限のあるDNSサーバーをセットアップする

このセクションのコマンドは、両方のサーバーで実行する必要があります。

SSH経由で2つのサーバーにログインし、次のコマンドを実行して、デフォルトのリポジトリからUbuntu 18.04/16.04にBIND9をインストールします。 BIND 9は現在のバージョンであり、BIND10はデッドプロジェクトです。

sudo apt update
sudo apt install bind9 bind9utils bind9-doc

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

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

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

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

sudo rndc status

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

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

箱から出して、UbuntuのBIND9サーバーはローカルホストとローカルネットワーククライアントに再帰サービスを提供します。権限のあるDNSサーバーを設定しているため、再帰を無効にする必要があります。 /etc/bind/named.conf.optionsを編集します ファイル。

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

options {...};に次の行を追加します 条項。

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

 // disable recursion on authoritative DNS server.
 recursion no;

 // enable the query log
 querylog yes;

 // disallow zone transfer
 allow-transfer { none; };

技術的には、recursion no;を追加するだけで済みます。 再帰を無効にしますが、他の3つのディレクティブを追加することをお勧めします。ファイルを保存して閉じます。次に、BINDを再起動します。

sudo systemctl restart bind9

マスターDNSサーバー構成

2つのサーバーのいずれかをマスターDNSサーバーとして選択します。 ns1.example.comという名前を付けます 。

マスターDNSサーバーは、ゾーンファイルのマスターコピーを保持します。 DNSレコードの変更はこのサーバーで行われます。ドメインは1つ以上のDNSゾーンを持つことができます。各DNSゾーンには、そのゾーン内のすべてのDNSレコードを含むゾーンファイルがあります。簡単にするために、この記事では、単一のDNSゾーンを使用してドメイン名のすべてのDNSレコードを管理することを前提としています。

/etc/bind/named.conf.default-zones ファイルはルートゾーンとローカルホストゾーンを定義します。ドメイン名のゾーンを追加するには、/etc/bind/named.conf.localを編集します ファイル。

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

このファイルに次の行を追加します。 example.comを独自のドメイン名に置き換えます。 12.34.56.78をスレーブDNSサーバーのIPアドレスに置き換えます。

zone "example.com" {
      type master;
      file "/etc/bind/db.example.com";
      allow-query { any; };
      allow-transfer { 12.34.56.78; };
};

上記の構成では、zoneを使用して新しいゾーンを作成しました 節であり、これがマスターゾーンであることを指定しました。ゾーンファイルは/etc/bind/db.example.comです。 、ここでDNSレコードを追加します。ゾーン転送は、スレーブDNSサーバーに対してのみ許可されます。ファイルを保存して閉じます。

ゾーンファイルを最初から作成する代わりに、ゾーンテンプレートファイルを使用できます。 db.emptyのコンテンツをコピーします 新しいファイルに。

sudo cp /etc/bind/db.empty /etc/bind/db.example.com

ゾーンファイルには、次の3種類のエントリを含めることができます。

  • コメント :セミコロン(;)で開始
  • ディレクティブ :ドル記号($)で始まります
  • リソースレコード :別名DNSレコード

ゾーンファイルは通常、次の種類のDNSレコードで構成されます。

  • SOA(Start of Authority)レコード :ゾーンの主要な特性を定義します。これはゾーンファイルの最初のDNSレコードであり、必須です。
  • NS(ネームサーバー)レコード :DNSレコードを保存し、ドメイン名のDNSクエリに応答するために使用されるサーバーを指定します。ゾーンファイルには少なくとも2つのNSレコードが必要です。
  • MX(メールエクスチェンジャー)レコード :ドメイン名の電子メール配信を担当するホストを指定します。
  • (住所)レコード :DNS名をIPv4アドレスに変換します。
  • AAAA(Quad A)レコード :DNS名をIPv6アドレスに変換します。
  • CNAMEレコード(正規名) :DNS名のエイリアスを作成するために使用されます。
  • TXTレコード :SPF、DKIM、DMARCなど

それでは、ゾーンファイルを編集しましょう。

sudo nano /etc/bind/db.example.com

デフォルトでは、次のようになります。

代わりにこれに変更できます。

どこ

  • $TTL ディレクティブは、デフォルトの存続時間を定義します ゾーンの値。これは、DNSレコードをDNSリゾルバーにキャッシュできる時間です。このディレクティブは必須です。時間は秒単位で指定されます。
  • $ORIGIN ディレクティブはベースドメインを定義します。
  • ドメイン名は、ルートドメインであるドット(。)で終わる必要があります。ドメイン名がドットで終わる場合、それは完全修飾ドメイン名(FQDN)です。
  • @記号はベースドメインを参照します。
  • IN DNSクラスです。インターネットの略です。他のDNSクラスも存在しますが、使用されることはめったにありません。

ゾーンファイルの最初のレコードは、SOA(Start of Authority)レコードです。このレコードには、次の情報が含まれています。

  • マスターDNSサーバー
  • ゾーン管理者のメールアドレス 。 RFC 2142は、メールアドレスを推奨しています[メール保護] 。ゾーンファイルでは、このメールアドレスは次の形式になります: hostmaster.example.com @記号はゾーンファイルで特別な意味を持つためです。
  • ゾーンのシリアル番号 。シリアル番号は、スレーブDNSサーバーによるゾーンの変更を追跡する方法です。慣例により、シリアル番号は日付形式を取ります:yyyymmddss 、ここで、yyyyは4桁の年番号、mmは月、ddは日、ssは日のシーケンス番号です。ゾーンファイルに変更を加えた場合は、シリアル番号を更新する必要があります。
  • 値を更新 。リフレッシュ値に達すると、スレーブDNSサーバーはマスターDNSサーバーからSOAレコードを読み取ろうとします。シリアル番号が高くなると、ゾーン転送が開始されます。
  • 再試行値 。スレーブDNSサーバーがマスターDNSサーバーに接続できない場合の再試行間隔を秒単位で定義します。
  • 有効期限 :スレーブDNSサーバーがこの時間マスターDNSサーバーとの接続に失敗している場合、スレーブはこのゾーンのDNSクエリへの応答を停止します。
  • ネガティブキャッシュTTL :存在しないDNS名(NXDOMAIN)のDNS応答の存続時間の値を定義します。

TXTレコードは通常、二重引用符で囲まれています。 DKIMレコードを追加する場合は、値を括弧で囲む必要もあります。

ファイルを保存して閉じます。次に、次のコマンドを実行して、メイン構成ファイルに構文エラーがあるかどうかを確認します。サイレント出力は、エラーが見つからないことを示します。

sudo named-checkconf

次に、ゾーンファイルの構文を確認します。

sudo named-checkzone example.com /etc/bind/db.example.com

ゾーンファイルに構文エラーがある場合は、修正する必要があります。修正しないと、このゾーンは読み込まれません。次のメッセージは、構文エラーがないことを示しています。

zone example.com/IN: loaded serial 2019011503
OK

次に、BIND9を再起動します。

sudo systemctl restart bind9

Uncomplicate Firewall(UFW)を使用している場合は、TCPおよびUDPポート53を開きます。

sudo ufw allow 53/tcp

sudo ufw allow 53/udp

iptablesファイアウォールを直接使用している場合は、次のコマンドを実行します。

sudo iptables -A INPUT -p tcp --dport 53 -j ACCEPT

sudo iptables -A INPUT -p udp --dprot 53 -j ACCEPT

スレーブDNSサーバーの構成

ここで、もう一方のサーバーをスレーブDNSサーバーとして使用します。このサーバーの名前はns2.example.comになります。 。

まず、named.conf.localを編集します ファイル。

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

以下のようなゾーンを追加します。 12.34.56.78をマスターDNSサーバーのIPアドレスに置き換えます。

zone "example.com" {
        type slave;
        file "db.example.com";
        allow-query { any; };
        masters { 12.34.56.78; };
};

上記の構成では、これがexample.comのスレーブDNSサーバーであることを指定しました ゾーンであり、信頼できるIPアドレスからのゾーン転送のみを受け入れます。

ファイルを保存して閉じます。次に、次のコマンドを実行して、メイン構成ファイルに構文エラーがあるかどうかを確認します。

sudo named-checkconf

エラーが見つからない場合は、BIND9を再起動します。

sudo systemctl restart bind9

スレーブDNSサーバー上のゾーンファイルは、マスターDNSサーバーからスレーブDNSサーバーへのDNSレコードの変更を同期するために使用されるゾーン転送からロードされます。 BIND9が再起動すると、ゾーン転送がすぐに開始されます。次のコマンドでBIND9ログを確認します。

sudo journalctl -eu bind9

ゾーン転送が成功したことを示す以下のようなメッセージが表示されます。

named[31518]: transfer of 'example.com/IN' from 12.34.56.78#53: Transfer completed: 1 messages, 16 records, 886 bytes, 0.004 secs (221500 bytes/sec)

ゾーンファイルは/var/cache/bind/db.example.comとして保存されます 。

Uncomplicate Firewall(UFW)を使用している場合は、TCPおよびUDPポート53を開きます。

sudo ufw allow 53/tcp

sudo ufw allow 53/udp

iptablesファイアウォールを直接使用している場合は、次のコマンドを実行します。

sudo iptables -A INPUT -p tcp --dport 53 -j ACCEPT

sudo iptables -A INPUT -p udp --dport 53 -j ACCEPT

ゾーン転送の詳細

SOAレコードの更新時間に達すると、スレーブDNSサーバーはマスターに再度接続し、マスターのシリアル番号がスレーブのシリアル番号よりも大きい場合、ゾーン転送が開始されます。ゾーン転送には2つのタイプがあります:

  • フルゾーン転送(AXFR):ゾーンファイルのフルコピーが転送されます。
  • インクリメンタルゾーン転送(IXFR):変更されたDNSレコードのみが転送されます。

どちらのタイプのゾーン転送もTCPポート53を使用します。デフォルトでは、スレーブDNSサーバーのBINDは増分ゾーン転送を要求し、マスターDNSサーバーのBINDは、ゾーンが動的である場合にのみ増分ゾーン転送を許可します。

ゾーン転送間隔は、DNSレコード変更の伝播速度の主要な要因です。スレーブDNSサーバーが接続するのを待つ代わりに、BINDマスターは、ゾーンに変更が加えられたときにスレーブに通知します。これにより、ゾーンの変更をインターネットに伝達する時間を大幅に短縮できます。

逆引きゾーン

逆引きゾーンには、IPアドレスをDNS名にマップするPTRレコードが含まれています。 DNSAレコードに相当します。多くの場合、メールサーバーがスパムフィルターを通過するには、PTRレコードが必要です。このレコードはドメインに属していません。ホスティングプロバイダーのコントロールパネルでPTRレコードを作成するか、ISPに問い合わせる必要があるため、BINDでのリバースゾーンの作成については説明しません。

NSレコードの変更とGlueレコードの作成

次に、ドメインレジストラのウェブサイトにアクセスして、ドメインのNSレコードを変更する必要があります。これにより、インターネットは、現在、独自のDNSサーバーを使用していることを認識します。通常、NSレコードではns1.example.comのようなホスト名を使用します およびns2.example.com

name server 1:     ns1.example.com
name server 2:     ns2.example.com

ドメイン名をお持ちの場合example.com 権限のあるDNSサーバーのサブドメインを使用します(ns1.example.com およびns2.example.com )、インターネットがDNSサーバーのIPアドレスを認識できるように、ドメインレジストラでグルーレコードを作成する必要もあります。グルーレコードは、ns1.example.comのAレコードです。 およびns2.example.com

ns1.example.com        IP-address-of-master-server
ns2.example.com        IP-address-of-slave-server

上記の情報は、Extensible Provisioning Protocol(EPP)を介してTLD DNSサーバーを実行するレジストリオペレーターに送信されるため、TLD DNSサーバーは、ドメイン名の権限のあるDNSサーバーのホスト名とIPアドレスを認識します。使用するドメインレジストラによっては、NSレコードが即座に伝播される場合と、伝播に最大24時間かかる場合があります。 https://dnsmap.ioにアクセスして、新しいNSレコードがアクティブかどうかを確認できます。

NameCheapでこれを行う方法を紹介します 。

NameCheapでドメイン名を購入した場合は、NameCheapアカウントにログインします。 Domain listを選択します 左側のサイドバーのメニューをクリックし、[管理]をクリックします 右端のボタン。

高度なDNSを選択します 。

ページの一番下までスクロールすると、パーソナルDNSサーバーが見つかります。 セクション。 NameServerの追加をクリックします 独自のネームサーバーを追加するためのボタン:ns1.example.com およびns2.example.com 。ネームサーバーのIPアドレスを入力する必要があります。

2つのネームサーバーを追加したら、検索ボタンをクリックして、それらが正常に追加されたかどうかを確認します。その場合、接着剤の記録はこのページの下部に表示されます。

次に、Domainをクリックします タブをクリックし、カスタムDNSサーバーを使用します。

使用するドメインレジストラによっては、NSレコードが即座に伝播される場合と、伝播に最大24時間かかる場合があります。 https://dnsmap.ioにアクセスして、新しいNSレコードがアクティブかどうかを確認できます。

NSレコードとグルーレコードがインターネットに伝播された後、DNSサーバーはドメイン名のDNSクエリに応答します。クエリログは次のコマンドで確認できます:

sudo journalctl -eu bind9

digを使用することもできます ドメイン名のNSレコードを確認するユーティリティ。

dig NS example.com

NSレコードとglueレコードがインターネットに伝播されている場合は、回答セクションにネームサーバーが表示されます。 SERVFAILが表示された場合 エラー、おそらくネームサーバーでUDPポート53を開いていないことが原因です。

知っておくべきこと

  • 用語master DNS server このサーバーがゾーンファイルのマスターコピーを保存することを意味するだけです。 DNS解決に関しては、これ以上の優先順位はありません。
  • ゾーンファイルに変更を加えるときは、常にSOAのシリアル番号を更新してください。

BINDゾーンファイルでのワイルドカードの使用

すべてのサブドメインを同じIPアドレスにポイントする場合は、ワイルドカードを使用してそれを実現できます。たとえば、次の行は、すべてのサブドメインが1.2.3.4IPアドレスを指すようにします。

*.your-domain.com  IN   A   1.2.3.4

リゾルバーの有効化

BINDは権限のあるDNSサーバーとして機能できます ゾーンとDNSリゾルバーの場合 同時に。 2つの異なるホストで2つの役割を分離することをお勧めします。この記事では、BINDでリゾルバーを無効にしました。本当にリゾルバーを有効にする場合は、以下の手順に従ってください。

BIND構成ファイルを編集します。

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

次の行を見つけます。

 // disable recursion on authoritative DNS server.
 recursion no;

それらを次のように変更します。これにより、信頼できるIPアドレスのみがDNSリゾルバーに再帰クエリを送信でき、サーバーはオープンリゾルバーになりません。

 // allow recursion for trusted clients only.
 recursion yes;
 allow-query { localhost; 12.34.56.78; };

12.34.56.78を独自のIPアドレスに置き換えます。ファイルを保存して閉じます。 /etc/bind/named.conf.localでゾーン定義を確認してください ファイルには次のオプションがあるため、インターネットはゾーン内のDNSレコードを照会できます。

allow-query { any; };

次に、BINDを再起動します。

sudo systemctl restart bind9

https://openresolver.com/にアクセスして、BINDサーバーがオープンリゾルバーであるかどうかをテストします。


Ubuntu
  1. Ubuntu /DebianLAMPサーバーをセットアップする方法

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

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

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

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

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

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

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

  3. Ubuntu / DebianにDNSサーバー(バインド9)をインストールして構成する方法