原文章地址:
【詳細教程】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 地址之前,而錯認為兩次 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 "Script executed at $(date)">> /root/check_wan_ip.log
查看日誌記錄:
cat /root/check_wan_ip.log
如果跟隨本篇教程配置一切順利的話,只需在腳本運行後稍等幾秒查看郵件日誌,就能收到一封帶有當前 WAN 口 IP 地址的郵件通知。
這樣, OpenWRT 系統就會在 WAN 口 IP 地址變化或系統啟動時自動發送通知。