原文章地址:
【詳細チュートリアル】Openwrt のパブリック IP アドレスの変動自動メール通知(IPv4、IPv6 両方対応)
(出典:恩山無線フォーラム)
1. 準備作業
OpenWRT に以下のパッケージがインストールされていることを確認してください:
msmtp:メール送信用
curl:IP アドレス取得用
bash:スクリプト実行サポート
使用しているメールのデスクトップ版ウェブサイトにアクセスし、設定で「POP3/SMTP/IMAP」の設定を見つけます。このウェブページでは、通常、メールサービスプロバイダーの SMTP サーバーアドレスがどこかに表示されます。例えば、163 メールは smtp.163.com です。後で使用します。
(オプション操作:「POP3/SMTP/IMAP」の設定ページで SMTP サービスを有効にすると、認証パスワードが得られます。このパスワードをコピーして保存してください。後で使用します。)
2.msmtp を設定してメールを送信する
msmtp の設定ファイルを作成または編集します。ここでは WinSCP ツールを直接使用して編集できます。
WinSCP ツールの抽出コードは 9tsm です。
次に、上記で述べた WinSCP を使用します。ソフトウェアを開くと、新しいサイトを作成するためのウィンドウが表示されます。
ファイルプロトコル:scp
ホスト名:192.168.2.1 ポート番号:22 #ルーター管理アドレス
ユーザー名:root パスワード:123456 #ルーターのアカウントとパスワード
その後、保存をクリックし、パスワードを保存するオプションを選択します。
次に、ログインをクリックすれば、ルーター内のすべてのファイルが表示されます。
ツールを使用してこの /etc/ ディレクトリを開き、右クリックして msmtprc を編集します。
163 メールを例にとると、以前に /etc/msmtprc を設定していない場合は、内部の内容をすべて削除し、以下の内容を入力します:
defaults
auth on
tls on
tls_trust_file /etc/ssl/certs/ca-certificates.crt
logfile /var/log/msmtp.log
account default
host smtp.163.com #163メール以外の方は、自分のメールのSMTPサーバーアドレスとポートに置き換えてください
port 465 #163メールのSMTPサーバーアドレスは:smtp.163.com、ポートは:465
from [email protected]
user [email protected]
password **************** #ここにメールパスワードまたはSMTP認証パスワードを入力
tls_starttls off
echo "Subject: OpenWRT" | msmtp -a default [email protected] #メール送信機能のテスト、これを使ってメールが正常に送信できるかテストできます
メールが正常に送信されない場合は、以下のコマンドを使用してログを確認し、問題を特定できます:
cat /var/log/msmtp.log
3.WAN ポートの IP アドレス変化を検出するスクリプトを作成する
IP 検出スクリプトを作成し、/root ディレクトリにスクリプト /root/ip.sh を作成します。このスクリプトは WAN ポートの IP アドレスをチェックし、変化があった場合にメールを送信します:
以下のコードをスクリプトファイルにコピーします:
#!/bin/bash
current_ipv4=$(ip -4 addr show devpppoe-wan | grep -oE 'inet [0-9]+\.[0-9]+\.[0-9]+\.[0-9]+' | awk '{print $2}') #現在のWAN IPv4アドレスを取得します。WANポートのIPv4アドレスのみが必要な場合は、WANポートのIPv6アドレスを取得する関連コマンドを削除してください。
current_ipv6=$(ip -6 addr show devpppoe-wan | grep -oE 'inet6 [0-9a-fA-F:]+(/[0-9]+)?' | awk '{print $2}') #現在のWAN IPv6アドレスを取得します。WANポートのIPv6アドレスのみが必要な場合は、WANポートのIPv4アドレスを取得する関連コマンドを削除してください。
if [ ! -f /root/wan_ip.txt ]; then
echo "$current_ipv4 $current_ipv6" > /root/wan_ip.txt #wan_ip.txtファイルが存在するか確認し、存在しない場合はファイルを作成して初期メールを送信します。
echo -e "Subject: OpenWRT WAN IP\n\n初回スクリプト実行、WAN IPv4アドレスは: $current_ipv4\nWAN IPv6アドレスは: $current_ipv6" | msmtp -a default [email protected] # 初期メール通知を送信します。
fi
saved_ip=$(cat /root/wan_ip.txt) #保存されたIPアドレスを読み込みます。
if [ "$current_ipv4 $current_ipv6" != "$saved_ip" ]; then #現在のIPv4またはIPv6アドレスが保存されたものと一致しない場合、メール通知を送信し、記録を更新します。
echo -e "Subject: OpenWRT WAN IP Changed\n\nWAN IPv4が変更されました: $current_ipv4\nWAN IPv6が変更されました: $current_ipv6\n以前のIPアドレスは: $saved_ip" | msmtp -a default [email protected]
echo "$current_ipv4 $current_ipv6" > /root/wan_ip.txt #IP記録を更新します。
fi
スクリプトの実行権限を設定します: chmod +x /root/ip.sh
ここでは、ソフトウェア操作を直接使用し、右クリックで権限を変更し、右側の 3 つの X をすべてチェックします。
4. システム起動時にスクリプトを自動実行するように設定する
/etc/rc.local ファイルを編集し、システムが起動または再起動時にこのスクリプトを実行するようにします:
ソフトウェアで /etc/rc.local を開き、右クリックして編集します。
exit 0 の前にスクリプト実行コマンドを追加します:
起動後 10 秒待ってからスクリプトを実行し、スクリプトが PPPOE ダイヤルでパブリック IP アドレスを取得する前に実行されることを避け、2 回の IP が同じと誤認識されてメールが送信されない、または IP アドレスが空白のメールが送信されるのを防ぎます。
sleep 10 && /bin/bash/root/ip.sh
5.IP の変化を検出するための定期的なタスクを設定する
cron 設定を編集し、crontab を使用して定期的なタスクを設定し、5 分ごとに IP アドレスをチェックします:
ルーター - システム - スケジュールタスクを開きます。
以下の行を追加し、5 分ごとにスクリプトを実行します:
*/5 * * * * /bin/bash /root/ip.sh
7. 手動でスクリプトを実行してテスト
以下のコマンドを使用して手動でスクリプトを実行し、正常に動作することを確認します:
/bin/bash /root/ip.sh
このスクリプトを初めて実行するのではなく、正常に動作するかテストしたい場合、この時点でスクリプトを直接実行してもメールは受信されません。次の操作に従って、まず /root/wan_ip.txt を削除します:
rm /root/ip.txt
次に、コマンドを使用してこのスクリプトを実行します:
/bin/bash /root/ip.sh
スクリプトにログ記録を追加するか、ルーター起動後にスクリプトの実行状況を確認することもできます。例えば、スクリプトに以下の内容を追加して(「if」と「fi」の間に追加しないでください)、スクリプトが実行されたかどうかを記録します:
echo "スクリプトは$(date)に実行されました">> /root/check_wan_ip.log
ログ記録を確認します:
cat /root/check_wan_ip.log
このチュートリアルに従ってすべてが順調に設定されていれば、スクリプト実行後に数秒待ってメールログを確認するだけで、現在の WAN ポート IP アドレスを含むメール通知を受け取ることができます。
これにより、OpenWRT システムは WAN ポートの IP アドレスが変化したり、システムが起動したりしたときに自動的に通知を送信します。