NSD チュートリアルが 2024 年に更新されました: ゾーン転送が追加されました!
2020年に、 NSD(ネームサーバーデーモン)を使ってVPSで実行できる権威DNSサーバーを作成する方法に関するチュートリアルを書きました。NSDはリソースをあまり必要とせず、BINDに比べて非常に軽量なので、趣味でDNSサーバーを構築する方に最適です。また、WebSiteTVでビデオチュートリアルも公開しました。
LEBのチュートリアルを作成した際、ゾーン転送にrsyncを使用しました。理由は…正直言って、なぜそうしたのか覚えていません。正しくは、DNSの中核部分であるNSDにゾーン転送を実行させるべきでした。ビデオチュートリアルで修正しました。
2024年版にアップデートされたテキスト形式のチュートリアルをもう一度確認してみましょう。今回は、適切な転送設定でDNSゾーンを設定します。さあ、始めましょう!
ドメインとVPS
ネームサーバーを2つ設定します。Vultrで仮想マシンを2台立ち上げました。どちらもDebian 12です。これらはlowend.vipドメイン用です。
ns1.lowend.vip 149.28.254.206 ns2.lowend.vip 144.202.76.207
まずPorkbunから始めましょう。実は、レジストラはどこにあるのでしょうか?権威ネームサーバーとグルーレコードを設定する必要があります。レジストラによってパネルのインターフェースは異なりますが、どのレジストラでもこれらの設定を変更するためのインターフェースを提供しています。
権威ネームサーバーは、「このドメインの正当なネームサーバー(DNSサーバー)はどこか」という問いに答えます。しかし、ドメインを問い合わせる人は、自分の所在地をどのように把握するのでしょうか?これは鶏が先か卵が先かという問題です。DNSがどこにあるか知りたい場合、どうやってDNSエントリを検索すればいいのでしょうか?この問題を解決するのがグルーレコードです。グルーレコードは、DNSサーバー自体への最初のパンくずの道筋となるのです。
Porkbun では、ドメインのリストに移動し、「詳細」をクリックして、「Glue レコード」を選択します。

次に、「管理」をクリックし、ns1 と ns2 のホスト名と IP を入力しました。

次に、権威ネームサーバーを更新します。「詳細」に戻り、「権威ネームサーバー」をクリックします。

デフォルトではPorkbunのDNSサーバーに設定されています。これを削除し、グルーレコードで定義したDNSサーバーを追加しました。

