jxyblog

jxyblog

email

【詳細チュートリアル】OpenwrtパブリックIPアドレスの変動自動メール通知(IPv4、IPv6両方対応)【転載再整理】

原文章地址:
【詳細チュートリアル】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 アドレスが変化したり、システムが起動したときに自動的に通知を送信します。

読み込み中...
文章は、創作者によって署名され、ブロックチェーンに安全に保存されています。