DiCE for Linuxの設定方法



●概要

 DynamicDNSサービス”利用者のためのクライアントツール(フリーウェア)です。
 DynamicDNSサービスはとても便利でありがたいサービスなのですが、IPアドレスが変わるたびにわざわざ登録サイトに行って更新作業をしなくてはなりません。DiCEはそんな作業を自動化してくれます。

 設定条件は下記のようにします。
  • event 0:IPアドレス変化時、およびIPアドレスに変化が無くても28日に1回通知
  • これによりISP側メンテナンスなどで不意にIPアドレスが変わっても即時に対応できるようにします。サーバに1ヶ月以上更新情報がまた、IPアドレスの変化がないときでも28日に一度は通知を実施するようにします。

●インストール
# cd /usr/local/bin
# wget http://www.hi-ho.ne.jp/cgi-bin/user/yoshihiro_e/download.cgi?p=diced019
# wget http://www.hi-ho.ne.jp/yoshihiro_e/dice/diced01914.tar.gz
--2012-04-11 23:23:38--  http://homepage3.nifty.com/sarad/diced01914.tar.gz
homepage3.nifty.com をDNSに問いあわせています... 61.121.100.78, 2001:258:8602:351:202:248:175:225
homepage3.nifty.com|61.121.100.78|:80 に接続しています... 接続しました。
HTTP による接続要求を送信しました、応答を待っています... 200 OK
長さ: 1094082 (1.0M) [application/x-gzip]
`diced01914.tar.gz' に保存中
100%[======================================>] 1,094,082    884K/s 時間 1.2s    
2012-04-11 23:23:39 (884 KB/s) - `diced01914.tar.gz' へ保存完了 [1094082/1094082]
 展開します。
# tar zxvf diced01914.tar.gz
DiCE/
DiCE/diced
DiCE/ipcheck.dat
DiCE/plug-in/
DiCE/plug-in/dion.plo
DiCE/plug-in/odn.plo
DiCE/plug-in/ZENNO.COM.plg
DiCE/plug-in/livedoor.plg
DiCE/plug-in/MyDNS.JP.plg
DiCE/plug-in/pcc.jp.plg
DiCE/plug-in/JPN.ch.plg
DiCE/plug-in/gnudip2t.plo
DiCE/plug-in/MyIP.US.plg
DiCE/plug-in/nifty.plo
DiCE/plug-in/@nifty.plg
DiCE/plug-in/StaticCling.plg
DiCE/plug-in/dns2go.plo
DiCE/plug-in/MyServer.plg
DiCE/plug-in/minid08.plo
DiCE/plug-in/ddns.ca.plg
DiCE/plug-in/p2p.plg
DiCE/plug-in/did.expoze.com.plg
DiCE/plug-in/Dynamx.plg
DiCE/plug-in/WebReactor.plg
DiCE/plug-in/unicc.plo
DiCE/plug-in/unicc.plg
DiCE/plug-in/Earth.plg
DiCE/plug-in/DNS2Go.plg
DiCE/plug-in/instat.plg
DiCE/plug-in/Now.nu.plg
DiCE/plug-in/onamae.plo
DiCE/plug-in/dynDNS.it.plg
DiCE/plug-in/onamae.com.plg
DiCE/plug-in/DION.plg
DiCE/plug-in/ODN.plg
DiCE/plug-in/RegisterFly.plg
DiCE/plug-in/DHS.plg
DiCE/plug-in/Netservers.plg
DiCE/plug-in/todd.plg
DiCE/plug-in/USA.plg
DiCE/plug-in/cjb.plg
DiCE/plug-in/Dyn.ee.plg
DiCE/plug-in/BIGLOBE.plg
DiCE/plug-in/biglobe.plo
DiCE/plug-in/dnip.plg
DiCE/plug-in/3domain.plg
DiCE/plug-in/miniDNS.plg
DiCE/plug-in/gnudip23.plo
DiCE/plug-in/my-domain.plg
DiCE/plug-in/ZoneEdit.plg
DiCE/plug-in/ZiVE.plg
DiCE/plug-in/yi.plg
DiCE/plug-in/ysdn.plg
DiCE/plug-in/theBBS.plg
DiCE/plug-in/SelfHOsT.plg
DiCE/plug-in/ddo.jp.plg
DiCE/plug-in/No-IP.plg
DiCE/plug-in/nicolas.plg
DiCE/plug-in/eNom.plg
DiCE/plug-in/CyberGate.plg
DiCE/plug-in/EveryDNS.plg
DiCE/plug-in/Microtech.plg
DiCE/plug-in/ieServer.plg
DiCE/plug-in/HAMMERNODE.plg
DiCE/plug-in/GetmyIP.plg
DiCE/plug-in/Dynup.plg
DiCE/plug-in/Dynu.plg
DiCE/plug-in/dyns.plg
DiCE/plug-in/DynDSL.plg
DiCE/plug-in/DynDNSdk.plg
DiCE/plug-in/dyndns.plg
DiCE/plug-in/DtDNS.plg
DiCE/plug-in/dnsQ.plg
DiCE/plug-in/dhs.plg
DiCE/plug-in/DDNS.nu.plg
DiCE/plug-in/cheapnet.plg
DiCE/plug-in/changeIP.plg
DiCE/plug-in/ARTofDNS.plg
DiCE/plug-in/VALUEDOMAIN.plg
DiCE/plug-in/ODS.plg
DiCE/plug-in/JSPEED.plg
DiCE/plug-in/IPDYN.plg
DiCE/plug-in/DnsTokyo.plg
# rm -f diced01914.tar.gz
# cd
 これでインストールが完了しました。

