DDNSを利用して外部へサーバ公開をする
サーバ公開をはじめるにあたって、固定IPアドレスを契約しようと当初は考えていたけれど、できるだけ安くcentOS用のサーバを購入し、ありものだけで自宅のネットワーク環境をそれに合わせて変更をしていると、ここで月額でいくらか払うのは「可能な限り安くやり遂げる」という路線を最後の最後で外れてしまうような気がしていて、そもそも月額1000円近く固定IPアドレスに払うのであれば、はじめからServerManやさくらでVPSでサーバ借りたほうがよっぽどかお値打ちであることは間違いない。
ということで、DDNSを利用して外部公開をすることにしました。
どのDDNSにしようかな
今回は自身がお名前.comで取得した独自ドメインであるno1497.comを自宅サーバに割り当てたい。
どうやらお名前.comもDDNSには対応しているらしいけど、クライアントソフトがWindowsにしか対応していない時点でNG。
過去にieServerを利用していたけど、自宅の動的グローバルIPアドレスをieServerが準備したドメインとしか紐付けできないのでNG。
となるとmyDNSとNo-IPの比較になる。
サービス内容はほぼほぼ変わらないけれど、myDNSはシェルスクリプトをcronでまわすことでIPアドレスの更新ができそうなのでmyDNSにすることに決定。
No-IPもできるみたいだけど、制限がどんどんきつくなっているみたいなので避けておく。
ドメイン構成図を決める
ドメインツリー構造をどうしようか悩む。
no1497.comのZone ApexをそのままmyDNSに移管することは避けたい。なぜなら、AWS上で遊ぶために利用するaws.no1497.comであるとか、ブログ用のサブドメインであるとか、いろいろとお名前.comのネームサーバ上で動いているためです。
なので、ひとまずはds.no1497.comというサブドメインを新規作成し、その配下をmyDNSのネームサーバ管理とすることにしました。no1497.com自体は引き続きお名前.com配下としました。将来的にはno1497.com自体を自宅サーバ用に割り当てる予定。
こういうツリーから
こう変えます。
早速設定してみました
流れとしては以下の感じ。
- myDNSでアカウント登録。
- お名前.com上で、NSレコードを追加。ds.no1497.comとmyDNS指定のネームサーバを紐付けるようなNSレコードです。
- 自宅のcentOSサーバが定期的にmyDNSのログインページをwgetするスクリプトをcronにより現在の動的グローバルIPアドレスを定期通知させるように設定。
定期更新スクリプト
以下が参考になる。
1時間に一回くらいの更新でいいかな。上記サイトより引用。
# MyDNS
wget -O - --http-user=hogehoge --http-password=fugafuga http://www.mydns.jp/login.html
定期更新はいいけど・・・TTLはいくつなの?
myDNSで配布されるレコードのTTLが一体いくつなんだろうか。
更新しても、1日経たないとクライアントが再度レコードを取りに来てくれなければ意味がない。ということで調べてみました。
[root@localhost ~]# dig ds.no1497.com @ns0.mydns.jp
; <<>> DiG 9.8.2rc1-RedHat-9.8.2-0.62.rc1.el6_9.2 <<>> ds.no1497.com @ns0.mydns.jp
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 42948
;; flags: qr aa rd; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 0
;; WARNING: recursion requested but not available;; QUESTION SECTION:
;ds.no1497.com. IN A;; ANSWER SECTION:
ds.no1497.com. 300 IN A 14.3.191.236;; Query time: 15 msec
;; SERVER: 210.197.74.200#53(210.197.74.200)
;; WHEN: Sun May 14 21:25:15 2017
;; MSG SIZE rcvd: 47
TTLは5分ですね。