Rock Linuxにddclientパッケージをインストールして、DDNS(dynu.com)にバッファロー Wi-Fi ルータの外部IPアドレスを登録する。
前提として、以下の設定が完了していること。
1.dynu.comにユーザ登録して、 ルータの外部IPアドレスが登録できる環境であること。
2.ルータのログ情報がrsyslogサーバに転送されて、ログ内容が参照可能なこと。
3.ルータのログ情報が日単位で、ログローテートされていること。
ddclientパッケージをインストールする。
# dnf -y install ddclient
Wi-Fi ルータの外部IPアドレス取得シェルを作成する。
ルータのログからルータの外部IPアドレスが更新された情報を取得するシェルである。
本シェルをddclientシェル内で実行してDDNSに外部IPアドレスを登録させる。
前提:
1./var/log/router/messages.logが最新のルータログ
2.ログローテートされた前日のルータログのパスは以下である。
/var/log/router/messages.log-YYYYMMDD
3.ログローテートされた2日前以上のルータログのパスは以下である。
/var/log/router/messages.log-YYYYMMDD.gz
# vi /usr/local/sbin/get_router_ip.sh # cat /usr/local/sbin/get_router_ip.sh #!/bin/bash CHECKWORD="DHCPC: bound to" ・・・・・・・・・・・・・・・・・・・・・・・① SYSLOG=/var/log/router/messages.log ・・・・・・・・・・・・・・・・・・・② OLDSYSLOG=ls /var/log/router/messages.log-* | grep -v .gz$ |tail -n 1 ・・③ RESULT="" RESULT=`cat ${OLDSYSLOG} ${SYSLOG} | grep "${CHECKWORD}" | tail -n 1 | awk '{ print $11 }}'` ・・④ if [ X"${RESULT" != X"" ]; then echo ${RESULT} > /var/tmp/get_router_IP ・・・・・・・・・・・・・・・・ ⑤ fi cat /var/tmp/get_router_IP
① Wi-Fi ルータが外部 IP アドレスを取得した時に表示されるメッセージの一部。
② Wi-Fi ルータの最新ログのパス。
③ ログローテートした前日のルータログを取得する。
④ 前日のログと最新のログから外部IPアドレスが更新された最新のメッセージを
取得して、更新されたIPアドレス($11)を取得する。
⑤ 取得したIPアドレスをファイルに書き込む。
ルータの外部IPアドレスが更新されない時は、ファイルを更新しない。
Wi-Fi ルータを再起動する。
シェルの動作確認のためWi-Fi ルータを再起動する。
Wi-Fi ルータにログインして、外部IPアドレスを確認する。
シェルの動作を確認する。
# bash -x /usr/local/sbin/get_router_ip.sh + CHECKWORD='DHCPC: bound to' ++ ls /var/log/router/messages.log /var/log/router/messages.log-20240216.gz /var/log/router/messages.log-20240217.gz /var/log/router/messages.log-20240218.gz /var/log/router/messages.log-20240219.gz /var/log/router/messages.log-20240220.gz /var/log/router/messages.log-20240221 /var/log/router/messages.log-20240222 ++ grep -v '.gz$' ++ tail -n 1 + OLDSYSLOG=/var/log/router/messages.log-20240222 + RESULT= ++ cat /var/log/router/messages.log-20240222 /var/log/router/messages.log ++ grep 'DHCPC: bound to' ++ awk '{ print $11 }' ++ tail -n 1 + RESULT=123.87.999.999 + '[' X123.87.999.999 '!=' X ']' + echo 123.87.999.999 + cat /var/tmp/get_router_IP + 123.87.999.999 # # chmod 755 /usr/local/sbin/get_router_ip.sh
ddclientを設定する。
# cp -p /etc/ddclient.conf /etc/ddclient.conf_org # vi /etc/ddclient.conf # diff -c /etc/ddclient.conf_org /etc/ddclient.conf *** /etc/ddclient.conf_org 2024-02-01 22:22:44.564400025 +0900 --- /etc/ddclient.conf 2024-02-22 22:26:36.356142939 +0900 *************** *** 21,27 **** #mail=root # mail all msgs to root mail-failure=root # mail failed update msgs to root pid=/run/ddclient/ddclient.pid # record PID in file. ! ssl=yes # use ssl-support. Works with # ssl-library # postscript=script # run script after updating. The # new IP is added as argument. --- 21,27 ---- #mail=root # mail all msgs to root mail-failure=root # mail failed update msgs to root pid=/run/ddclient/ddclient.pid # record PID in file. ! ssl=no ・・① # use ssl-support. Works with # ssl-library # postscript=script # run script after updating. The # new IP is added as argument. *************** *** 58,73 **** #use=if, if=eth0 # via interfaces #use=web # via web # ! #protocol=dyndns2 # default protocol #proxy=fasthttp.sympatico.ca:80 # default proxy #server=members.dyndns.org # default server #server=members.dyndns.org:8245 # default server (bypassing proxies) ! #login=your-login # default login ! #password=test # default password #mx=mx.for.your.host # default MX #backupmx=yes|no # host is primary MX? #wildcard=yes|no # add wildcard CNAME? ## ## dyndns.org dynamic addresses --- 58,78 ---- #use=if, if=eth0 # via interfaces #use=web # via web # ! protocol=dyndns2 ・・② # default protocol #proxy=fasthttp.sympatico.ca:80 # default proxy #server=members.dyndns.org # default server #server=members.dyndns.org:8245 # default server (bypassing proxies) + server=api.dynu.com ! use=cmd,cmd='/usr/local/sbin/get_router_ip.sh' ・・③ ! ! login=test000 ・・④ # default login ! password=abcd1234 ・・⑤ # default password #mx=mx.for.your.host # default MX #backupmx=yes|no # host is primary MX? #wildcard=yes|no # add wildcard CNAME? + hoge.hogehoge.com ・・⑥ ## ## dyndns.org dynamic addresses #
① SSL接続を無効化する。
②プロトコルとしてdyndns2を有効化する。
③作成したシェルの出力するIPアドレスを利用する。
④⑤DDNSにログインするためのユーザIDとパスワードを記述する。
⑥IPアドレスを設定するDDNSに登録しているドメインを記述する。
複数のWEBサイトが有るのなら複数記述することも可能である。
ddclientをデバックモードで実行する。
# /usr/sbin/ddclient -daemon=0 -debug -verbose -noquiet === opt ==== opt{cache} : opt{cmd} : opt{cmd-skip} : opt{daemon} : 0 opt{debug} : 1 opt{exec} : opt{facility} : opt{file} : opt{force} : opt{foreground} : opt{fw} : opt{fw-banlocal} : opt{fw-login} : opt{fw-password} : opt{fw-skip} : opt{geturl} : opt{help} : opt{host} : opt{if} : opt{if-skip} : opt{ip} : opt{ipv6} : opt{login} : opt{mail} : opt{mail-failure} : opt{max-interval} : 2160000 opt{min-error-interval} : 300 opt{min-interval} : 30 opt{options} : opt{password} : opt{pid} : opt{postscript} : opt{priority} : opt{protocol} : opt{proxy} : opt{query} : opt{quiet} : 0 opt{retry} : opt{server} : opt{ssl} : opt{syslog} : opt{test} : opt{timeout} : opt{use} : opt{verbose} : 1 opt{web} : opt{web-skip} : === globals ==== globals{cmd} : /usr/local/sbin/get_router_ip.sh globals{daemon} : 60 globals{debug} : 1 globals{login} : tkusama globals{mail-failure} : root globals{password} : telchan0 globals{pid} : /run/ddclient/ddclient.pid globals{protocol} : dyndns2 globals{quiet} : 0 globals{server} : api.dynu.com globals{ssl} : 0 globals{syslog} : 1 globals{use} : cmd globals{verbose} : 1 === config ==== config{lnxdvr.com}{atime} : 0 config{lnxdvr.com}{backupmx} : 0 config{lnxdvr.com}{cacheable} : ARRAY(0x55ae0fff08) config{lnxdvr.com}{cmd} : /usr/local/sbin/get_router_ip.sh config{lnxdvr.com}{cmd-skip} : config{lnxdvr.com}{custom} : 0 config{lnxdvr.com}{fw} : config{lnxdvr.com}{fw-banlocal} : 0 config{lnxdvr.com}{fw-login} : config{lnxdvr.com}{fw-password} : config{lnxdvr.com}{fw-skip} : config{lnxdvr.com}{host} : lnxdvr.com config{lnxdvr.com}{if} : ppp0 config{lnxdvr.com}{if-skip} : config{lnxdvr.com}{ip} : config{lnxdvr.com}{ipv6} : 0 config{lnxdvr.com}{login} : hoge config{lnxdvr.com}{max-interval} : 2160000 config{lnxdvr.com}{min-error-interval} : 300 config{lnxdvr.com}{min-interval} : 30 config{lnxdvr.com}{mtime} : 0 config{lnxdvr.com}{mx} : config{lnxdvr.com}{password} : hogehoge config{lnxdvr.com}{protocol} : dyndns2 config{lnxdvr.com}{script} : /nic/update config{lnxdvr.com}{server} : api.dynu.com config{lnxdvr.com}{static} : 0 config{lnxdvr.com}{status} : config{lnxdvr.com}{use} : cmd config{lnxdvr.com}{warned-min-error-interval} : 0 config{lnxdvr.com}{warned-min-interval} : 0 config{lnxdvr.com}{web} : dyndns config{lnxdvr.com}{web-skip} : config{lnxdvr.com}{wildcard} : 0 config{lnxdvr.com}{wtime} : 30 === cache ==== cache{lnxdvr.com}{atime} : 0 cache{lnxdvr.com}{backupmx} : 0 cache{lnxdvr.com}{custom} : 0 cache{lnxdvr.com}{host} : hoge.hogohoge.org cache{lnxdvr.com}{ip} : 123.87.999.999 cache{lnxdvr.com}{mtime} : 1707309351 cache{lnxdvr.com}{mx} : cache{lnxdvr.com}{script} : /nic/update cache{lnxdvr.com}{static} : 0 cache{lnxdvr.com}{status} : good cache{lnxdvr.com}{warned-min-error-interval} : 0 cache{lnxdvr.com}{warned-min-interval} : 0 cache{lnxdvr.com}{wildcard} : 0 cache{lnxdvr.com}{wtime} : 30 DEBUG: get_ip: using cmd, /usr/local/sbin/get_router_ip.sh reports 123.87.999.999 SUCCESS: hoge.hogehoge.org: skipped: IP address was already set to 123.87.999.999 #
ddclientコマンドを再起動時に自動起動させる。
システム起動時に実行される「/etc/rc.local」ファイルに登録することにより、自動起動される。
daemonモード(常駐モード)で起動し、300秒(5分)ごとに実行させる。
# cp -p /etc/rc.local /etc/rc.local_org # vi /etc/rc.local # diff /etc/rc.local_org /etc/rc.local 17a18,19 > > /usr/sbin/ddclient -daemon 300 -syslog #
daemonモードで起動する。
現在ddclientが起動していないので、ddclientをdaemonモードで実行する。
# /usr/sbin/ddclient -daemon 300 -syslog