MacサーバからNO-IPを自動更新する

More than 1 year has passed since last update.


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.shno-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