がらくたネット


bind DynamicDNS ddns

bind DynamicDNS ddns

bindの動的更新について書いてみる
動的更新(Dymanic DNS)は便利だけど危険性もあるので更新元をちゃんと特定する仕組みが必要
使われるのはTSIG(Transaction Signature)
共通鍵方式で署名を行いデータの安全性を確認する
主にサーバ間では、ゾーン転送・通知・クエリ要求に利用される
クライアント間では動的更新時に利用される

nsupdateコマンドは-kオプションでTSIGに対応する

host1とhost2用の共有鍵を作成する場合の名前はhost1-host2とするのが推奨されている
共有鍵の名前は両方のホストで同じ必要がある
ホスト間でない場合は、ドメイン名を鍵の名前にする慣習がある

設定

まず、TSIGの鍵を作成

dnssec-keygen -a hmac-md5 -b 512 -n HOST host1-host2

鍵長は長い方がよい
名前は最後に.[ピリオド]をつける、指定時についてない場合は自動的に付与される
TSIGはアルゴリズムとしてHMAC-MD5を指定する
キーサイズはHMACとしての最長512を指定する

2つの鍵ファイルが作成される

  • K[鍵名前.]+[num1]+[num2].private
  • K[鍵名前.]+[num1]+[num2].key

鍵名前はdnssec-keygenで指定した鍵の名前、ピリオド付ね
num1はアルゴリズムの番号
num2はキーのハッシュ値

.privateファイルに記述されているKey:の右辺が共通鍵文字列
この共通鍵文字列をコピーする

named.confに鍵を設定
鍵の名前の最後にピリオドがあるのを忘れずに

vi named.conf

key host1-host2. {
 algorithm hmac-md5;
 secret "La/E5CjG9O+osljq0a2jdA==";
};

アクセス制御

基本的なアクセス制御

  • allow-update { key host1-host2.; };

応用編

  • update-policy { (grant|deny) identity nametype name [types]};
grantは許可でdenyは拒否
identityは鍵の名前
nametypeは以下
	name	更新するドメイン名がnameフィールドと同じ場合に一致
	subdomain	更新するドメイン名がnameフィールドのサブドメインである場合一致
	wildcard	更新するドメイン名がnameフィールドのワイルドカード指定に合致する場合一致
	self	更新するドメイン名がidentityフィールドの名前を同じ場合一致
typesは任意の有効なレコード型、省略するとSOA/NS/SIG/NXT以外のすべてのレコード型と想定される

エラーコード

  • FORMERR TSIGの通信ぢゃない場合
  • BADKEY 不明なKEYで署名されてる
  • BADSIG 有効な署名ぢゃない
  • BADTIME 有効時間外の時刻を持っている
  • NOTAUTH その他のエラー

コマンド

nsupdate -k K[鍵名前.]+[num1]+[num2].private
>update add hoge.[zone] [TTL] IN A [IP]
>show
>send