読者です 読者をやめる 読者になる 読者になる

😃 mattintosh note 📝

Hello Raspberry Pi!

🍓 自宅サーバからグローバルIPアドレスをメールで送信する

Raspberry Pi Pidora Fedora Linux

Raspberry Pi を家の外から操作するのにドメインを取得しようと思ったけどとりあえず IP 直打ちでいいや、ということで定期的にグローバル IP アドレスをスマートフォンにメールで送ることにした。

Pidora には postfix がインストールされていないのでまずは postfix をインストール。

sudo yum install postfix

sendmail から postfix に切り替え。なんかこの変はうろ覚え。設定ファイルをコピーしたかどうかも忘れた。

sudo systemctl disable sendmail
sudo systemctl enable postfix

さて、グローバル IP アドレスをどうやって取得するかだけど、アクセスするとグローバル IP アドレスを返してくれる http://httpbin.org を利用させてもらうことにした。wget や curl で /ip ページにアクセスする。

wget -qO- http://httpbin.org/ip

こんな文字列が返ってくる(以下はダミーのグローバル IP アドレス)。

{
  "origin": "111.111.111.111"
}

cron 用のスクリプトを書く。crontab に直接書いてもいいけど今回は別ファイル。mail コマンドの標準入力に本文として date コマンドの出力結果を。グローバル IP アドレスを件名にする。httpbin.org からの文字列は awk やらなんやらで適当に整形。グローバル IP アドレスを件名にするのは、グローバル IP アドレスが変わらないうちは件名も変わらないのでスレッド表示対応のメールクライアントの場合に表示量が抑えられるから。

#!/bin/sh

date \
  | mail -s "$(
      wget -qO- http://httpbin.org/ip \
      | tr -d \" \
      | awk '/origin/{ print $2 }'
    )" foo@example.com

crontab に以下のように書いておくことで1時間おきにグローバル IP アドレスが書かれたメールを送ってくれる。(1時間おきなら /etc/cron.hourly に置いてもいいがテストなので弄りやすいところに設置)

0 * * * * foo /usr/local/bin/send_global_ip.sh

グローバル IP アドレスが変更になったときは不便だけど最近の固定回線ならあまり変わることはないので良しとする。

なお、差出人は $USER、メールアドレスは $USER@$HOSTNAME で送られてくる。ホスト名が hoge なら foo@hoge.local で送られてくるので返信不可である(家の中なら返信できるのか?)。


tr と awk 部分を sed で書くとこんな感じ?

wget -qO- http://httpbin.org/ip | sed -n '/origin/s/.*: "\([0-9]*\)"/\1/p'