でも、格安VPSのなかでも更に一番安いプランなので、メモリは256MBと非常に厳しい状況。
まあ。なんとでもなるんですけどね、1つでも固定グローバルさえ手に入れてしまえば。。。。
ということで、どこから繋いでも名前解決できるように、Dynamic DNSを利用します。
namedの起動オプション
で、借りたVPSですが論理CPUが16個と非常に多いためデフォルト状態でnamedをstartさせると、200MBぐらいメモリを確保してしまい、他のサービスに影響が出てしまうので、まずはnamedが使用するCPCの数を制限することによりメモリの節約を行います。
借りているVPSはCentOSなので、下記のファイルの最後の行にnamed起動時のOPTIONの設定を追加します。
# tail -1 /etc/sysconfig/named OPTIONS="-n 2"
これで、50MBぐらいになりました。
TSIG鍵の生成
DNSへ登録要求してくるLinuxは、ISPに接続するたびにIPアドレスが変わってしまうので、DNS Sec用の鍵を作って、信頼関係を築いた方が良いでしょう。
# /usr/sbin/dnssec-keygen -a HMAC-MD5 -b 512 -n HOST xxxxxxx.com
こんなファイルが2つ作られます。
Kxxxxxxx.com.+xxx+xxxxx.key
Kxxxxxxx.com.+xxx+xxxxx.private
named.confの設定
master serverのnamed.confにkey項目の追加と、動的にレコードを追加したいzoneにupdateの許可を設定します。key項目のsecretには、TGIS鍵で作成した"Kxxxxxxx.com.+xxx+xxxxx.key"ファイル内のBase64風なゴチャゴチャした文字列を設定します。
下の例では、update-policyにより、www.xxxxxxx.comだけ更新を行えるように設定しています。
# cat Kxxxxxxx.com.+xxx+xxxxx.key xxxxxxx.com. IN KEY 512 3 157 xxxxsecretxxxx
key "xxxxxxx.com" { algorithm hmac-md5; secret "xxxxsecretxxxx"; }; zone "xxxxxxx.com" in { file "master/xxxxxxx.com"; type master; allow-transfer { localnets; }; # allow-update { # key xxxxxxx.com; # }; update-policy { grant xxxxxxx.com name www.xxxxxxx.com. A; }; };
slave serverも変更します。
key "xxxxxxx.com" { algorithm hmac-md5; secret "xxxxsecretxxxx"; }; zone "xxxxxxx.com" in { allow-transfer { localnets; }; masters { xxx.xxx.xxx.xxx; }; file "slave/xxxxxxx.com"; type slave; allow-update-forwarding { key xxxxxxx.com; }; };
PPPoE接続されたときにUpdateする場合
Bフレッツを使用したISPへPPPoE接続する場合は、PPPインタフェースがUPした時にDNSレコードの登録を行うように設定します。下記の例はUbuntsu910を使用している場合です(SUSEでもFedoraでもCentOSでも同じになると思います)。PPPのIPCPにより得られたIPアドレスは、PPPのip-upスクリプトの第四引数に渡されますので、そのアドレスをnsupdateします。
#cat /etc/ppp/ip-up.d/nsupdate #/bin/sh FQDN=www.xxxxxxx.com. KEY=/usr/local/etc/dnsseckey/Kxxxxxxx.com.+xxx+xxxxx.private LOCALIP=$4 NSUPDATE=/tmp/nsupdate$$.conf echo "update delete $FQDN IN A" > $NSUPDATE echo "update add $FQDN 3600 IN A $LOCALIP" >> $NSUPDATE echo "" >> $NSUPDATE nsupdate -k $KEY $NSUPDATE rm $NSUPDATE
DHCPでIPアドレスが振られたときにUpdateする場合
YahooBBなどやUsenのISPを利用している場合は、多くがDHCPでアドレスが振られますので、if-upスクリプトが実行される時にDNSレコードの登録を行うように設定します。下記の例はUbuntsu910を使用している場合です。IPv6の場合はアドレスを決定するのが微妙なので、レコード追加してません。悩みどころですね。
# cat /etc/network/if-up.d/nsupdate #! /bin/sh set -e env > /tmp/env.log # Don't bother to restart sshd when lo is configured. if [ "$IFACE" = lo ]; then exit 0 fi # Only run from ifup. if [ "$MODE" != start ]; then exit 0 fi if [ "$ADDRFAM" != inet ] && [ "$ADDRFAM" != inet6 ]; then exit 0 fi FQDN=www.xxxxxxx.com. KEY=/usr/local/etc/dnsseckey/Kxxxxxxx.com.+xxx+xxxxx.private LOCALIP="`/sbin/ifconfig eth0 | grep 'inet addr' | awk '{print $2}' | sed -e 's/.*://'`" NSUPDATE=/tmp/nsupdate$$.conf echo "update delete $FQDN IN A" > $NSUPDATE echo "update add $FQDN 3600 IN A $LOCALIP" >> $NSUPDATE echo "" >> $NSUPDATE nsupdate -k $KEY $NSUPDATE rm $NSUPDATE
named rootのパーミッション確認
DNSサーバはupdateを受け取ると、ルートディレクトリにジャーナルファイルを作成しますので、書き込みできるパーミッションを設定してください。
#chown -R named:named /var/lib/named
DNSへの登録が行われると、下記のようなジャーナルファイルが作られます。
/var/lib/named/master/xxxxxxx.com.jnl
/var/lib/named/slave/xxxxxxx.com.jnl