●DiCEの設定

 次にDiCEを起動してDDNSサービスへのIPアドレス通知のスケジュール設定を行います。
 ここで端末の文字コード設定をUTF-8からEUC-JPに変更してください。UTF-8では文字化けしてしまいます。端末画面のメニューバーの[端末(T)]から[文字コードの設定(C)]で切り替えます。
 DiCEの出力文字コードがEUC-JPのため、下記のように実行します。
 $ setarch `uname -m` /usr/local/bin/DiCE/diced | nkf -uw
 実行すると下記が表示されることがあります。
setarch: /usr/local/bin/DiCE/diced の実行に失敗しました: そのようなファイルやディレクトリはありません
 「ld-linux.so.2」がインストールされていませんので、「glibc」をインストールしてください。
# dnf install ld-linux.so.2
依存関係が解決しました。
====================================================================================================================================
 パッケージ                   アーキテクチャー            バージョン                            リポジトリー                  サイズ
====================================================================================================================================
インストール:
 glibc                        i686                        2.28-158.el8                          baseos                        3.4 M
  :
  :

 利用できるコマンドは下記のとおりです。『?』で表示させることができます。
*** 起動オプション ***
diced [-s|-d|-h|-e] [-b] [-l]
 -s           起動と同時に開始します
 -d           起動と同時にバックグラウンドで開始します
 -h           コマンドオプションを表示します
 -b           イベント実行時にビープ音を鳴らします
 -l           ログを作成します
 -e  指定のイベントを実行して終了します
*** コマンド一覧 ***
exit             DiCEを終了します
start            DiCEを開始します
startd           DiCEをバックグラウンドで開始します
setup            DiCEの環境設定を行います
list             登録済のイベント一覧を表示します
add              イベントを追加します
ed[it] <番号>    イベントを編集します
del <番号>       イベントを削除します
en[able] <番号>  イベントを有効にします
dis[able] <番号> イベントを無効にします
ev[ent] <番号>   イベントの情報を表示します
ex[ec] <番号>    イベントを今すぐ実行します
logcr            ログをクリアします
 では、初期設定をします。
# setarch `uname -m` /usr/local/bin/DiCE/diced | nkf -uw
下記の画面が表示されない場合は
DiCEの設定画面が起動しない場合を参照してください
=-=-=- DiCE DynamicDNS Client -=-=-=
Version 0.19 for Japanese
Copyright(c) 2001 sarad
:setup
IPアドレスの検出方法を指定してください
(0) 自動検出
(1) ローカルのネットワークアダプタから検出
(2) 外部のスクリプトから検出
<現在:0>
(N)変更しない  (P)戻る
>2
-------------------------------------------------
スクリプトのURLを入力してください
<現在:>
(N)変更しない  (P)戻る
>http://info.ddo.jp/remote_addr.php
-------------------------------------------------
プライベートIPアドレスも検出対象ですか? (Y/N)
<現在:いいえ>
(P)戻る
>n
-------------------------------------------------
IPアドレスの検出をテストしますか? (Y/N)
(P)戻る
>y
検出IPアドレス>218.***.***.***
-------------------------------------------------
IPアドレスの検出をテストしますか? (Y/N)
(P)戻る
>n
-------------------------------------------------
IPアドレスをチェックする間隔を指定してください(分)
設定可能範囲は5分以上です
<現在:10>
(N)変更しない  (P)戻る
>5
=================================================
DNSサーバーの負荷を軽減するために頻繁なDNS更新を防ぐ必要があります
前回の更新から一定時間DNS更新処理を行わないように保護時間を設定して
ください(分)  設定可能範囲は10分から1440分です
<現在:10>
(N)変更しない  (P)戻る
>10
=================================================
設定を保存しますか? (Y/N)
(P)戻る
>y
設定を保存しました
=================================================
:
 主旨に沿ってIPアドレス通知の実施スケジュールを設定します。
