知道Wan口Ip可以远程访问路由器,这个可以通过DDNS来实现,但是DDNS对于内网Ip却不能很好的解析(也不知道是不是我不会设置)。可能有人会说内网IP没有什么作用,但是知道内网Ip也是可以做些事情的。比如我们学校里面分配的内网Ip是100.64.x.x开头的,如果在一个内网段内知道IP后是可以相互访问的;就算是在外网,也可以通过挂学校VPN的方式进行访问。
参考教程
- DD-WRT上使用的WWAN IP变更,邮件通知
-
[教程]openwrt使用ssmtp发邮件
在此对这些教程的作者表示感谢。
1. 安装ssmtp
ssh登录到路由器的shell中,输入下面的命令:
opkg update
opkg install ssmtp
2. 设置ssmtp
主要设置用来发送邮件的邮箱,此时需要所设置的邮箱支持smtp服务,163邮箱的设置可以参考这个网页:163邮箱如何开启POP3/SMTP/IMAP服务?. 现在163邮箱在开启smtp服务的时候,会自动生成一个邮箱客户端授权码,这个可以在相关的smtp程序中当做邮箱密码来使用,感觉大大的提高了安全性。
编辑ssmtp配置文件,在shell中输入:
vim /etc/ssmtp/ssmtp.conf
然后清空所有的文件内容,按照下面的格式,输入相应的内容。注意要将相关内容替换为自己的邮箱
root=xxx@163.com #替换成自己的邮箱帐户
mailhub=smtp.163.com #邮箱的smtp服务器
rewriteDomain=163.com
hostname=163.com
FromLineOverride=YES
#UseTLS=YES
AuthUser=xxx@163.com #替换为自己的邮箱帐户
AuthPass=xxx #邮箱密码或者邮箱客户端授权码
3. 编写自动发送邮件的bash shell
- 新建一个bash shell, 在shell中输入:
touch /sbin/ip_mail
vim /sbin/ip_mail
- 根据个人信息,修改下面的内容之后,复制到之前建立的 /sbin/ip_mail中
#!/bin/sh
#脚本启动后发邮箱通知Wan口Ip
sleep 60s #等待路由器启动完毕
{
echo "From:<XXX@163.com>"; #发件箱,需要与ssmtp设置中的邮箱保持一致
echo "To:<YYY@qq.com>"; # 收件箱
echo "Date: `date '+%a, %d %b %Y %H:%M:%S %z'`";
echo "Subject: Rounter rebooted"; # 邮件主题
echo "";
# 获取当前的Ip地址
#pppoe-wan需要改为自己的端口
echo "The new IP is $(ip -4 addr show dev pppoe-wan | awk '/inet / {print $2}' | cut -d/ -f1).";
} |ssmtp YYY@qq.com #与之前的收件箱保持一致
#检测Wan口Ip是否改变,如果改变,则发邮件通知
last=$(ip -4 addr show dev pppoe-wan | awk '/inet / {print $2}' | cut -d/ -f1);
while sleep 300s #检测时间间隔
do
#pppoe-wan需要改为自己的端口
curr=$(ip -4 addr show dev pppoe-wan | awk '/inet / {print $2}' | cut -d/ -f1);
if [ "A$curr" != "A$last" ]; then
{
echo "From:<XXX@163.com>"; #跟前面的保持一致即可
echo "To:<YYY@qq.com>"; #跟前面的保持一致即可
echo "Date: `date '+%a, %d %b %Y %H:%M:%S %z'`";
echo "Subject: Rounter IP changed";
echo "";
#pppoe-wan需要改为自己的端口
echo "The new IP is $(ip -4 addr show dev pppoe-wan | awk '/inet / {print $2}' | cut -d/ -f1).";
} |ssmtp YYY@qq.com #跟前面的保持一致即可
last=$curr
fi
done
端口可以用ifconfig命令进行查看,有自己需要的ipv4地址的端口名称就是需要填在此处的端口
例如,这台路由器我需要发送100.64开头的ipv4地址,然后在端口eth0.2中,就需要将pppoe-wan替换为eht0.2。
复制到shell中时,汉字有时候会导致莫名其妙的bug,可以先将注释全部删掉,然后再复制进去
- 给脚本运行的权限
chmod 755 /sbin/ip_mail
- 将脚本设为开机启动
编辑文件 /etc/rc.local
vim /etc/rc.local
在 exit 0 语句之前添加 /sbin/ip_mail,如下:
# Put your custom commands here that should be executed once
# the system init finished. By default this file does nothing.
/sbin/ip_mail
exit 0
至此,重启路由器,即可大功告成。。
这种开机自启动脚本的设置有点Low,好像有更高级的方法,不过还没尝试,具体可参考:OpenWrt启动过程分析+添加自启动脚本