4
10

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

SlackとRaspberry PiでグローバルIPアドレスの変更を通知

Last updated at Posted at 2018-03-21

前提条件

  • Raspberry Pi B+
  • Linux 4.9.16+
  • Python 2.7.9
  • Slack

背景

 実家のPCのメンテナンスを頼まれることが度々ある。PCを立ち上げてもらい、グローバルIPアドレスを探し出し、SSHログインを行いトンネルリングし遠隔サポートを行う。実家のグローバルIPを探すステップは面倒である。
 とはいえ、実家用に固定IPアドレスを払い出すというのもコスト的に難しい。

問題 課題
固定グローバルIPアドレス 運用コスト高い
遠隔ログイン用のPCの24時間稼働 運用コスト高い

1. グローバルIPアドレス

 固定されたグローバルIPアドレスは有れば便利であるが、IPアドレスが解ってさえすれば、変動でも構わない。IPアドレスが変わったタイミングで、手元に通知されれば良い。そうだ、Slackを使おう。

2. 遠隔ログイン用のPC

 一般的なPCを24時間稼働させるとコスト的厳しい。省電力PCであれば、電気台は節約できる。そうだ究極の省電力PCが販売されているのではないか。Raspberry PiをPCとして利用しよう。

システム構成

system.png

構築手順

1. Slackアカウントの用意

Slackアカウントを取得し、Incoming Web-hookを取得する
https://api.slack.com/incoming-webhooks

2. プログラムの作成

Raspberry Pi用グローバルIPアドレスが変更されると、通知を飛ばすPythonプログラムを作成する。

開発のポイント

グローバルIPアドレスの取得

以下のサービスを利用するとグローバルIPを教えてくれる。
http://ipcheck.ieserver.net/

import requests
res = requests.get('http://ipcheck.ieserver.net/')

Slackへ通知

import json
import requests
def sendSlackMsg(global_ipaddr):
    """ send message to Slack
    """
    msg = ''
    msg = '\\nglobal IP Addr : ' + global_ipaddr

    payload = json.loads('{"text": "%s"}' % msg)
    r = requests.post('<YOUR_SLACK_INCOMING_WEBHOOK>', data=json.dumps(payload))
    print r.status_code
    print r.text

 汎用的に利用できるため作成物をGitHubで公開した。
https://github.com/thesaitama/checkgip

インストール

リポジトリのクローン

> git clone https://github.com/thesaitama/checkgip.git

 依存関係のインストールと設定ファイルテンプレートの作成する。

> cd checkgip
> pip install -r requirements.txt
> mv checkgip.sample.json checkgip.json

設定

 checkgip.jsonを編集し1.で取得したIncoming Web-hookを設定する。

checkgip.json
{"slackWebhook": "<YOUR_SLACK_INCOMING_WEBHOOK>"}

 設定ファイルに次回比較用のIPアドレスが記録されるため、書き込み権限を付与する。

> chmod +w checkgip.json

3. 定期実行の設定

 作成したプログラムが定期的に実行されるようcronを設定する。

# m h  dom mon dow   command
0 12 * * * python /<DEPLOY_DIR>/checkgip.py > /dev/null

4. セキュリティ対策

 Raspberry Piに各種セキュリティ対策を施す。

  • Brute force
  • iptables

等適切に設定する。(本稿では割愛する)

5. デプロイ

 構成した機材一式を、実家に物理的にデプロイする。

  • ケース(裸ではこころもとないため)
  • 電源(Micro USB 1.5A以上推薦)

6. 利用

  • グローバルIP変更があると、Slackに通知が飛ぶ。
  • 遠隔サポートが必要なタイミングで、Slackに記載されたアドレスにSSHログインを行う。

考察

 グローバルIPアドレスを探し出す苦労をしなくても良くなった。
 クラウド連携の遠隔サポートツールを導入すれば問題は解決するが、Raspberry Piは汎用性が高く、さらなる利用につなげることができそうだ。

4
10
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
10

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?