Debian 11でGnuDIPを使ったダイナミックDNSサーバを作ってみた。
DNSサーバの準備
BINDをインストール、ドメインに対応するゾーンファイルの定義を行い、ゾーンファイルを作成する。bashでタブが入力できるようにset disable-completionで補完機能のON/OFFを行っている。また、ゾーンファイルはシリアル番号に日付を含むように指定、$TTLは環境変数と間違われないように先頭に\を付加している。
今回の例では自分が所有するドメインを example.jp と仮定して記載している。
sudo apt-get install -y bind9 bind 'set disable-completion on' cat << EOT | sudo tee -a /etc/bind/named.conf.local zone "example.jp" { type master; file "db.example"; }; EOT cat << EOT | sudo tee /var/cache/bind/db.example ; ; BIND data file for example zone ; \$TTL 3600 @ IN SOA ns.example.jp. root.example.jp. ( `date +%Y%m%d`01 ; Serial 3600 ; Refresh 300 ; Retry 3600000 ; Expire 3600 ) ; Negative Cache TTL ; @ IN NS ns.example.jp. @ IN MX 10 ns.example.jp. ns IN A 219.99.78.13 www IN CNAME ns.example.jp. mail IN CNAME ns.example.jp. EOT bind 'set disable-completion off' sudo systemctl reload bind9
Webサーバの準備
Apacheをインストールして、サーバ名を設定、CGIの有効化を行っている。
sudo apt-get install -y apache2 sudo sed -i -e 's/^\t#ServerName www\.example\.com$/\tServerName www.example.jp/' /etc/apache2/sites-available/000-default.conf sudo a2enmod cgid sudo systemctl restart apache2
GnuDIPのダウンロードと展開と配置
GnuDIPのダウンロードに使うwgetをインストールして、GnuDIPのアーカイブをダウンロード、展開して出来たgnudipディレクトリを/usr/local/に配置して、オーナーをrootに変更している。
sudo apt-get install -y wget wget http://gnudip2.sourceforge.net/gnudip-www/src/gnudip-2.3.5.tar.gz tar zxvfi gnudip-2.3.5.tar.gz sudo mv gnudip-2.3.5/gnudip /usr/local sudo chown -R root:root /usr/local/gnudip
GnuDIPのデータベースの設定
フラットデータベースを使うために、シンボリックリンクを張り直す。
cd /usr/local/gnudip/lib sudo ln -sf dbprefs_flat.pm dbprefs.pm sudo ln -sf dbusers_flat.pm dbusers.pm
GnuDIPのキーファイルの再生成
ダイナミックDNSの更新に使うキーファイルを作り直すので、既存のものを削除、tsig-keygenコマンドで作成、書き換えたり、他のユーザから見たり出来ないようにパーミッションを設定、GnuDIPの設定に記載されているキーファイルのファイル名を作成したものに書き換える。
sudo rm /usr/local/gnudip/etc/Kgnudip-key.* sudo tsig-keygen -a HMAC-SHA512 gnudip-key | sudo tee /usr/local/gnudip/etc/gnudip-key.key sudo chmod 400 /usr/local/gnudip/etc/gnudip-key.key sudo sed -i -e 's/Kgnudip-key\.[\+\.0-9]*\.private/gnudip-key.key/' /usr/local/gnudip/etc/gnudip.conf
GnuDIPのキーファイルをDNSサーバの設定に追加
GnuDIPのキーファイルでダイナミックDNSの更新が行えるように、ドメインに対応するゾーンファイルの定義を一旦削除して、キーファイルの内容の追加と、ドメインに対応するゾーンファイルの定義を再度行う。update-policyを追加して、denyで更新されたくないホスト名を、grantで更新対象となるドメイン名を指定している。
sudo sed -i -e '/^zone "example\.jp" {$/,$d' /etc/bind/named.conf.local sudo chmod 640 /etc/bind/named.conf.local sudo cat /usr/local/gnudip/etc/gnudip-key.key | sudo tee -a /etc/bind/named.conf.local cat << EOT | sudo tee -a /etc/bind/named.conf.local zone "example.jp" { type master; file "db.example"; update-policy { deny gnudip-key name ns.example.jp.; deny gnudip-key name www.example.jp.; deny gnudip-key name mail.example.jp.; grant gnudip-key subdomain example.jp.; }; }; EOT sudo systemctl reload bind9
GnuDIPの管理者ユーザを作成
GnuDIPのログインに使う管理者を、ユーザ名とパスワードを指定して作成する。
sudo /usr/local/gnudip/sbin/gdipadmin.pl admin bbs68sys
GnuDIPをWebサーバで公開する
GnuDIPの一部ファイルは古いApacheを前提しているので削除とリネームを行い、Webサーバからアクセスできるようにパーミッションを修正した後、ApacheでGnuDIPのディレクトリを公開するための設定を作成して、有効化した後、Apacheの再読み込みを行って反映させる。
sudo rm /usr/local/gnudip/html/.htaccess sudo mv /usr/local/gnudip/html/header.html /usr/local/gnudip/html/HEADER.html sudo chown -R www-data:www-data /usr/local/gnudip/run/* sudo chown -R www-data:www-data /usr/local/gnudip/etc/* cat << EOT | sudo tee /etc/apache2/conf-available/gnudip.conf Alias /gnudip/html/ /usr/local/gnudip/html/ <Directory "/usr/local/gnudip/html"> Options Indexes FollowSymLinks Require all granted </Directory> ScriptAlias /gnudip/cgi-bin/ /usr/local/gnudip/cgi-bin/ <Directory "/usr/local/gnudip/cgi-bin"> Options +ExecCGI Require all granted </Directory> EOT sudo a2enconf gnudip sudo systemctl reload apache2
GnuDIPの初回設定
- Webブラウザで http://www.example.jp/gnudip/cgi-bin/gnudip.cgi を開く
- Username/Hostnameに管理者のユーザ名、Passwordに管理者のパスワードを入力して、Login
- Add Domainから、Go
- Domain Nameに example.jp を入力、Allow Password Changesにチェックを入れて、Add Domain