CentOSでルーターのグローバルIPを定期的に指定メールアドレスへ送信する

コスト削減の観点から、家庭用や小規模事業者向けのブロードバンドでは通常 ADSL の仮想ダイヤルアップが使われます。ADSL ブロードバンドは、ダウンロード速度が約 4M 程度であれば通常の光回線と体感上の差は大きくありませんが、明確な問題として固定グローバル IP がなく、再接続のたびに新しい動的 IP が割り当てられる可能性があります。そのため、サーバーやネットワーク機器をリモート保守する際に不便になります。

LAN 内に Linux ホストが 1 台あれば、そのホストに現在のルーターのグローバル IP を定期的に取得させ、メールで指定のメールボックスへ送信できます。

一、現在のルーターの外部 IP を取得する

curl を使って現在の出口 IP を確認できます。

curl ifconfig.me

実行すると、現在ルーターがインターネットへアクセスする際に使用しているグローバル IP が返されます。次に、この IP アドレスを Email で指定のメールボックスへ送信します。

vim GetIP.sh でスクリプトを作成します。

#!/bin/bash
# Program:
#   Send Router IP of Internet to certain email
# History:
#   2014-03-08 cmzsteven First release

PATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin/:~/bin
export PATH

curl ifconfig.me | mail -s "Router IP of Internet" changmingzhi@163.com

保存して終了します。

:wq

その後、スクリプトに実行権限を追加します。

chmod +x /root/GetIP.sh

システムに mail コマンドがない場合は、先にメール送信用ツールをインストールして設定する必要があります。CentOS では通常、mailx を確認またはインストールできます。

which mail
rpm -q mailx

メールを正常に送信できるかどうかは、ローカルの MTA または外部 SMTP の設定にも依存します。まず手動でスクリプトを実行し、メールを受信できることを確認するのがおすすめです。

二、定期実行

このスクリプトを crontab のスケジュールタスクに追加します。管理者であれば、システムレベルのスケジュールタスクを編集できます。

vim /etc/crontab

システムレベルの /etc/crontab では、実行ユーザーを含める必要があります。例:

1 */1 * * * root /root/GetIP.sh

上の設定は、毎時 1 分に 1 回実行することを意味します。

現在のユーザーのスケジュールタスクを使う場合は、次のようにします。

crontab -e

この場合、root の列は不要です。例:

1 */1 * * * /root/GetIP.sh

毎日 1:01 に 1 回実行したい場合、/etc/crontab では次のように書けます。

1 1 * * * root /root/GetIP.sh

ユーザー自身の crontab -e では、次のように書きます。

1 1 * * * /root/GetIP.sh

注意点として、/n を使う場合は、その前のフィールドが依然として になっているかを確認する必要があります。例えば:

* */2 * * * root /root/GetIP.sh

このルールは「2 時間ごとの該当する時間帯に、毎分 1 回実行する」という意味になるため、該当する時間には毎分 1 通のメールが送信されます。2 時間ごとに 1 回だけ実行したい場合は、次のように書くべきです。

1 */2 * * * root /root/GetIP.sh

残る作業は、ルーター側で仮想サーバー、ポートフォワーディング、または NAT 変換を設定することですが、ここでは詳しく説明しません。

三、スケジュール表の形式

crontab の基本形式は次のとおりです。

f1 f2 f3 f4 f5 program

各項目の意味は次のとおりです。

  • f1 は分を表します。
  • f2 は時を表します。
  • f3 は月内の日を表します。
  • f4 は月を表します。
  • f5 は週内の曜日を表します。
  • program は実行するプログラムまたはコマンドを表します。

よく使われる書き方は次のとおりです。

  • f1 の場合、毎分 program を実行することを意味します。f2 の場合は毎時実行することを意味し、以下も同様です。
  • f1a-b の場合、第 a 分から第 b 分までの間に実行することを意味します。f2a-b の場合は、第 a 時から第 b 時まで実行することを意味し、以下も同様です。
  • f1/n の場合、n 分ごとに 1 回実行することを意味します。f2/n の場合は、n 時間ごとに 1 回実行することを意味し、以下も同様です。
  • f1a,b,c の場合、第 abc 分に実行することを意味します。f2a,b,c の場合は、第 abc 時に実行することを意味し、以下も同様です。

原文アドレス:http://changmingzhi.blog.163.com/blog/static/29678048201428114710683/

Leave a Reply