记录时间:2020 年 1 月 31 日
关键词:openwrt 19.07 ssmtp 邮件通知 IP变化 IPv6 PSG1218 K2
更换软件镜像源
鉴于openwrt的官方软件源速度不太行,先换个清华的源。不过ssmtp体积很小,不换的话下载问题也不大。
复制类似下面的地址到opkg/distfeeds.conf
并保存。这里以k2路由器的mt7620为例,其他类型或版本可以去清华的镜像源查看,然后找到相对应的目录下复制url地址。
1 | src/gz openwrt_core http://mirrors.tuna.tsinghua.edu.cn/lede/releases/19.07.0/targets/ramips/mt7620/packages |
安装ssmtp
关于ssmtp,体积小是选择这个的首要因素,下面两种方式都可以安装。
- luci管理界面安装
- shell命令方式安装
1
2opkg update
opkg install ssmtp配置ssmtp
ssh登录openwrt之后,修改并执行以下命令。这里的配置是以163邮箱举例的,如果使用其他的邮箱可能要稍作修改,一些SMTP服务器可能还需要指定具体的端口,详情可以参考ssmtp配置文件中的注释。
编辑配置文件可以
1 | vim /etc/ssmtp/ssmtp.conf |
也可以用winscp登录,打开/etc/ssmtp/
目录下的ssmtp.conf
文件修改
下面是需要修改的内容举例
1 | root=xxx@163.com #替换成自己的邮箱帐户 |
关于端口号:网易163邮箱提供的SMTP服务器端口号
创建获取IP并发送邮件的脚本
其实就是把之前用于Padavan的脚本稍作修改之后得到的。另外除了下载也可以直接复制脚本内容,手动新建一个脚本文件,或者保存修改后用winscp等等工具上传到openwrt等等,怎么方便怎么来。
建立脚本
1 | touch /sbin/ipmail.sh |
复制以下内容到ipmail.sh1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35#!/bin/sh -e
#设置发件人地址,与ssmtp配置一致
from=FROM
#设置收件人地址,多人用英文逗号隔开
towho=TOWHO
#有必要的话更改网络接口名(网卡)
interface=pppoe-wan
file=$HOME/.ipmail
[ -e $file ] && old=`cat $file`
#获取wan ip地址
ipaddress=$(ip -6 addr list scope global $interface | grep "global" | sed -n 's/.*inet6 \([0-9a-f:]\+\).*/\1/p')
#判断ip地址是否存在
if [ -z "$ipaddress" ]; then
echo "no IPv6 address found"
exit 1
fi
#检查地址是否改变
if [ "$old" = "$ipaddress" ]; then
echo "IPv6 address unchanged"
exit
fi
mailtxt=$HOME/.ipmailtext
#写好邮件
cat > $mailtxt <<EOF
From:${from}
To:${towho}
Subject:IP发生变更,打开查看详情
OpenWrt:检测到WAN IP发生变更!
新的IP为 ${ipaddress}
EOF
#发送邮件
ssmtp $towho < $mailtxt
#缓存当前ip地址到文件
echo $ipaddress > $file
添加发件人和收件人地址
务必修改脚本中的以下内容
1 | #设置发件人地址 与ssmtp配置一致 |
添加可执行权限
1 | chmod +x /sbin/ipmail.sh |
添加到计划任务
可以直接在管理界面添加,意思是每10分钟执行一次,另外第一次添加计划任务可能会不起作用,可以在启动项
中找到cron
重启一下。
1 | */10 * * * * /sbin/ipmail.sh |
关于脚本
修改自上一篇,与参考中的《Openwrt发邮件通知Wan口Ip变化》相比,定时执行采用openwrt的计划任务,感觉可能会稍微灵活一些。另外本脚本会创建临时文件,而参考脚本不需要。其他的差别就不太清楚了,如果有人看到这篇并且知道差别请带带我!虽然只要达到目的就行。
END
其实对每10分钟检测一次这个操作来说,家庭宽带的IPv6地址变化并没有这么频繁,基本上只有重启路由器和IPv6地址租期到期两种情况才会导致IP变化,因此只需要添加到开机启动脚本和检测IPv6到期即可,但是检测地址到期这个还没有搜索到相关的内容,暂时先放放好了。不过运行这个脚本消耗不大,只有检查到ip变化才会发送邮件,所以基本没什么影响。
参考
OpenWrt - SMTP clients:https://openwrt.org/docs/guide-user/services/email/smtp.client?s[]=ssmtp
openwrt使用ssmtp发邮件:https://www.openwrtdl.com/wordpress/%E6%95%99%E7%A8%8Bopenwrt%E4%BD%BF%E7%94%A8ssmtp%E5%8F%91%E9%82%AE%E4%BB%B6
Openwrt发邮件通知Wan口Ip变化:https://www.jianshu.com/p/5effa0c0aab3