bind DynamicDNS ddns
bindの動的更新について書いてみる
動的更新(Dymanic DNS)は便利だけど危険性もあるので更新元をちゃんと特定する仕組みが必要
使われるのはTSIG(Transaction Signature)
共通鍵方式で署名を行いデータの安全性を確認する
主にサーバ間では、ゾーン転送・通知・クエリ要求に利用される
クライアント間では動的更新時に利用される
nsupdateコマンドは-kオプションでTSIGに対応する
host1とhost2用の共有鍵を作成する場合の名前はhost1-host2とするのが推奨されている
共有鍵の名前は両方のホストで同じ必要がある
ホスト間でない場合は、ドメイン名を鍵の名前にする慣習がある
設定
まず、TSIGの鍵を作成
dnssec-keygen -a hmac-md5 -b 512 -r /dev/urandom -n HOST host1-host2 鍵長は長い方がよい 名前は最後に.[ピリオド]をつける、指定時についてない場合は自動的に付与される TSIGはアルゴリズムとしてHMAC-MD5を指定する キーサイズはHMACとしての最長512を指定する -r /dev/urandomを追加しないと既定で/dev/randomを使用するためなかなか終わらない
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