# setarch `uname -m` /usr/local/bin/DiCE/diced | nkf -uw
:add
新しくイベントを追加します
DynamicDNSサービス名を入力してください
"?"で対応しているサービスを一覧表示します
(P)戻る
>MyDNS.JP
-------------------------------------------------
ドメイン名を入力してください
"?"でドメイン一覧を表示します
(P)戻る
>mydns.jp
=================================================
ホスト名を入力してください
(P)戻る
>bigbang
=================================================
ログインユーザ名を入力してください
(P)戻る
>username
=================================================
ログインパスワードを入力してください
(P)戻る
>********
=================================================
登録するIPアドレスを入力してください
空白にすると現在のIPアドレスを自動検出します
(P)戻る
> # 何も入力せずEnter。
=================================================
このイベントに題名を付けてください
(P)戻る
>mydns.jp<IPアドレス変化時>
=================================================
このイベントを実行するスケジュールを設定します
-------------------------------------------------
実行する頻度を指定してください (番号入力)
(0)1回のみ (1)1日1回 (2)1週間に1回 (3)1ヵ月に1回
(4)その他の周期 (5)IPアドレス変化時 (6)起動時
(P)戻る
>5
-------------------------------------------------
IPアドレスがあまり変化しない環境の場合、更新せずに一定期間を過ぎると
アカウントを削除されてしまうことがあります
IPアドレスの変化が無い時に実行する間隔を指定してください
(0)7日毎   (1)14日毎  (2)21日毎  (3)28日毎
(4)35日毎  (5)56日毎  (6)84日毎
(P)戻る
>3
=================================================
詳細オプションを設定します
-------------------------------------------------
[ ワイルドカード ]
(0)OFF (1)ON 
番号>0
-------------------------------------------------
[ メールエクスチェンジャ ]
入力>
-------------------------------------------------
[ バックアップMX ]
(0)NO (1)YES 
番号>0
-------------------------------------------------
[ オフライン ]
(0)NO (1)YES 
番号>0
-------------------------------------------------
[ システム ]
(0)dyndns (1)statdns (2)custom 
番号>0
=================================================
このイベントを有効にしますか? (Y/N)
(イベントの有効/無効は"EN/DIS"コマンドで切替えられます)
>y
=================================================
イベントを保存しますか? (Y/N)
>y
イベント"更新<IPアドレス変化時>"を保存しました
=================================================
:exit
 これでセットアップは完了です。

●設定確認と動作検証

 listコマンドで設定した内容を確認し、exコマンドで初回通知を実施します(今回はevent 0を実施)。その上でevコマンドでDiCEの実行結果ログを確認します
:list
(No.)   (イベント名)                   (スケジュール)             (次回予定) 
  0 *  mydns.jp<IPアドレス変化時>   IPアドレス変化時 (28日毎) 08/13 14:19 
:ev 0
-------------------------------------------------
[イベント名        ] mydns.jp<IPアドレス変化時>
[状態              ] 有効
[DNSサービス       ] MyDNS.JP
[更新ホスト        ] bigbang.mydns.jp
[ユーザ名          ] username
[IPアドレス        ] 
[スケジュール      ] IPアドレス変化時 (28日毎)
[次回更新日時      ] 2019年8月13日、14:19:39
[最終実行日時      ] 1899年12月30日、0:00:00
[最終更新IPアドレス] *
[最終更新結果      ] コマンドが実行されました
(ID:000000)
-------------------------------------------------
:ex 0
+ 7/16 14:24 にmydns.jp<IPアドレス変化時>が実行されました
  IPアドレスを更新しました
:ev 0
-------------------------------------------------
[イベント名        ] mydns.jp<IPアドレス変化時>
[状態              ] 有効
[DNSサービス       ] MyDNS.JP
[更新ホスト        ] bigbang.mydns.jp
[ユーザ名          ] username
[IPアドレス        ] 
[スケジュール      ] IPアドレス変化時 (28日毎)
[次回更新日時      ] 2019年8月13日、14:24:13
[最終実行日時      ] 2019年7月16日、14:24:13
[最終更新IPアドレス] 211.***.***.***
[最終更新結果      ] IPアドレスを更新しました
(ID:000000)
-------------------------------------------------
:exit
# 
 上記[最終更新結果]で『IPアドレスを更新しました』と表示されれば自宅サーバ側は成功です。

