はじめに
昨日ほぼ丸一日外部からサーバにアクセスできなくなっていたのですが、原因はIPアドレスが変わっていたためでした。
auひかりって滅多に割り振られるIPアドレスが変わらないので実質固定IPとして使えるのですが、まあその滅多なことが今回起こってしまったわけです。
ドメインの更新をちゃちゃっと済ませればすぐ繋がるようになりましたが、4月からサーバ機は実家において自分は会社の寮に引っ越すので今回のようにIPアドレスを調べることは困難になります。(グローバルIPを調べてと言って通じるのが父親のみ)
ならDDNSをやれば良いじゃないかと思うかもしれませんが、自分が使っているお名前.comはDice等サードパーティ製アプリからの更新をリジェクトする仕様であるにも関わらず、公式のクライアントはWindowsのみ対応というクソ仕様なのです。
mydnsを使うことも考えましたが、どうせ滅多に起こらないことなのでIPアドレスが変更された時にメールで自分に通知がくるようにすれば良いという結論に達しました。
基本的には以下のような先人たちの記事を参考にすれば良いのですが、自分の環境では少々詰んだので備忘録として
手法
メールを送信する環境を整える
すでにmailコマンドが使える環境の方は飛ばしてください。
ちゃんとメールサーバを立てるのは面倒くさかったりセキュリティ的にアレだったりとするのでGmail経由で送信する設定にしています。
まずはsSMTPとmailutilsをインストールします。
sudo apt-get install ssmtp
sudo apt-get install mailutils
次にsSMTPの設定を行います。
nano /etc/ssmtp/ssmtp.conf
で以下の内容を記載します。
root=xxxx@gmail.com #用意したハブ用メールアドレス
mailhub=smtp.gmail.com:587
hostname=hostname #なんでも良いのでデフォのままでOKです
AuthUser=xxxx #メールアドレスのユーザーID(○○@gmail.com)
AuthPass=pppp #メールアドレスのパスワード
UseSTARTTLS=YES
IPアドレスの変化をメールで通知するスクリプト
詰んだところというのはシェルスクリプトにおいてif文のechoが実行されないという点でした。以下のコードは対策しています。
以下の内容のipcheck.shを作成します。
#!/bin/bash
newip=curl -sS inet-ip.info
#グローバルIPを取得
oldip=cat /home/username/old_ip.txt
# 前回確認時のIPを取得
echo $newip > /home/username/old_ip.txt
if [[ $oldip != $newip ]] #前回のIPと現在のIPを比較して異なる場合はメールを送信
then
mail -s “Change IP Address!!!” tuuchisakinome-ruadoresu@gmail.com < /home/username/old_ip.txt
fi
あとは定期実行のためにcronに登録しましょう。
自分は15分間隔で設定しました。
終わりに
まあこんな面倒なことせずに余っているWindows機をインターネットに常時接続しておき公式のクライアントを走らせておけば良いんじゃないですかね。
というかお名前.comはいい加減顧客の大多数が利用しているであろうLinuxに歩み寄ってください。
はじめましてメールで通知するスクリプトを始めようと参考に書いたのですがうまく動作してくれません。newip=curl -sS inet-ip.infoで/usr/local/bin/old_ip.txt: 行 1: xxx.xxx.xxx.xxx: コマンドが見つかりませんとエラーが出ています。コピペして保存したのですが申し訳ありませんがコメント宜しくお願いします。