inadynを使い、dyndnsをLinux OS から自動でアップデートする

自宅でサーバ運用されている方々はダイナミックDNSサービスを使われている方も多いのではないでしょうか?本格的なサーバの方は固定IP+有料ホスト名を取得されている方もいるかもしれませんが、手軽で格安に運用できるダイナミックDNSはまだまだ魅力的です。しかし、ダイナミックDNSでサーバ運用する時の問題は、リンクが切れた時にIPアドレスが変わってしまうことです。万が一切れてしまった時に被害を最小限にするべく、LinuxからダイナミックDNSを自動で更新する設定をしたいと思います。

1.クライアントを選ぶ

私は長年dyndnsのサービスを使用しているので、dyndnsで使えるクライアントを前提にしたいと思います。

dyndnsでupdaterについてヘルプをみるとLinuxには3種類あることが記載されています。
%e3%82%b9%e3%82%af%e3%83%aa%e3%83%bc%e3%83%b3%e3%82%b7%e3%83%a7%e3%83%83%e3%83%88-2017-01-07-19-02-24
Installation Guideというのがdyndnsオフィシャルなアップデータです。しかしながら見てみるとGUIベースのアプリケーションであり、CLIで運用しているサーバには不向きです。
次にddclientを見てみます。これは見てみるとperlベースのアップデータの様です。これもperl環境をインストールしなければ行けないので、一旦保留。
inadynはなんとCベースのアップデータの様なので、inadynを入れたいと思います。

2.インストール

方法は面倒くさいので詳細はここには記載しませんが、Ubuntuであれば

# apt-get install inadyn

だけでインストール出来るようです。

3.設定

dyndnsのヘルプを見るとサンプルコンフィグまで記載してあるので、簡単に設定可能です。

サンプルどおりにコマンドでアップデート

#inadyn --username test --password test --update_period_sec 600 --alias test.homeip.net

でも良いですし、コンフィグファイルを作成し、inadynに読み込ませてもOKです。
コンフィグ

# Basic configuration file for inadyn
#
# /etc/inadyn.conf
update_period_sec 600 # Check for a new IP every 600 seconds
username test
password test
dyndns_system dyndns@dyndns.org
alias test.homeip.net

起動

# inadyn --input_file /etc/inadyn.conf --background --log_file /var/log/inadyn.log

こんなログが出ればアップデート成功。

#tail -f /var/log/inadyn.log
INADYN: Started 'INADYN version 1.96.2' - dynamic DNS updater.
I:INADYN: IP address for alias 'test.homeip.net' needs update to '133.133.133.133'
I:INADYN: Alias 'test.homeip.net' to IP '133.133.133.133' updated successful.

後は起動時のプロセスが立ち上がるように、/etc/rc.local 等に記載しておきましょう。

19/05/23 追記:apt-getでインストールした場合 serviceとしても登録されている。
# /etc/init.d/inadyn
デーモンとして使いたい場合は以下のファイルを編集する。
#vi /etc/default/inadyn

# Please note, /etc/inadyn.conf should be properly configured before
# running inadyn

# Set to "yes" if inadyn should run in daemon mode
# If this is changed to "yes", RUN_IPUP must be set to "no".
RUN_DAEMON="no"

# Set to "yes" if inadyn should be run every time a new ppp connection is
# established. This might be useful, if you are using dial-on-demand.
RUN_IPUP="no"

# The user and group that inadyn should be run as.
USER="debian-inadyn"
GROUP="debian-inadyn"

を以下の様に修正する。

# Please note, /etc/inadyn.conf should be properly configured before
# running inadyn

# Set to "yes" if inadyn should run in daemon mode
# If this is changed to "yes", RUN_IPUP must be set to "no".
RUN_DAEMON="yes"

# Set to "yes" if inadyn should be run every time a new ppp connection is
# established. This might be useful, if you are using dial-on-demand.
RUN_IPUP="no"

# The user and group that inadyn should be run as.
USER="root"
GROUP="root"

コンフィグファイルの場所は以下
/etc/inadyn.conf

4.問題発生

ちゃんとサンプル通りに設定しても、以下の様なエラーが出て、アップデート出来るときと出来ないときがある。

INADYN: Started 'INADYN version 1.96.2' - dynamic DNS updater.
W: DYNDNS: Error 'RC_IP_CONNECT_FAILED' (0x13) when talking to IP server
W:'RC_IP_CONNECT_FAILED' (0x13) updating the IPs. (it 0)

まあ、アップデート出来るときもあるから、良いかな?と放っておいたら、サーバにアクセス出来なくなったときがあるので、真面目に問題解決してみる。

5.’RC_IP_CONNECT_FAILED’ (0x13)

色々調べてみると、アップデートする前に自身のIPアドレスを “checkip.dyndns.org” に問い合わせに行っている模様 実際ブラウザに入れてみると、”Current IP Address: 133.133.133.133″の様に表示されるが、何回かに一回うまく表示されない場合がある。

