ページ更新: 2005-01-29 (土) (4890日前)

関連: Linux/nvルータの割付IPを取得

(2001.07.12 作成) (2005-01-29 wikiに移動)

nsupdateでbindにホストを登録する

PPPなどでダイヤルアップ接続しているホストをbindに登録します。

環境は DNSサーバ、PPPクライアントともに Debian GNU/Linux Woody kernel 2.2.19 です。

なんでこんなことをやるのかというと、自分専用にDynamicDNSを動かしてみたかったからです……実用はまだ考えていません。IPが固定じゃないとやっぱいろいろと面倒なので。

目次

[編集]

情報源 #

[編集]

目標 #

  • 回線接続時(フレッツADSLを使ってるので、PPPeEでIPアドレスが貰えた時点で)に、DNSを更新する。
    • /etc/ppp/ip-up.d に仕掛ければよい……が、試していない。
  • DNS updateには認証をかける。
    • man 8 nsupdate によると、「base-64 encoding of HMAC-MD5 key created by dnssec-keygen(8).」だそうだ。dnssecはbind9に入っている。(bind8 だと dnskeygenらしい)
[編集]

パッケージの確認 #

$ which nsupdate
/usr/bin/nsupdate                ★nsupdateが入ってます。

$ dpkg -S nsupdate | grep `which nsupdate`
dnsutils: /usr/bin/nsupdate      ★パッケージは dnsutilsです

$ dpkg -s dnsutils | grep -i version
Version: 1:9.1.1-1

(サーバー側)
$ apt-cache search bind | grep ^bind
bind - Internet Domain Name Server      
bind-dev - Libraries used by BIND
bind-doc - Documentation for BIND
bind9 - Internet Domain Name Server    ★これ
bind9-doc - Documentation for BIND

# apt-get install bind9
[編集]

テスト #

PPPのIPアドレスを確認

$ /sbin/ifconfig ppp0 | grep addr
          inet addr:XXX.XXX.XXX.XXX  P-t-P:YYY.YYYY.YYY.YYY  Mask:255.255.255.255

サーバー側のnamed.confに次の記述を追加

zone "example.jp" {
        : (略)
    allow-update {
        XXX.XXX.XXX.XXX;           
    };
        : (略)
};

登録してみる

$ nsupdate
> update add host.example.jp 3600 A XXX.XXX.XXX.XXX
>
> ^D

$ host host.example.jp
host.example.jp     A     XXX.XXX.XXX.XXX

$ nsupdate
> update delete host.example.jp
>
> ^D

$ host host.example.jp
host.example.jp does not exist (Authoritative answer)
[編集]

keyを付けて登録してみる #

key生成

# dnssec-keygen -a hmac-md5 -b 256 -n ZONE example.jp
Kexample.jp.+157+09829

# ls -al K*
-rw-r--r--    1 root     root           75 May 11 20:27 Kexample.jp.+157+09829.key
-rw-------    1 root     root          101 May 11 20:27 Kexample.jp.+157+09829.private

named.conf

include "/etc/secret/key.example.jp";
zone "example.jp" {
        :
    allow-update {
        key example.jp;
    };
        :
};

登録のテスト (^Dあるいはexitで終了)

$ nsupdate -k Kexample.jp.+157+09829
> update add host.example.jp 3600 IN A XXX.XXX.XXX.XXX
> 
> ^D
$ host host.example.jp
host.example.jp     A     XXX.XXX.XXX.XXX

nsupdate スクリプト……/etc/cron.d や /etc/ppp/ip-ud.d に仕掛ける。さらにFQDN→IP対応が変化すると困るdaemonがあれば、それも再起動する(/etc/init.d/* reload)

#! /bin/sh
#
# nsupdate
#
#   2001.07.13
#

/bin/echo -e 'update delete host.example.jp\n' | \
/usr/bin/nsupdate -k /etc/bind/Kexample.jp.+157+09829 > /dev/null 2>&1
/bin/sleep 3
/sbin/ifconfig ppp0 | /usr/bin/awk '/inet addr:/{\
print "update add host.example.jp 3600 A " substr($2,6) "\n"}' | \
/usr/bin/nsupdate -v -k /etc/secret/Kexample.jp.+157+09829