このチュートリアルでは、広く使用されている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
によってインストールされます パッケージと別の重要なバイナリがあります:rndc
、bind9utils
によってインストールされるリモート名デーモンコントローラー パッケージ。 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サーバーがオープンリゾルバーであるかどうかをテストします。