コスト削減の観点から、家庭用や小規模事業者向けのブロードバンドでは通常 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がの場合は毎時実行することを意味し、以下も同様です。f1がa-bの場合、第a分から第b分までの間に実行することを意味します。f2がa-bの場合は、第a時から第b時まで実行することを意味し、以下も同様です。f1が/nの場合、n分ごとに 1 回実行することを意味します。f2が/nの場合は、n時間ごとに 1 回実行することを意味し、以下も同様です。f1がa,b,cの場合、第a、b、c分に実行することを意味します。f2がa,b,cの場合は、第a、b、c時に実行することを意味し、以下も同様です。
原文アドレス:http://changmingzhi.blog.163.com/blog/static/29678048201428114710683/
