MacサーバからNO-IPを自動更新する
NO-IPの公式アプリで自動更新ができないため、スクリプトで自動更新を実現しました。
NO-IPのMac用公式アプリでdaemonを自動起動に設定しても、自動起動している様子はなく、daemonを起動してもログが記録されないので、更新しているかも分かりません。そこで、こちらで紹介されている方法をMacに適用しました。
ここで紹介されているスクリプトは、Macだと動作しない場合があるので、少しだけ修正しました。
(Macだとデフォルトでインストールされているwget
がSSLの問題で正常に動作しない場合があるので、curl
で代用しました。)
また、cron
の代わりにMacでは.plist
を記述して、launchctl
で登録します。
追記:
なぜか、全く同じ条件にも関わらず、30分など時間を置いて実行すると、no-ipの更新APIが"badauth"(認証エラー)を返してきます。しかし、立て続けに実行すると5回目位から成功するようになります。なので、スクリプトも実行される度に6回エンドポイントを叩くように修正しました。
もっとちゃんとした解決策を知っている人が居たら教えてください!
El Capitanのみで動作確認しました。
設定手順
スクリプトをダウンロード(zipファイルはこちら)
展開して、no-ip.sh
とno-ip.plist
のみを使用します。
no-ip.plist
のLabelの値を適当な文字列に変えてください。
(他のとかぶってなければそのままでも動きますが。launchctl list
コマンドなどで表示される際に使用されるものだと思います。)
no-ip.sh
を配置し、実行権限を付けます。
sudo mv no-ip.sh /usr/local/bin/no-ip.sh
sudo chmod +x /usr/local/bin/no-ip.sh
no-ip.plist
を配置し、オーナーをrootに変更します。
sudo mv ~/no-ip/no-ip.plist /Library/LaunchDaemons/
sudo chown root:wheel /Library/LaunchDaemons/no-ip.plist
設定ファイルを作成します。
sudo vi /etc/no-ip/no-ip.conf
内容は下記を適宜修正します。
user=username
password=password
hostname=hostname.example.com
logfile=/var/log/no-ip.log
detectip=true
interval=10
追記:
1度の実行で複数回の更新APIへのアクセスをするために、intervalを追加しました。
最後の行に改行を入れないと、最後の行の設定が読み込まれないので気をつけてください。
launchctl
で起動します。
sudo launchctl load -w /Library/LaunchDaemons/no-ip.plist
ちなみに、停止はこちら
sudo launchctl unload /Library/LaunchDaemons/no-ip.plist
このplistでは毎時間、0分と30分に実行されるように記述しています。
変更したい場合、plistの中を見ればどこを変更すべきかすぐにわかります。
plist作成の参考:Apple Developer