<ドメイン名取得と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回は苦にならないと思います。