テスト等に利用しているサーバーはインターネットからのアクセスのためにDynamicDNSを利用している。固定IPは取得していない。Flet’sひかりの先のプロバイダから動的に割り振られるIPアドレスを利用している。

今まではDynのDynamicDNSサービスを利用していたが、現在取得しているドメインはenomの管理な上、enomがDynamicDNSを提供していることを(今頃やっと)知った。
Dynamic DNS updates

現在のドメインでのサーバーFQDNにDynのDynamic DNSのFQDNをCNAMEを張っていたのだがenomのみで完結できるので、enomがDynamicDNSを利用してみることにした。

enom_ddclient

現在のサーバーには、Dynamic DNSのIP書き換えにddclient3.8.1(yum版)が入っている。

 
# yum info  ddclient
Loaded plugins: fastestmirror, presto, priorities
Determining fastest mirrors
epel/metalink                                                                                                                            | 6.6 kB     00:00
Loaded plugins: fastestmirror, presto, priorities
Loading mirror speeds from cached hostfile
 * base: www.ftp.ne.jp
 * epel: ftp.iij.ad.jp
 * extras: www.ftp.ne.jp
 * updates: www.ftp.ne.jp
Installed Packages
Name        : ddclient
Arch        : noarch
Version     : 3.8.1
Release     : 1.el6
Size        : 176 k
Repo        : installed
From repo   : epel
Summary     : Client to update dynamic DNS host entries
URL         : http://ddclient.sourceforge.net/
License     : GPLv2+
Description : ddclient is a Perl client used to update dynamic DNS entries for accounts
            : on many different dynamic DNS services. Features include: Operating as a
            : daemon, manual and automatic updates, static and dynamic updates, optimized
            : updates for multiple addresses, MX, wildcards, abuse avoidance, retrying
            : the failed updates and sending update status to syslog and through e-mail.

問題なく動作しているので、このままenomのDynamic DNS書き換えに使えないかと思ったがそのままではNGのようだ。 enom対応にpatchが必要らしい。 次の手順でパッチを充ててみた。

ddclientのソースを取得・展開。

 
# mkdir ddclient
# wget http://downloads.sourceforge.net/project/ddclient/ddclient/ddclient-3.8.1/ddclient-3.8.1.tar.gz?r=http%3A%2F%2Fsourceforge.net%2Fp%2Fddclient%2Fwiki%2FHome%2F&ts=1382406058&use_mirror=jaist
# tar xvfz ddclient-3.8.1.tar.gz
# cd ddclient-3.8.1/

パッチを取得、適用。

 
# wget http://sourceforge.net/apps/trac/ddclient/raw-attachment/ticket/29/enom.patch
# patch ddclient < enom.patch

一応、ddclientのチェック。よさそうだ。

 
# perl -c ddclient
ddclient syntax OK

オリジナルのddclientスクリプトとdiffを取ってみると、enomのprotocolが追加されている。

