固定IPを止めて外部に鯖を借りてしまった為、自宅のIPを使う時に色々と面倒な作業が発生し始めた。
この作業を簡略化する為に、Dynamic DNSを作る事にした。
一応、今使っているルータの販売元がDynamic DNSのサービスをタダでやってるんだけど、次回もこのメーカーを買わなきゃいけなくなるので、それは避けたいのと、他にも無料でやっている所はあるが、面白そうと言う理由だけでやってしまう☆

この記事を参考にして作業する人は、以下の条件に適合する人のみ。

  1. 自分でグローバルな所に置いてあるDNSを持っている
    無い人には意味の無い記事です。
    無料か有料なDynamic DNSサービスを探して使ってください。
    うちみたいな運用を個人でやってるのは、少ないと思います(笑)
  2. Debian LinuxでBIND9が動いていて、既にマスターゾーンサーバになっている
    うちの環境です。
  3. SSHで接続できる
    色々とセキュリティ関係で手を抜く為に使ってます。

まず始めに、/etc/bindの書き込み権限を変更します。
多分、初期状態では所有者rootでグループbindになってますが、bindに対しての書き込み権限がありません。
コマンドを使用しての書き換えにbindに権限が必要なので変更。

# chmod g+w /etc/bind

後、実行するとゾーンファイルも書き換えられるので、対象の正引きゾーンファイルもbindユーザが書き込み出来る様に権限を変えてください。

設定ファイルのゾーン定義の部分で、書き換えが起こる部分に以下の設定を追加する。

allow-update {
    localhost;
};

これを追記する事で、ローカルホストからのみコマンドによってゾーンファイルを書き換える事が可能になります。

書き換える方法はnsupdateコマンドを使用します。
このコマンドを使用すると、対話式のプロンプトに移行します。

> update add hoge.maocat.net. 3600 in a 192.168.255.1
> send

上記のコマンドでhoge.maocat.netを192.168.255.1として、TTL3600、Aレコードの形で登録する事が出来ます。
削除する場合は以下の通り。

> update delete hoge.maocat.net.
> send

更新を確認する場合は、hostコマンドかdigコマンド(windowsではnslookup)を使用する。
実際にゾーンファイルに書き込まれるのには少し時間がかかる。

で、これをシェルスクリプトで書き換えを行う。
ルータに割り振られたIPを通知するには、sshを使った時に環境変数に接続元の情報が書き込まれるので、それを加工する。
このスクリプトを使う専門のユーザを作って実行させた方がいいかも。
以下、登録用のシェルスクリプト。

#!/bin/sh
CONNECTION_IP=`echo $SSH_CONNECTION | cut -f1 -d " "`
COMMAND_FILE="$HOME/dns_update_command"
HOST_NAME="hoge.maocat.net"

if expr "$CONNECTION_IP" : "^[0-9]\{1,3\}[.][0-9]\{1,3\}[.][0-9]\{1,3\}[.][0-9]\{1,3\}$" > /dev/null ; then
        DNS_RESULT=`host $HOST_NAME`

        if expr "$DNS_RESULT" : "^Host $HOST_NAME not found" > /dev/null ; then
                echo "update add $HOST_NAME. 3600 in a $CONNECTION_IP" > $COMMAND_FILE
                echo "" >> $COMMAND_FILE
                nsupdate $COMMAND_FILE
        elif expr "$DNS_RESULT" : "^$HOST_NAME has address" > /dev/null ; then
                echo "update delete $HOST_NAME." > $COMMAND_FILE
                echo "update add $HOST_NAME. 3600 in a $CONNECTION_IP" >> $COMMAND_FILE
                echo "" >> $COMMAND_FILE
                nsupdate $COMMAND_FILE
        fi

fi

sshから接続して、このスクリプトを実行すれば接続したIPが登録されます。
ここを参考にして、暗号鍵での接続やコマンド制限を駆使すれば、cronでの自動化やセキュリティの向上が出来ると思います。

カテゴリ/タグ:私の記憶領域 /    
コメント (0)
«    |  トップ  |  ホーム  |    »


コメントフォーム(注:投稿内容にURLがある場合、管理者の確認の上で公開する設定になっています)