●DiCEのデーモン化と自動起動設定

 DiCEをデーモンとして動作させ、サーバー再起動時も自動起動させます。
# setarch `uname -m` /usr/local/bin/DiCE/diced -s -l >> /usr/local/bin/DiCE/log/dice.log &
# echo "`uname -m` /usr/local/bin/DiCE/diced -s -l >> /usr/local/bin/DiCE/log/dice.log &" >> /etc/rc.d/rc.local
 /etc/rc.d/rc.localが存在しない場合、下記のように作成します。
# vi /etc/rc.d/rc.local
#!/bin/bash
setarch i686 /usr/local/bin/DiCE/diced -s -l >> /usr/local/bin/DiCE/log/dice.log &
 ↑ i686はCPUにより変わります。
# chmod +x /etc/rc.d/rc.local
 以上で完了です。

●DiCEの設定画面が起動しない場合

 「setarch `uname -m` /usr/local/bin/DiCE/diced | nkf -uw」を実行しても、以下のように応答がない場合があります。
# setarch `uname -m` /usr/local/bin/DiCE/diced | nkf -uw
(応答がない)
 これは「バッファオーバーフロー攻撃防御機構(Exec-Shield)」が有効になっている場合に起こることが多々あるようです。  余談ですが、Exec-Shieldとは、Fedora・CentOSでスタックオーバーフロー/バッファオーバーフロー/関数ポインタオーバーフロー攻撃からの保護や、メモリ内のデータ構造を上書きする別種のセキュリティ攻撃からの保護を実現するためものです。Exec-Shield機能が追加され、セキュリティが強化されています。
 Exec-Shieldの設定ファイルを確認します。
# cat /proc/sys/kernel/exec-shield
2
上記数値の意味
0:常に無効
1:マークされたバイナリを有効にし、以外は無効
2:マークされたバイナリを無効にし、以外は有効
3:常に有効
 Exec-Shieldが有効になっている場合(「2」または「3」)は、「1」にレベルを下げてみましょう。
# echo 1 > /proc/sys/kernel/exec-shield
 DiCEの設定が終了したら設定を元に戻しておく方が安全です。

●exec-shieldの値が「2」のままDiceを起動すると負荷が高くなってしまう

 何故か/proc/sys/kernel/exec-shieldの値を「2」のままDiceを動作しつづけるとload averageが高くなってしまうことが分かりました。

graph_image.php_20120516.png

 Diceを手動で停止させ、/proc/sys/kernel/exec-shieldの値を「1」に変更後、再度動作させたところ回復しました。
 その後、Diceを起動状態で/proc/sys/kernel/exec-shieldの値を「2」に変更しましたがload averageは低いままです。

●setarchコマンドによるDicedの起動について

exec-shieldの値を「1」に設定しないと、うまく動作しなかった(2012.05.16)

 CentOSにはexec-shieldというカーネルレベルでのバッファオーバーフロー攻撃防御機能が備わっており、この機能によりDicedが起動できない場合がああります。exec-shieldを無効化(/proc/sys/kernel/exec-shieldに0を設定)または緩めれば(/proc/sys/kernel/exec-shieldに1を設定)Dicedは起動できるようになります
 しかし、バッファオーバーフロー攻撃はクラッキングの常套手段であり、これに対するセキュリティ機能を無効化したり緩めたりするのはセキュリティ上好ましくないので、Dicedのみexec-shieldが効かないようにして起動するようにします。
# setarch `uname -m` /usr/local/bin/DiCE/diced ← DiCE設定スクリプト実行
# setarch `uname -m` /usr/local/bin/DiCE/diced -d -l ← DiCEを常駐モードで起動
# echo "setarch `uname -m` /usr/local/bin/DiCE/diced -d -l" >> /etc/rc.locald ← DiCE自動起動設定


●/lib/ld-linux.so.2: bad ELF interpreterと表示された場合の対処

 dicedの実行時に下記のようなエラーが表示された場合は、ld-linux.so.2をインストールしてください。
# setarch `uname -m` /usr/local/bin/DiCE/diced | nkf -uw
-bash: /usr/local/bin/DiCE/diced: /lib/ld-linux.so.2: bad ELF interpreter: そのようなファイルやディレクトリはありません
# yum install ld-linux.so.2


●DiCEを起動するとCPU使用率が高くなる場合の対処方法

 参照URL:DiCEのCPU使用率が高い件

 /etc/rc.d/rc.localに記載されている内容を変更するだけです。
# vi /etc/rc.d/rc.local
setarch `uname -m` /usr/local/bin/DiCE/diced -d -l
 ↓
/usr/local/bin/DiCE/diced -s -l >> /usr/local/bin/DiCE/log/dice.log &