ラズパイ3を使って自宅サーバーを立てました。
しかし、ルーターのグローバルIPアドレスが動的に割り当てられてしまい、まれに変わります。
さらに、
- さらに、ラズパイではDice(グローバルIP変更時にDDNSに自動で登録してくれるサービス)が使えない模様
- 僕が使ってるルーターはグローバルIPの固定サービスがない
という事情もあり、
グルーバルIPアドレスが変更した際、sSMTPを利用してメールで自動通知するようにしました。
その手順を書いていきます。
sSMTPとは?
SSMTP はローカルコンピュータから設定したメールホスト (メールハブ) にメールを配達するプログラムです。(sendmail などのような機能豊富なメールサーバーと違って) メールサーバーではないのでメールを受信したり、エイリアスを展開したりキューを管理することはできません。SSMTP は主としてマシンから (システムアラートのような) 自動メールを外部のメールアドレスに飛ばすのに使われます。
1からメールサーバーを立てなくても、外部のメールサービスをハブとして利用することで、サーバーからメール送信できる仕組みと理解しました。
こんな感じかな。
ハブ用Gmailアカウントの取得
まずはハブ用のGmailアカウントを作成します。
既存のアカウントでも問題ないですが、sSMTPの設定ファイルにユーザーIDとパスワードを直に打ち込むので、ハブ用に用意することにしました。
サーバー側(ラズパイ側)にsSMTPをインストール
サーバー側(ラズパイ側)にて、sSMTPをインストールします。
$sudo apt-get install ssmtp
メール送信には"mail"コマンドを利用するので、mailutilsをインストールします。
$sudo apt-get install mailutils
次に、ssmtp.confの設定をします。
$ vim /etc/ssmtp/ssmtp.conf #ssmtp.confを編集 root=xxxx@gmail.com #用意したハブ用メールアドレス mailhub=smtp.gmail.com:587 hostname=raspberrypi #サーバーのホスト名。任意の名前で良いみたい AuthUser=xxxx #ハブ用メールアドレスのユーザーID AuthPass=pppp #ハブ用メールアドレスのパスワード UseSTARTTLS=YES
設定が終わったら、メールを送信できるか手動で確認してみましょう。
$ mail -s "test" shunka3141592@gmail.com
シェルスクリプトの作成
こちらのサイトを参考にさせていただきました。
グローバルIPの変更を自宅サーバからメールで通知する | Linuxサーバより愛を込めて。
ipcheck.shという名前でスクリプトを作成します。
newip=`curl -sS inet-ip.info` #「inet-jp.info」は、現在のグローバルIPを確認できるサービス oldip=`cat /path/old_ip.txt` # 前回確認時のIPを取得 if [ $oldip != $newip ] #前回のIPと現在のIPを比較して異なる場合はメールを送信 then echo "$newip" > /path/old_ip.txt # 現在のIPアドレスを保持しておく mail -s "Change IP Address!!!" shunka3141592@gmail.com < /path/old_ip.txt fi
シェルスクリプトを作成したら、手動で動かしてみましょう。
$ bash ipcheck.sh
送信先アドレス(shunka3141592@gmail.com)にメールが届いていたらOKです。
Cronの設定
メールは自動で送信したいので、先程のシェルスクリプトをCronに登録します。
下記を実行すると、Cronの設定画面に切り替わるので、
crontab -u ユーザー名 -e
下記を追加します。
# ipアドレスのチェック */15 * * * * /path/ipcheck.sh 1>/var/log/ipcheck.log 2>&1
- 「*/15」は「15分毎に実行」を意味します。
- エラーログをipcheck.logに吐き出すようにしています。
cronの設定の仕方については、下記にまとめられています。
cron の設定ガイド
以上でした。