スポンサーリンク

【4ステップ】お名前.comで購入したDNSを定期的に更新する方法

★悩み★
・お名前.comで購入したDNSを定期的に更新する方法を知りたいな。
・「お名前.comのドメイン」と「グローバルIP」の対応付けを定期的に更新する方法を知りたい。
・Linux系のパソコン上で定期的に更新する方法を知りたい。


こういった「悩み」に答えます。

★本記事の内容★
① お名前.comで購入したDNSを定期的に更新したい背景をご紹介
② お名前.comで購入したDNSを定期的に更新する方法をご紹介


これからご紹介する「お名前.comで購入したDNSを定期的に更新する方法」を実践したことで、筆者は30分以内でお名前.comで購入したDNSを定期的に更新できました。

記事の前半では「お名前.comで購入したDNSを定期的に更新したい背景」を解説しつつ、記事の後半では「お名前.comで購入したDNSを定期的に更新する方法」をご紹介します。

この記事を読み終えることで、「お名前.comで購入したDNSを定期的に更新する方法」を把握した状態になります。

ちなみに、「お名前.comのドメインを購入し、設定する方法」が気になる方は、以下の記事をご覧ください。

お名前.comで購入したDNSを定期的に更新したい背景

お名前.comで購入したDNSを定期的に更新したい背景をご紹介します。

★ご紹介の流れ★
・お名前.comで購入したDNSを定期的に更新したい背景をご紹介
・どうやって「お名前.comで購入したDNSを定期的に更新する」かをご紹介


上記の流れでご紹介します。

お名前.comで購入したDNSを定期的に更新したい背景

お名前.comで購入したDNSを定期的に更新したい背景に関してご説明します。

以下の記事でご紹介しましたが、プロバイダーの機器などを再起動した場合、グローバルIPが変わります。

グローバルIPが変わった場合、お名前.comに設定した以下の対応情報を更新する必要があります。


「グローバルIP」と「お名前.comのドメイン(例:kakedashi-xx.com)」の対応情報

上記の対応情報は、以下の記事でご紹介した手順を再度実施することで更新できます。

しかし、「毎日、手動で更新する」ことは手間がかかり、いつか更新作業をしなくなりますよ。

そういった理由から、上記の対応情報を定期的に自動で更新する仕組みを作るべきと考えました。

以上が、「お名前.comで購入したDNSを定期的に更新したい背景」となります。

どうやって「お名前.comで購入したDNSを定期的に更新する」か

どうやって「お名前.comで購入したDNSを定期的に更新する」か?をご紹介します。

まずは、「お名前.comがAPIを提供しているか?」を調査してみました。

Google検索したところ、Windowsマシンで「お名前.comで購入したDNSを定期的に更新する」以下のソフトがあるらしいです。

・管理画面へログインしなくても、IPアドレスの更新ができます。
・自動的にコンピューターのIPアドレスをチェックし、更新することができます。

https://help.onamae.com/answer/7920


残念なことに「Linux系のマシンで動作するソフト」や「API」は、お名前.comとしては提供していないようです。

「お名前ドットコム ddns 更新 linux」とGoogle検索したところ、「openssl」を使ってLinux系マシンから更新可能と判明しました。

以降で、OpenSSLで行う一連の操作をシェルスクリプト化し、「お名前.comのDNSを定期的に更新する仕組み」を作る方法をご紹介します。

★OpenSSLとは★
OpenSSLとは、インターネット上で標準的に利用される暗号通信プロトコルであるSSLおよびTLSの機能を実装したプログラムの一つ。

参照:http://e-words.jp/w/OpenSSL.html

OpenSSLとは、あるマシンと通信する際に暗号化して通信を行いセキュリティ品質を担保する仕組みです。


以上が、どうやって「お名前.comで購入したDNSを定期的に更新する」かに関してでした。

以上が、「お名前.comで購入したDNSを定期的に更新したい背景」でした。

お名前.comで購入したDNSを定期的に更新する方法

お名前.comで購入したDNSを定期的に更新する方法をご紹介します。

★ご紹介の流れ★
ステップ1:お名前.comのDNSに対応付けるグローバルIPを確認
ステップ2:OpenSSLを用いてお名前.comのDNSを更新
ステップ3:お名前.comのDNSを更新するシェルスクリプトを作成
ステップ4:Cronでお名前.comのDNSを定期的に更新


上記の流れで、「お名前.comで購入したDNSを定期的に更新する方法」をご紹介します。

ステップ1:お名前.comのDNSに対応付けるグローバルIPを確認

「お名前.comのDNSに対応付けるグローバルIPを確認」に関してご紹介します。

現在のグローバルIPを確認する方法に関して記載します。

以下の記事で、グローバルIPを確認する方法をご紹介させていただきました。

今回は下記の方法を使い取得することにします。

# curl inet-ip.info
xx.xx.xx.xx

シェルスクリプトでjsonを扱うためには、追加のライブラリを導入する必要があり、その導入が面倒なため、上記を採用しました。


以上で、「ステップ1:お名前.comのDNSに対応付けるグローバルIPを確認」は完了です。

ステップ2:OpenSSLを用いてお名前.comのDNSを更新

「OpenSSLを用いてお名前.comのDNSを更新」に関してご紹介します。

Linux系のマシン上で「ターミナル」を起動しましょう。

次に下記コマンドを実行し、お名前.comのサーバーと接続します。

# openssl s_client -connect ddnsclient.onamae.com:65010 -quiet

続いて、下記の情報を素早く入力します。
(数秒未入力な状態が続くと、お名前.comのサーバーとの通信が遮断されます。)

