固定IPを止めて外部に鯖を借りてしまった為、自宅のIPを使う時に色々と面倒な作業が発生し始めた。
この作業を簡略化する為に、Dynamic DNSを作る事にした。
一応、今使っているルータの販売元がDynamic DNSのサービスをタダでやってるんだけど、次回もこのメーカーを買わなきゃいけなくなるので、それは避けたいのと、他にも無料でやっている所はあるが、面白そうと言う理由だけでやってしまう☆
この記事を参考にして作業する人は、以下の条件に適合する人のみ。
- 自分でグローバルな所に置いてあるDNSを持っている
無い人には意味の無い記事です。
無料か有料なDynamic DNSサービスを探して使ってください。
うちみたいな運用を個人でやってるのは、少ないと思います(笑) - Debian LinuxでBIND9が動いていて、既にマスターゾーンサーバになっている
うちの環境です。 - 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での自動化やセキュリティの向上が出来ると思います。
DebianLinuxのデフォルトでは、digコマンドやらnslookupコマンドが入っていない。
毎回、鯖を再構築する時に忘れてググル先生に頼っているのでメモっとく。
以下のコマンドを叩くだけで、必要な物はインストールされる。
apt-get install dnsutils