コレを/usr/sbin/ddclientに上書き。

 
# cp ddclient /usr/sbin/
cp: overwrite `/usr/sbin/ddclient'? y

設定ファイルの位置が/etc/ddclient.conf→/etc/ddclient/ddclient.confに変わってしまったので、フォルダ位置を変更する。ついでに付属のsample-etc_ddclient.confから設定をやりなおす。

 
# mkdir /etc/ddclient/
# cp sample-etc_ddclient.conf /etc/ddclient/ddclient.conf

ddclient.conf

daemon=300				# check every 300 seconds
syslog=yes				# log update msgs to syslog
mail=root				# mail all msgs to root
mail-failure=root			# mail failed update msgs to root
#pid=/var/run/ddclient.pid		# record PID in file.
pid=/var/run/ddclient/ddclient.pid

ssl=yes					# use ssl-support.  Works with
					# ssl-library

#fw-login=admin,             fw-password=XXXXXX		# FW login and password
fw-login=routerloginid,      fw-password=routerloginpassword	# FW login and password

#
## To obtain an IP address from FW status page (using fw-login, fw-password)
#use=fw, fw=192.168.1.254/status.htm, fw-skip='IP Address' # found after IP Address
use=fw,fw=http://192.168.1.1/cgi-bin/main.cgi?mbg_webname=status&config_no=1, fw-skip='' # found after IP Address
#
## To obtain an IP address from Web status page (using the proxy if defined)
## by default, checkip.dyndns.org is used if you use the dyndns protocol. 
## Using use=web is enough to get it working.
## WARNING: set deamon at least to 600 seconds if you use checkip or you could
## get banned from their service.
#use=web, web=checkip.dyndns.org/, web-skip='IP Address' # found after IP Address
#

・
・
・
##
## DtDNS (www.dtdns.com)
##
# protocol=dtdns,
# server=www.dtdns.com,
# client=ddclient,
# password=my-dtdns.com-password
# myhost.dtdns.net, otherhost.dtdns.net

# 最後に以下を追加
## enom single host update
protocol=enom,                                   \
login=mydomain.com,                              \
password=enompassword                   \
www

以下のコマンドでチェックしてみると、

 
/usr/sbin/ddclient -foreground -debug  -force | more

書き換えた場所は ・pidファイルのパス ・GlobalIPを取得する方法。今回はFirewall(Flet'sのブロードバンドルーター PR-S300SE)のステータス画面から取得。 ※以前はdyndnsのIPチェックサービスを利用していた。

 
 # dyndnsのIPチェックサービスの場合の設定
 use=web, web=checkip.dyndns.org/, web-skip='IP Address' # found after IP Address

・enomのログイン(ドメイン名)、パスワード、書き換えるホスト名。 これは ddclient --helpで説明が表示される。

 
 # /usr/sbin/ddclient --help
o 'enom'

The 'enom' protocol is used by DNS services offered by www.enom.com and their resellers.

Configuration variables applicable to the 'enom' protocol are:
  protocol=enom                ##
  server=fqdn.of.service       ## defaults to dynamic.name-services.com
  login=domain.name            ## base domain name
  password=domain-password     ## the domain password registered with the service
  A_record                     ## the A record(s) registered with the service

Example ddclient.conf file entries:
  ## single host update
  protocol=enom,                                   \
  login=mydomain.com,                              \
  password=mydomain.com-password                   \
  www

  ## multiple host update
  protocol=enom,                                   \
  login=mydomain.com,                              \
  password=mydomain.com-password                   \
  www,mail,*

最後にチェックのために強制的に更新してみると、うまく動作した!

 
 # /usr/sbin/ddclient -foreground -debug  -force | more
# /usr/sbin/ddclient -foreground -debug  -force | more
DEBUG:    proxy  =
DEBUG:    url    = http://192.168.1.1/cgi-bin/main.cgi?mbg_webname=status&config_no=1
DEBUG:    server = 192.168.1.1
DEBUG:    opt(fw =
DEBUG:    glo fw = http://192.168.1.1/cgi-bin/main.cgi?mbg_webname=status&config_no=1
DEBUG:    get_ip: using fw, http://192.168.1.1/cgi-bin/main.cgi?mbg_webname=status&config_no=1 reports 138.113.60.151
DEBUG:
DEBUG:     enom_update -------------------
DEBUG:    proxy  =
DEBUG:    url    = http://dynamic.name-services.com/interface.asp?Command=SetDNSHost&HostName=www&Zone=mydomain.com&DomainPassword=passwd&Address=138.113.60.151
DEBUG:    server = dynamic.name-services.com
DEBUG:    opt(fw =
DEBUG:    glo fw = http://192.168.1.1/cgi-bin/main.cgi?mbg_webname=status&config_no=1
SUCCESS:  updating www: good: IP address set to 138.113.60.151

最後にキレイに?強制的にddclientを再起動。

 
 killall ddclient
 /etc/init.d/ddclient restart

今のところうまく行ってるようだ。