LOGIN
USERID:ここにお名前.comのお名前ID
PASSWORD:ここにお名前.comのパスワード
.
MODIP
HOSTNAME:ここに更新対象のホスト名★未設定の場合は空欄で大丈夫です。★
DOMNAME:ここに更新対象のドメイン名★お名前.comで購入したドメイン名を入力します。★
IPV4:ここに更新するIPアドレス★現在のグローバルIPアドレスを入力します。★
.
LOGOUT


その後、ドメインNaviにログインし、ドメイン名とグローバルIPアドレスの対応付け情報が更新されることを確認します。(下図の赤四角)



上図のVALUE部分が更新されていれば、無事に「OpenSSLを用いてお名前.comのDNSを更新」できたことになります。

以上で、「ステップ2:OpenSSLを用いてお名前.comのDNSを更新」は完了です。

ステップ3:お名前.comのDNSを更新するシェルスクリプトを作成

「お名前.comのDNSを更新するシェルスクリプトを作成」に関してご紹介します。

ステップ2で実施した手順をシェルスクリプト化します。

作成したシェルスクリプト(ファイル名は、update-onamae-dns.shです。)は、以下となります。

# 設定
domain="kakedashi-xx.com"   # お名前.comで購入したドメイン名
onamecom_userid="xxxxxxx"   # お名前.comのユーザ名
onamaecom_passwd="xxxxxxxx" # お名前.comのパスワード
target_hostname=""          # 更新したいホスト名
target_domain="${domain}"   # 更新したいドメイン名


# 現在のグローバルIPアドレスを取得
current_global_ip_addr=$(curl inet-ip.info)

# 現在、ドメイン名に紐づいているグローバルIPアドレスを取得
domain_ip_addr=`dig ${domain} +short`

# ドメイン名に紐づいているIPアドレスを更新
if [ "${current_global_ip_addr}" != "${domain_ip_addr}" ]; then
  command_line="LOGIN\nUSERID:${onamecom_userid}\nPASSWORD:${onamaecom_passwd}\n.\nMODIP\nHOSTNAME:${target_hostname}\nDOMNAME:${target_domain}\nIPV4:${current_global_ip_addr}\n.\nLOGOUT\n.\n"
  echo -e "${command_line}" | openssl s_client -connect ddnsclient.onamae.com:65010 -quiet
  echo "更新をしました。${domain_ip_addr} => ${current_global_ip_addr}"
else
  echo "更新は、必要ありませんでした。"
fi

今回、苦労した部分は、opensslコマンドに対してどうやって「LOGIN」などの入力情報を渡すかという部分です。


update-onamae-dns.shを実行し、下記の出力結果が表示されれば正常に動作していることになります。

[更新が必要だった場合]
# sh update-onamae-dns.sh
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100    15  100    15    0     0     51      0 --:--:-- --:--:-- --:--:--    51
depth=2 OU = GlobalSign Root CA - R3, O = GlobalSign, CN = GlobalSign
verify return:1
depth=1 C = BE, O = GlobalSign nv-sa, CN = GlobalSign RSA DV SSL CA 2018
verify return:1
depth=0 CN = *.onamae.com
verify return:1
000 COMMAND SUCCESSFUL
.
000 COMMAND SUCCESSFUL
.
000 COMMAND SUCCESSFUL
.
000 COMMAND SUCCESSFUL
.
更新をしました。xx.xx.xx.xx => yy.yy.yy.yy 

[更新が不必要だった場合]
# sh update-onamae-dns.py
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100    15  100    15    0     0    288      0 --:--:-- --:--:-- --:--:--   288
更新は、必要ありませんでした。


以上で、「ステップ3:お名前.comのDNSを更新するシェルスクリプトを作成」は完了です。

ステップ4:Cronでお名前.comのDNSを定期的に更新

「Cronでお名前.comのDNSを定期的に更新」に関してご紹介します。

以下の記事で紹介したCronを使い、先ほど作成したupdate-onamae-dns.pyを定期的に実行するように登録しましょう。

Cronに登録する情報は、以下となります。

# crontab -e
28 8 * * * /usr/bin/sh /root/blog/update-onamae-dns.sh > /tmp/cron.log


上記のように登録することで、「毎日、11時28分に自動的にドメイン名を更新し、ログが/tmp/cron.logに出力される」ようになります。

/usr/bin/shに関しては、Linux系のマシン上で「which sh」の実行結果に置き換えてください。


以上で、「ステップ4:Cronでお名前.comのDNSを定期的に更新」は完了です。

上記の4ステップで、「お名前.comで購入したDNSを定期的に更新する方法」を実現できました。

【まとめ】お名前.comで購入したDNSを定期的に更新する方法

今回の記事を通して、「お名前.comで購入したDNSを定期的に更新する方法」をご紹介することで、以下の悩みを解消しました。

★悩み★
・お名前.comで購入したDNSを定期的に更新する方法を知りたいな。
・「お名前.comのドメイン」と「グローバルIP」の対応付けを定期的に更新する方法を知りたい。
・Linux系のパソコン上で定期的に更新する方法を知りたい。


お名前.comで購入したDNSを定期的に更新する方法?」で悩んでいるあなたにこの記事が少しでも役に立てれば幸いです。

コメント

  1. max より:

    Ubuntu20.04でのDDNS更新に役立ちました。ありがとうございました。

    • hero より:

      maxさん:
      コメントおよび情報共有ありがとうございました。
      「Ubuntu20.04でのDDNS更新」の実現に向けて、本記事が少しでも役に立ったとのことで、嬉しい限りです。
      その他困りごとなどがありましたら、遠慮なくお申し付けください。
      一人のIT技術者として、解決のお役に立てればと思っています。

タイトルとURLをコピーしました