DDNSにDDNS Nowを使っていて、自動更新にはDiCEを使ってきた。が、数日前から外部からのドメイン名によるアクセスが不通になっていた。
原因調査
DiCEの手動での更新を実行して1日待ったがアクセスできるようにはならず。
長くても24時間で反映されるはずが、24時間待ってもアクセスができない。こんなに時間がかかるのもおかしいと思い、ちょっと調べてみたら、DiCEが認識しているグローバルIP(赤枠の部分)がおかしい。ルータが示しているグローバルIPのアドレスや自分のネットワークのグローバルIPを調べるサイトで得られるアドレスと違っている。
DiCEを再起動したり再インストールしたりしたが変わらず。グローバルIPが引けないとこのブログもまともに表示されないなど、いくつか困ったことになるので、これ以上DiCEにこだわるのは中止した。
解決
他の方法を考えたり、調べたりしていたら、DDNS Nowにcronでの実行方法が書かれていたので、これを試してみる。まずはcronに登録する前にコマンドラインで実実行してみた。(オレンジの部分は環境に合わせて変更する)
curl -X POST -d 'domain=hogehoge&password=hagehage' https://mogemoge/update.php
あっけなく実行して1分後には外部からアクセスできるようになった。
そこで下記コマンドを実行してcrontabのエディタを開き、
sudo crontab -e
下記の1行を追加した。
0-59 * * * * curl -X POST -d 'domain=hogehoge&password=hagehage' https://mogemoge/update.php
エディタをバックグラウンドに落とさす、ちゃんと終了させて登録されたか確認。
hoge@cf-n10:~$ sudo crontab -l
[sudo] hogeのパスワード:
(中略)
0-59 * * * * curl -X POST -d 'domain=hogehoge&password=hagehage' https://mogemoge/update.php
反省とか
異常発生が(多分)1/19の20時頃で、気付いたのがその日の22時頃、復旧したのが1/20の23時頃と気付くのにもちょっと遅れたし、手間を惜しんでDiCEの更新が反映されるのを期待して待ちすぎてしまった。
DiCEがうまく機能しない原因が分からずcronに移行することになったけど、個人的にはこっちの方が安心。Windowsマシンはクライアント専用であって24時間動かすとは限らないけど、Linuxマシンは他のサーバを動かしたりしてるから電源を落とすことは無いから。