そこで、checkip.dyndns.orgをnslookupしてみると

#nslookup -timeout=5 checkip.dyndns.org
Non-authoritative answer: checkip.dyndns.org canonical name = checkip.dyndns.com. 
Name: checkip.dyndns.com Address: 216.146.43.70 
Name: checkip.dyndns.com Address: 91.198.22.70 
Name: checkip.dyndns.com Address: 216.146.38.70

3つ出てくるので、ブラウザで直接IPアドレスを入れてみる。

あれ?216.146.38.70 だけ表示されない・・・どうやらサーバが死んでいる模様。

そこで、生きているサーバだけを直打ちすることとする。

コンフィグでは ip_server_name 後ろにホスト名を記載するのだが、ここでIPアドレスを直打ち

ip_server_name 216.146.43.70:8245 /

後ろに ”/” をつけないと、うまく動いてくれません。またどこかの掲示板で:8245つけたほうがレスポンス早いというので、やってみたら確かにはやい、なので、上記としました。

6.最終的にコンフィグは以下

update_prriod_sec で確認する間隔を指定。念のため1時間に一回は強制的にアップデートしたいと思ったので、forced_update_period も指定してみた。

現在このコンフィグで安定的にアップデートが出来ている模様です。

# cat /etc/inadyn.conf

forced_update_period 3600 #1hour
update_period_sec 60 #1min
username test
password test
dyndns_system dyndns@dyndns.org
alias test.homeip.net
ip_server_name 216.146.43.70:8245 /

2019/6/6追記

最近のバージョンだとシステム指定のコンフィグの書き方が若干違うようです。

# Please see inadyn(8) for a complete list of providers
system default@dyndns.org

7.参考文献

Dyn Update Clients
Ubuntu 12.04 : inadyn でダイナミック DNS 設定
Linux Update Client: inadyn
事象の判明に繋がった掲示板:RC_IP_CONNECT_FAILED

# inadyn --help



			INADYN Help

	INADYN is a dynamic DNS client. That is, it maintains the IP address
of a host name. It periodically checks whether the IP address of the current machine
(the external visible IP address of the machine that runs INADYN) has changed.
If yes it performs an update in the dynamic dns server.

Typical usage: 
	-for dyndns.org system: 
		inadyn -u username -p password -a my.registrated.name 
	-for freedns.afraid.org:
		 inadyn --dyndns_system default@freedns.afraid.org -a my.registrated.name,hash -a anothername,hash2
			 'hash' is extracted from the grab url batch file that is downloaded from freedns.afraid.org

Parameters:
	'--help': help
	'-h': help
	'--username': your  membername/ hash
	'-u': your  membername / hash
	'--password': your password. Optional.
	'-p': your password
	'--alias': alias host name. this option can appear multiple times.
	'-a': alias host name. this option can appear multiple times.
	'--input_file': the file containing [further] inadyn options.The default config file, '/etc/inadyn.conf' is used if inadyn is called without any cmd line options.
	'--ip_server_name': <srv_name[:port] local_url> - local IP is detected by parsing the response after returned by this server and URL. 
		The first IP in found in http response is considered 'my IP'. 
		Default value: 'checkip.dyndns.org /
	'--dyndns_server_name': [[:port]] 
		The server that receives the update DNS request.  
		Allows the use of unknown DNS services that accept HTTP updates.
		If no proxy is wanted, then it is enough to set the dyndns system. The default servers will be taken.
	'--dyndns_server_url': 
	full URL relative to DynDNS server root.
	Ex: /some_script.php?hostname=

	'--dyndns_system': [NAME] - optional DYNDNS service type. SHOULD be one of the following: 
		-For dyndns.org DNS system: dyndns@dyndns.org OR statdns@dyndns.org OR customdns@dyndns.org.
		-For freedns.afraid.org DNS system: default@freedns.afraid.org
		-For www.zoneedit.com DNS system: default@zoneedit.com
		-For www.no-ip.com DNS system: default@no-ip.com
		-For generic DNS system: custom@http_svr_basic_auth
		DEFAULT value is intended for default service at dyndns.org (most users): dyndns@dyndns.org
	'--proxy_server': [NAME[:port]]  - the http proxy server name and port. Default is none.
	'--update_period': how often the IP is checked. The period is in [ms]. Default is about 1 min. Max is 10 days
	'--update_period_sec': how often the IP is checked. The period is in [sec]. Default is about 1 min. Max is 10 days
	'--forced_update_period': how often the IP is updated even if it is not changed. [in sec]
	'--log_file': log file path abd name
	'--background': run in background. output to log file or to syslog
	'--verbose': set dbg level. 0 to 5
	'--iterations': set the number of DNS updates. Default is 0, which means infinity.
	'--syslog': force logging to syslog . (e.g. /var/log/messages). Works on **NIX systems only.
	'--change_persona': after init switch to a new user/group. Parameters: <uid[:gid]> to change to. Works on **NIX systems only.
	'--version': print the version number

コメントを残す

メールアドレスが公開されることはありません。