<ドメイン名取得とDDNS>

グローバルIPアドレスをドメイン名ja3rua.ddns.netでwebサーバーに接続するための
サービスです。いくつかあるサービスの中でNo-Ip.comを使用させていただいています。(無料)
登録詳細はno-ipで検索してヒットした、サイトを見てください。本家サイトはhttp://www.noip.com/です。(2018/9/23更新)



DDNSサービスは、ドメイン名をグローバルIPアドレスに変換してくれます。(上記)

プロバイダーから発行されるグローバルIPアドレスは、DDNSサービス(No-Ip.com)に登録しなければなりません。
そして、登録後に@グローバルIPアドレスが変化すれば、更新しなければなりません。
また、@が発生しなくても、A30日毎に定期的に更新しなければなりません。(noip.comの場合)

今まで、@Aの作業を自作プログラムで自動更新していましたが出来なくなりました。(2017/7)


@は、プロバイダーがグローバルIPアドレスを変更した場合、あるいはモデムの電源が
落ちて変化した場合などがあります。この変化を知ることが出来れば更新できます。
(モデムの電源をON/OFFすれば、一定時間待てば復旧する場合がある)
Aは、noip.comから、期限(30日)切れの約1週間前に、登録しているメールアドレスに期限切れの
メールが来ますので更新をします。

@については、一定時間毎にグローバルアドレスを取得して変化していないか調べて
変化していたらno-ip.comにアクセスして更新する。
そのプログラム(ddnsrua.sh)尚、<は半角にして下さい
-------------------------------------------------------------------------------
#!/bin/bash

######################################################################
#              2017/07/15  Ver ddnsrua.sh     ja3rua                 #
#1時間間隔でcman.comでIPアドレスを取得して以前のIPアドレスと比較     #
#(毎時0、10、20、30、40、50)                                         #
#                                                                    #
#積算時間毎にled点滅は別途回路必要、この部分は無くてもよい           #
######################################################################

