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