レジストラでの手続きはこれで完了です。
NSDの設定
VPS で NSD を起動して実行してみましょう。
apt インストール nsd
/etc/nsd をコピー mv nsd.conf nsd.conf.dist
ns1 の nsd.conf は次のとおりです。
サーバ: IPアドレス: 149.28.254.206 非表示バージョン: はい データベース: "/var/lib/nsd/nsd.db" サーバー数: 1 冗長度: 2 鍵: 名前: 「私の秘密」 アルゴリズム: hmac-sha512 秘密: abhnilvmqpVn9FODGFfCyj2gAhU21nQNLXWxLWOxVCw= ゾーン: 名前: lowend.vip ゾーンファイル: /etc/nsd/zones/lowend.vip 通知: 144.202.76.207 マイシークレット 提供-xfr: 144.202.76.207 私の秘密
- ip-address:これはns1.lowend.vipのIPアドレスです
- hide-version:グリーティングやプロトコル応答において、NSDのバージョンを一切公開しません。将来NSDのゼロデイ脆弱性が発見された場合でも、少なくともパッチ未適用バージョンを実行していることを公表することはありません。
- データベース:バイナリデータベースが保存される場所(人間が編集できるゾーンファイルではない)
- server-count:実行時に起動するNSDデーモンの数。混雑したゾーンがある場合は、さらに起動する必要があるかもしれません。
- verbosity:ログの詳細度。チュートリアル用に最大に設定しています。
「secret」スタンザは、ゾーン転送の認証を制御します。使用する共有秘密鍵を定義します。秘密鍵の名前は「my-secret」です。私は次のコマンドで秘密鍵を生成しました。
openssl rand -base64 32
もちろん、好みの方法を使用することもできます。
最後に、ゾーンを定義します。ゾーンが多数ある場合は、各ゾーンをファイルに格納し、 include:ディレクティブを活用することを検討してください。このチュートリアルでは1つのゾーンのみを使用するため、ベースとなるnsd.confに記述しています。
- 名前:ドメイン
- ゾーンファイル:人間が編集できるテキストを保存する場所。この場合、ゾーンは/etc/nsd/zonesに保存します。
- 通知:変更があったときにどの DNS スレーブに通知するか、またどのシークレットを使用するか
- provide-xfr:どのサーバーがゾーン転送を許可され、どの秘密鍵を使用するか
- ポート 53 udp: DNS レコードはこのように提供されるため、世界に公開する必要があります。
- ポート 53 tcp:このポートは、他の DNS サーバーに対してのみ開く必要があります。DNS ゾーン転送(承認されたネームサーバー(この場合は ns2)によってのみ実行されます)は、ポート 53 tcp を介して行われます。
サーバー 2 では、セットアップは非常に似ていますが、いくつかの重要な変更点があります (赤で示されています)。
サーバ: IPアドレス: 144.202.76.207 非表示バージョン: はい データベース: "/var/lib/nsd/nsd.db" サーバー数: 1 冗長度: 2 鍵: 名前: 「私の秘密」 アルゴリズム: hmac-sha512 秘密: abhnilvmqpVn9FODGFfCyj2gAhU21nQNLXWxLWOxVCw= ゾーン: 名前: lowend.vip ゾーンファイル: /etc/nsd/zones/lowend.vip 通知許可: 149.28.254.206 私の秘密 リクエスト-xfr: AXFR 149.28.254.206@53 私の秘密
サーバー スタンザの「ip-address」の変更は、ns1 の IP から ns2 の IP への変更だけです。
ゾーン スタンザでは、最後の 2 行を変更します。
- allow-notify:これは、変更があった場合に通知することを許可されているサーバーのアクセス制御リストです(ここではns1)
- request-xfr:これも、ゾーン転送を取得するために接続するサーバー (ここでも ns1) のアクセス制御リストであり、ポート 53 を使用します。
次に、ns1 上の lowend.vip のゾーン ファイルを作成します。
/etc/nsd/zones を mkdir します。
以下は、/etc/nsd./zones/lowend.vip に記述した内容です。
$ORIGIN lowend.vip。 $TTL 3600 @ IN SOA ns1.lowend.vip admin.lowend.vip ( 202404011 ; シリアル番号 28800 ; 更新 7200 ; 再試行 864000 ; 期限切れ 86400 ; 最小TTL ) NS ns1.lowend.vip 内。 NS ns2.lowend.vip 内。 ns1 IN A 149.28.254.206 ns2 IN A 144.202.76.207 1.23.45.100 の bigvps CNAME bigvps の www
すべての DNS レコード エントリを詳しく説明するわけではありませんが、重要なポイントをいくつか挙げます。
- 両方のネームサーバーのDNSレコードを取得しました
- 「bigvps」用の架空のIPアドレスがあります
- 「www.lowend.vip」に「bigvps」のCNAMEを作成しました。
- シリアル番号の形式はYYYYMMDD#です。
nsdを起動してみましょう:
systemctl nsd を有効にする systemctl nsd を再起動
/var/log/syslog に表示される内容は次のとおりです。
2024-03-18T13:34:13.735090-07:00 ns1 systemd[1]: nsd.service - ネームサーバーデーモンを停止しました。 2024-03-18T13:34:13.741588-07:00 ns1 systemd[1]: nsd.service - ネームサーバーデーモンを起動しています... 2024-03-18T13:34:13.767625-07:00 ns1 nsd[16395]: nsd起動中 (NSD 4.6.1) 2024-03-18T13:34:13.767898-07:00 ns1 nsd[16395]: [2024-03-18 13:34:13.767] nsd[16395]: 通知: nsd を起動しています (NSD 4.6.1) 2024-03-18T13:34:13.804355-07:00 ns1 nsd[16398]: ゾーンlowend.vipの読み取りに成功しました 2024-03-18T13:34:13.808870-07:00 ns1 nsd[16398]: [2024-03-18 13:34:13.808] nsd[16398]: 情報: ゾーンlowend.vipの読み取りに成功しました 2024-03-18T13:34:13.809132-07:00 ns1 nsd[16398]: ゾーンlowend.vipがdbに書き込まれました 2024-03-18T13:34:13.809291-07:00 ns1 nsd[16398]: [2024-03-18 13:34:13.809] nsd[16398]: 情報: ゾーンlowend.vipがdbに書き込まれました 2024-03-18T13:34:13.815895-07:00 ns1 nsd[16398]: nsdが開始されました (NSD 4.6.1)、pid 16395 2024-03-18T13:34:13.815934-07:00 ns1 nsd[16398]: [2024-03-18 13:34:13.815] nsd[16398]: 通知: nsd が開始されました (NSD 4.6.1)、pid 16395 2024-03-18T13:34:13.817896-07:00 ns1 systemd[1]: nsd.service - ネームサーバーデーモンを開始しました。
ns2 から始めましょう:
/etc/nsd/zones を mkdir します。 systemctl nsd を有効にする systemctl nsd を再起動
/var/log/syslog には次のように表示されます。
2024-03-18T13:47:47.869109-07:00 ns2 systemd[1]: nsd.service - ネームサーバーデーモンを開始しました。 2024-03-18T13:47:47.870845-07:00 ns2 nsd[15824]: xfrd: ゾーンlowend.vipがコミットしました。「2024-03-18T13:47:47に149.28.254.206@53からシリアル2024104011への更新を受信しました。キーmy-secretでTSIGが検証されました。」 2024-03-18T13:47:47.871385-07:00 ns2 nsd[15824]: [2024-03-18 13:47:47.870] nsd[15824]: info: xfrd: zone lowend.vip がコミットしました。「2024-03-18T13:47:47 に 149.28.254.206@53 からシリアル番号 2024104011 への更新を受信しました。キー my-secret で TSIG が検証されました。」 2024-03-18T13:47:47.872244-07:00 ns2 nsd[15825]: ゾーンlowend.vip。2024-03-18T13:47:47に149.28.254.206@53からシリアル2024104011への更新を受信しました。TSIGはキーmy-secretで検証され、233バイト、3.2e-05秒かかりました。 2024-03-18T13:47:47.872287-07:00 ns2 nsd[15825]: [2024-03-18 13:47:47.872] nsd[15825]: 情報: ゾーンlowend.vip。2024-03-18T13:47:47に149.28.254.206@53からシリアル2024104011への更新を受信しました。TSIGはキーmy-secretで検証され、233バイト、3.2e-05秒かかりました。 2024-03-18T13:47:47.876295-07:00 ns2 nsd[15824]: ゾーンlowend.vipシリアル0が2024104011に更新されました 2024-03-18T13:47:47.876349-07:00 ns2 nsd[15824]: [2024-03-18 13:47:47.876] nsd[15824]: 情報: ゾーンlowend.vipシリアル0が2024104011に更新されました
ns1 のログには次の内容が記録されます。
2024-03-18T13:47:47.871552-07:00 ns1 nsd[16399]: lowend.vip の axfr。144.202.76.207 から 2024-03-18T13:47:47.872312-07:00 ns1 nsd[16399]: [2024-03-18 13:47:47.871] nsd[16399]: 情報: lowend.vip の axfr。144.202.76.207 から
甘い!
自宅のPCの場合:
$ nslookup www.lowend.vip サーバー: 8.8.8.8 住所: 8.8.8.8#53 非権威的な回答: www.lowend.vip 正規名 = bigvps.lowend.vip。 名前: bigvps.lowend.vip 住所: 1.23.45.100
ということで、稼働を開始しました。
それではレコードを追加しましょう。/etc/nsd/zones/lowend.vip を以下のように変更します。
$ORIGIN lowend.vip。 $TTL 3600 @ IN SOA ns1.lowend.vip admin.lowend.vip ( 202404012 ; シリアル番号 28800 ; 更新 7200 ; 再試行 864000 ; 期限切れ 86400 ; 最小TTL ) NS ns1.lowend.vip 内。 NS ns2.lowend.vip 内。 ns1 IN A 149.28.254.206 ns2 IN A 144.202.76.207 1.23.45.100 の bigvps CNAME bigvps の www サーバー1 IN A 4.5.6.7
server1.lowend.vip にレコードを追加し、シリアル番号を更新しました。その後、nsd をリロードします。これは停止/開始ではなく、設定をリロードしながらレコードの提供を継続するように nsd に指示するだけです。
nsd-control のリロード
これにより、変更はns2にもプッシュされます。ns2のログには次のように表示されます。
2024-03-18T13:53:48.758673-07:00 ns2 nsd[15824]: [2024-03-18 13:53:48.758] nsd[15824]: 情報: ゾーンlowend.vipシリアル2024104011が2024104012に更新されましたそして自宅では: $ nslookup server1.lowend.vip サーバー: 8.8.8.8 住所: 8.8.8.8#53 非権威的な回答: 名前: server1.lowend.vip 住所: 4.5.6.7
NSD は、両方のノードが稼働しており、両方のノードが同期されているかどうかを示します。