#########
# func1 #
#########
func1() {
#echo $sec
flug1=1
#<< comentout  #ここからcomentoutまでコメント
# cmanで現IPアドレスを取得してcmanipaddファイルに書き込み、cmanipaddファイルから #
# グローバルIPアドレスのみ取出してbeipaddファイルに書き込む                     #

######現在のIPアドレス取得######
curl https://www.cman.jp/network/support/go_access.cgi > cmanipadd

#IPアドレスのみ取出す(var keyHostNameのある行にグローバルIPアドレスがあるので、この行を変数gipaddに代入)
gipadd=`grep "var keyHostName" cmanipadd`

#gipaddの文字列の中からIPアドレス(xxx.xxx.xxx.xxx)だけを抽出cuipaddに代入
n1=${#gipadd}
n2=2 
n=$(( n1 - n2 ))
cuipadd=`echo $gipadd | cut -c 19-$n`  #19文字目から33文字目までの180.147.126.228をcuipaddに代入

echo -n "cuipadd="
echo $cuipadd
###############################


#cuip文字列長さ確認用
#lencuip=${#cuipadd}
#echo $lencuip

######アクセスログ(cmanlogfile)を取る#######
hizuke=`date "+%Y/%m/%d %H:%M:%S" `

echo -n "hizuke="
echo $hizuke

cmanlog="${cuipadd}  "$hizuke
echo $cmanlog >> cmanlogfile
############################################


#以前と現在のIPアドレス比較して、違うと更新、同じだとしない################

# 以前のグローバルIPアドレスを読む#
read_beipadd=./beipadd
while read line; do
beipadd=$line
done < $read_beipadd
echo -n "beipadd="
echo $beipadd
#以前と現在のIPアドレス比較#
if [ $cuipadd = $beipadd ] ; then
echo -n $cuipadd " = " 
echo -n $beipadd " "
echo -n "DDNS更新しない"
date "+%Y/%m/%d %H:%M:%S"

else

echo -n $cuipadd " ≠ "
echo -n $beipadd " "
#新グローバルIPアドレスをbeipaddファイルに書き込む
echo $cuipadd > beipadd
echo -n "DDNS更新する"
date "+%Y/%m/%d %H:%M:%S"
#関数の呼出(no-ip.comにアクセスしてIPアドレス更新)
func2
fi
}
######

#########
# func2 #
#########
func2() {
echo "func2アクセスしています"
hizuke=`date "+%Y/%m/%d %H:%M:%S" `
echo "定期アクセスddnsrua3m"$hizuke >> teikilogfile
flug2=1
#<< comentout  #ここからcomentoutまでコメント
#no-ip.comアクセスしてddns実行、出力されるIPアドレスをnoipaddに書き込む
#このnoipaddはno-ip.comの動作確認用なので他で使うことはない。
#USERNAMEとPASSWORDを記述する
sudo curl "https://USERNAME:PASSWORD@dynupdate.no-ip.com/nic/update?hostname=ja3rua.ddns.net" > noipadd

#noipaddからIPアドレスを取出す
read_noip=./noipadd
while read line; do
noipadd=$line
done < $read_noip

#noipaddの文字数取得した後-1する(改行コードを取る)
lennoip=${#noipadd}
lennoip=$((lennoip - 1))


noipadd=`echo $noipadd | cut -c 1-$lennoip`  #1文字目からlennoip文字をnoipaddに代入
hizuke=`date "+%Y/%m/%d %k:%M:%S" `
noiplog="${noipadd} "$hizuke
echo $noiplog
#no-ip.comアクセスlogをnoiplogfileに書き込む
echo $noiplog >> noiplogfile

}

#####ここまで関数#####

####################
# メインプログラム #
####################

flug1=0
flug2=0
flug3=0
hr_cnt=0

flug1_1=0 #00min
flug1_2=1 #10min
flug1_3=0 #20min
flug1_4=1 #30min
flug1_5=0 #40min
flug1_6=1 #50min



echo -n "hr_cnt="
echo $hr_cnt

while [ true ]
do
#秒位置を取り込む
hizuke=`date "+%Y/%m/%d %H:%M:%S"`  #コマンドで返す文字を変数に入れるには` #`で囲む
sec=`date "+%S"`
min=`date "+%M"`
hr=`date "+%H"`
day=`date "+%d"`

#echo -n "YmdHMS="
#echo $hizuke

#毎時00分毎にIPアドレスの変化をチェック
##xxH00M00Sにfunc1### 毎時00分00秒 ######################
if [ $min = "00" -a $sec = "00"  -a $flug1 -eq 0 -a $flug1_1 -eq 0 ] ; then
func1
fi
#次のfunc1を有効にさせる
if [ $min = "00" -a $sec = "01"  -a $flug1 -eq 1 -a $flug1_1 -eq 0 ] ; then
flug1=0
fi


#毎時10分毎にIPアドレスの変化をチェック
##xxH00M00Sにfunc1### 毎時00分00秒 ######################
if [ $min = "10" -a $sec = "00"  -a $flug1 -eq 0 -a $flug1_2 -eq 0 ] ; then
func1
fi
#次のfunc1を有効にさせる
if [ $min = "10" -a $sec = "01"  -a $flug1 -eq 1 -a $flug1_2 -eq 0 ] ; then
flug1=0
fi

#毎時20分毎にIPアドレスの変化をチェック
##xxH00M00Sにfunc1### 毎時00分00秒 ######################
if [ $min = "20" -a $sec = "00"  -a $flug1 -eq 0 -a $flug1_3 -eq 0 ] ; then
func1
fi
#次のfunc1を有効にさせる
if [ $min = "20" -a $sec = "01"  -a $flug1 -eq 1 -a $flug1_3 -eq 0 ] ; then
flug1=0
fi

#毎時30分毎にIPアドレスの変化をチェック
##xxH00M00Sにfunc1### 毎時00分00秒 ######################
if [ $min = "30" -a $sec = "00"  -a $flug1 -eq 0 -a $flug1_4 -eq 0 ] ; then
func1
fi
#次のfunc1を有効にさせる
if [ $min = "30" -a $sec = "01"  -a $flug1 -eq 1 -a $flug1_4 -eq 0 ] ; then
flug1=0
fi

#毎時40分毎にIPアドレスの変化をチェック
##xxH00M00Sにfunc1### 毎時00分00秒 ######################
if [ $min = "40" -a $sec = "00"  -a $flug1 -eq 0 -a $flug1_5 -eq 0 ] ; then
func1
fi
#次のfunc1を有効にさせる
if [ $min = "40" -a $sec = "01"  -a $flug1 -eq 1 -a $flug1_5 -eq 0 ] ; then
flug1=0
fi

#毎時50分毎にIPアドレスの変化をチェック
##xxH00M00Sにfunc1### 毎時00分00秒 ######################
if [ $min = "50" -a $sec = "00"  -a $flug1 -eq 0 -a $flug1_6 -eq 0 ] ; then
func1
fi
#次のfunc1を有効にさせる
if [ $min = "50" -a $sec = "01"  -a $flug1 -eq 1 -a $flug1_6 -eq 0 ] ; then
flug1=0
fi
##########################################################################################


#経過時間積算###########
#if [ $hr = "00" -a $min = "00" -a $sec = "00"  -a $flug2 -eq 0 ] ; then
if [ $min = "00" -a $sec = "00"  -a $flug2 -eq 0 ] ; then

flug2=1
hr_cnt=$(($hr_cnt + 1))
echo -n "hizuke="
echo $hizuke
echo -n "積算時間="
echo -n $hr_cnt
fi
#if [ $hr = "00" -a $min = "00" -a $sec = "01"  -a $flug2 -eq 1 ] ; then
if [ $min = "00" -a $sec = "01"  -a $flug2 -eq 1 ] ; then
flug2=0
fi
######################


#積算時間毎にled点滅
if [ $hr_cnt = 1 -a flug3=0 ] ; then
flug3=1
sudo ./led1.sh &
echo -n "hizuke="
echo $hizuke
echo -n "積算時間="
echo -n $hr_cnt
fi

if [ $hr_cnt = 2 -a flug3=1 ] ; then
flug3=0
sudo killall led1.sh
sudo ./led2.sh &
echo -n "hizuke="
echo $hizuke
echo -n "積算時間="
echo -n $hr_cnt
fi

if [ $hr_cnt = 3 -a flug3=0 ] ; then
flug3=1
sudo killall led2.sh
sudo ./led3.sh &
echo -n "hizuke="
echo $hizuke
echo -n "積算時間="
echo -n $hr_cnt
fi

if [ $hr_cnt = 4 -a flug3=1 ] ; then
flug3=0
sudo killall led3.sh
sudo ./led4.sh &
echo -n "hizuke="
echo $hizuke
echo -n "積算時間="
echo -n $hr_cnt
fi

if [ $hr_cnt = 5 -a flug3=0 ] ; then
flug3=1
sudo killall led4.sh
sudo ./led5.sh &
echo -n "hizuke="
echo $hizuke
echo -n "積算時間="
echo -n $hr_cnt
fi

if [ $hr_cnt = 6 -a flug3=1 ] ; then
flug3=0
sudo killall led5.sh
sudo ./led6.sh &
echo -n "hizuke="
echo $hizuke
echo -n "積算時間="
echo -n $hr_cnt
fi

if [ $hr_cnt = 7 -a flug3=0 ] ; then
flug3=1
sudo killall led6.sh
sudo ./led7.sh &
echo -n "hizuke="
echo $hizuke
echo -n "積算時間="
echo -n $hr_cnt
fi


done
-------------------------------------------------------------------------------

Aについては、登録しているメールアドレスに期限切れのメールが来たら更新します。

<次のようにメールが来ます>



<メール内容>


ja3rua.ddns.net is expiring soon
                
ja3rua.ddns.net はまもなく期限が切れる

  Please confirm your hostname now. Inactive hostnames are removed from

our system if they are not confirmed every 30 days. This policy helps keep

                   only active hostnames on our network. 

今すぐホスト名を確認してください。30日ごとに確認されていない場合、非アクティブなホスト名はシステムから削除されます。
このポリシーは、ネットワーク上のアクティブなホスト名のみを維持するのに役立ちます。

Click the button above to confirm your hostname, or copy/paste the

                following link into your browser:

上記のボタンをクリックして、ホスト名を確認するか以下のリンクをブラウザにコピー/ペーストします。





no-ip.comにアクセス(Languageで日本語を選択)


ログインします、メールアドレスとパスワードを入力


ダイナミックDNSのところクリック


確かめますをクリック


修正しますをクリック


ホスト名を更新をクリック


右上に成功 ja3rua.ddnd.netが更新されました


以上、ログアウトする。そして、しばらくしてからログインして確認してみる。
(29日で有効期限となって更新されている)


簡単な操作ですので30日に1回は苦にならないと思います。