DHCP 環境下などで IP が動的に付与される場合は DNS レコードを動的に更新する必要があります。これを実現する Dynamic Update 機能が BIND 9 には実装されています。使用方法をまとめます。Dynamic Update に対応した DNS を特に Dynamic DNS または DDNS とよぶことがあります。
ゾーンファイルの作成
ローカルホストに example.com のマスター権威ネームサーバを構築して Dynamic Update の実験をします。
/var/named/example.com.zone
$TTL 60
@ IN SOA ns1.example.com. username.example.com. (
2015032900
60
60
604800
3600
)
IN NS ns1.example.com.
ns1 IN A 192.168.33.101
/var/named/33.168.192.in-addr.arpa.zone
$TTL 60
@ IN SOA ns1.example.com. username.example.com. (
2015032900
60
60
604800
3600
)
IN NS ns1.example.com.
101 IN PTR ns1.example.com.
権限変更および設定の検証
$ sudo chown named:named /var/named/example.com.zone
$ sudo chmod 600 /var/named/example.com.zone
$ sudo chown named:named /var/named/33.168.192.in-addr.arpa.zone
$ sudo chmod 600 /var/named/33.168.192.in-addr.arpa.zone
$ sudo named-checkzone example.com. /var/named/example.com.zone
$ sudo named-checkzone 33.168.192.in-addr.arpa. /var/named/33.168.192.in-addr.arpa.zone
DDNS 時に使用する共通鍵の生成
アクセス元 IP による制限でよいとする場合、本手順は不要です。Dynamic Update を実行できるホストには制限をかけるべきです。任意 (any) のホストがゾーンファイルを更新できる状況は好ましくありません。制限方法には IP によるものと鍵認証によるものがあります。いずれも後述の allow-update で指定します。本ページでは、よりセキュアな鍵認証 TSIG (Transaction SIGnatures) を採用します。UDP パケットにおけるアクセス元 IP は容易に改竄できてしまうためです。共通鍵を用いて HMAC を計算します。送信元の認証とメッセージが改竄されていないことの確認を目的としています。いわゆる署名のようなものであり暗号化ではないことに注意してください。
以下のコマンドで host1 と host2 で使用する予定の共通鍵を生成します。
$ dnssec-keygen -r /dev/urandom -a HMAC-SHA256 -b 128 -n HOST host1-host2
$ cat Khost1-host2.+163+61936.key
host1-host2. IN KEY 512 3 163 ZO+XsA/8arOB/9hmlzGDZg==
$ cat Khost1-host2.+163+61936.private
Private-key-format: v1.3
Algorithm: 163 (HMAC_SHA256)
Key: ZO+XsA/8arOB/9hmlzGDZg==
Bits: AAA=
Created: 20150328190220
Publish: 20150328190220
Activate: 20150328190220
「ZO+XsA/8arOB/9hmlzGDZg==」という base64 エンコードされた文字列が必要な情報です。生成結果のファイルは nsupdate コマンドを実行する際に使用するので削除せずに保管しておいてください。
rndc 時に使用する共通鍵の生成
ゾーンファイルを手動で編集する予定がない場合、本手順は不要です。rndc (remote name daemon control) というコマンドがあります。rndc を使用するとリモートのネームサーバに対して named の stop/reload/status などを実行できます。Dynamic Update のためだけに用意されたコマンドではありません。rndc を使用すると Dynamic Update で動的に更新されるゾーンファイルを手動でも更新できるようになるため紹介します。今回の操作対象は名前に反しますがローカルホストの named です。rndc は named を操作するために認証情報を要求されます。認証は共通鍵によって行われます。事前に生成して rndc クライアントと named サーバーの両方の設定ファイルに登録しておく必要があります。
$ rndc-confgen -r /dev/urandom -b 256
# Start of rndc.conf
key "rndc-key" {
algorithm hmac-md5;
secret "kYSgjQuZYYGXkLcxdFkkwZHc+2YMYZbfkoAx3R4PsKk=";
};
options {
default-key "rndc-key";
default-server 127.0.0.1;
default-port 953;
};
# End of rndc.conf
# Use with the following in named.conf, adjusting the allow list as needed:
# key "rndc-key" {
# algorithm hmac-md5;
# secret "kYSgjQuZYYGXkLcxdFkkwZHc+2YMYZbfkoAx3R4PsKk=";
# };
#
# controls {
# inet 127.0.0.1 port 953
# allow { 127.0.0.1; } keys { "rndc-key"; };
# };
# End of named.conf
標準出力に表示された情報をもとにして、エディタなどで /etc/rndc.conf を作成します。named.conf に関する部分はこの後使用しますのでメモしておいてください。
/etc/named.conf の編集
// rndc 用
key "rndc-key" {
algorithm hmac-md5;
secret "kYSgjQuZYYGXkLcxdFkkwZHc+2YMYZbfkoAx3R4PsKk=";
};
// rndc の設定
controls {
inet 127.0.0.1 port 953
allow { 127.0.0.1; } keys { "rndc-key"; };
};
// ダイナミックアップデート用
key "host1-host2." {
algorithm hmac-sha256;
secret "ZO+XsA/8arOB/9hmlzGDZg==";
};
acl "bogus" {
0.0.0.0/8;
1.0.0.0/8;
2.0.0.0/8;
169.254.0.0/16;
192.0.2.0/24;
224.0.0.0/3;
10.0.0.0/8;
172.16.0.0/12;
192.168.0.0/16;
};
options {
directory "/var/named";
recursion no; // Authoritative-only
allow-recursion { none; }; // Authoritative-only
blackhole { bogus; };
};
zone "example.com" {
type master;
file "example.com.zone";
allow-query { any; };
allow-update { key host1-host2.; }; // ダイナミックアップデート
};
zone "33.168.192.in-addr.arpa" {
type master;
file "33.168.192.in-addr.arpa.zone";
allow-query { any; };
allow-update { key host1-host2.; }; // ダイナミックアップデート
};
権限変更および設定の検証
鍵が記載されているファイルがあるため read 権限には特に注意しましょう。また /var/named の write 権限は後述のジャーナルファイルが生成されるため必須です。
$ sudo chown root:root /etc/rndc.conf
$ sudo chmod 600 /etc/rndc.conf
$ sudo chown named:named /etc/named.conf
$ sudo chmod 600 /etc/named.conf
$ sudo named-checkconf /etc/named.conf
$ sudo chmod g+w /var/named
サービスの起動および検証
$ sudo service named restart
$ sudo grep named /var/log/messages | tail
$ host ns1.example.com localhost
$ host 192.168.33.101 localhost
$ sudo rndc status
nsupdate コマンドによるゾーンファイルの動的更新
DDNS クライアントの実装はいろいろあります。ここでは特に BIND 9 に付属している nsupdate コマンドを用いてみます。ローカルホストで動作する named のゾーンファイルを動的に更新します。なお TSIG で認証をかけている場合は共通鍵が記載された先程のファイル二つが必要ですので用意しておいてください。
ディレクトリ構成
.
├── Khost1-host2.+163+61936.key
└── Khost1-host2.+163+61936.private
以下のコマンドを実行してインタラクティブにゾーン情報を更新します。
$ nsupdate -k Khost1-host2.+163+61936.key
> server 127.0.0.1
> update add newhost.example.com 60 A 192.168.33.102
> show
> send
> quit
確かにゾーンの情報が更新されたことを確認しましょう。
$ host newhost.example.com localhost
実行直後であればジャーナルファイル /var/named/example.com.zone.jnl の存在が確認できます。一定時間が経過すると更新された結果を dump してまとめます。サーバー再起動後などは最後の dump 後に発生した update に関する jnl ファイルを再度適用します。
ゾーンファイルの手動更新
通常 DDNS の対象となっているゾーンファイルは手動では編集できません。ジャーナルファイルが反映されている保証がないからです。手動編集したい場合は一旦サービスを停止してジャーナルファイルを反映させる
$ sudo service named stop
または以下のようにします。
- sudo rndc freeze example.com (Dynamic Update を無効化。jnl ファイルがゾーンファイルに反映される)
- 手動でゾーンファイルを編集
- sudo rndc thaw example.com (再度 Dynamic Update を有効化)
関連記事
- Ciscoルータの基本操作シスコ社の製品のうち、ルータは Cisco*** という製品名でスイッチは Catalyst*** という製品名です。いずれも *** は機種番号で、数字が小さいほど小規模ネットワーク向けとなっています。例えば資格試験 CCNA Routing and Switching では小規模および中規模ネットワークが対象です。そのため、中小規模のネットワークのルータおよびス
- VyOS の基本的なルーティング設定本ページでは、複数の LAN をつなぐルータとしての設定方法をまとめます。具体的には、スタティックルーティングおよびダイナミックルーティング (RIP/OSPF/BGP)の設定方法を把握します。 設定方法を検証するための構成 ルーティング設定の検証を行うために VirtualBox で 5 台の VM を用意します。ホスト OS から vyos-0001 へ SSH 接続する部分を除き、「内部ネッ...
- BIND 9.10.2 の公式マニュアルに学ぶ DNS の基本DNS の実装としては Internet Systems Consortium (ISC) の Berkeley Internet Name Domain (BIND) が有名です。本ページは公式サイトの Documentation からダウンロードできる v9.10.2 の PDF マニュアルおよび『DNSの仕組み完全解説』から基本事項を抽出してまとめ
- スタティックルートの設定インターフェイスに IP を設定しただけでは他のデバイスと通信できません。各デバイスにルーティングテーブルを設定する必要があります。ルーティングテーブルの設定方法には動的に自動設定するものと、静的に手動設定するものの二種類があります。ここでは静的に手動設定するスタティックルートの方法を紹介します。 具体的にはまず PC0, PC1, Router0, Router1 それぞれ
- 低レイヤーネットワークプログラミングに関する雑多な知識TCP/IP モデルのうちトランスポート層ではなく、インターネット層およびネットワークインターフェイス層のパケット (正確には PDU) を扱う低レイヤープログラミングの雑多なテクニックをまとめます。『ルーター自作でわかるパケットの流れ』などを参考にしています。バックアップ目的で書籍のサンプルコードをホスティングしました。 検証環境