找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
广告投放联系QQ68610888
查看: 7672|回复: 16

从公网登录Openwrt路由器遇到的几个问题

[复制链接]
发表于 2016-2-3 18:48 | 显示全部楼层 |阅读模式


最近需要从公网登录家里的Openwrt路由器,我家的宽带是有公网IP地址的,所以先配好DDNS。

但是在使用是发现,当路由器WAN的IP发生变化后,虽然DDNS已经更新成正确的新IP,但从外网还是无法SSH登录到路由器,提示目标主机主动拒绝。查看Openwrt上的系统日志,并没有发现关于拒绝登录的记录。正当不知所措时,偶然地运行一下ps查看dropbear的相关命令和参数,发现了一个问题。原来dropbear并不是监听某一个端口,而是监听一个固定的IP地址。而当WAN的IP发生变化后,dropbear仍然在监听原来的IP地址,导致无法从外网登录。我用的是CC版本和官方的DDNS包,不知道是只有我一个人有这个问题还是普遍的Bug。找到问题所在就好解决了,DDNS使用shell脚本来监听、对比和更新IP。找到脚本所在,使其在向DDNS服务器更新IP的同时,重启Openwrt自己的dropbear,即可解决问题。脚本的路径是 /usr/lib/ddns/dynamic_dns_functions.sh,向其中新增一行即可。

do_transfer "$__URL" || return 1
/etc/init.d/dropbear restart && write_log 7 "Dropbear restart successfully"
write_log 7 "DDNS Provider answered:\n$(cat $DATFILE)"


然后我又想让其在IP发生变化的时候,将新的IP用其它方式通知我,以备在DDNS服务失效的时候找到自己的路由,最后选择使用向移动139邮箱发邮件的方式通知。向139邮箱发邮件有一个好处,即可以免费同时接到手机短信。这样需要首先找一个其它的支持SMTP的邮箱作为发件方,由于国内的大部分免费邮箱都需要绑定手机才能开通SMTP,所以我选择了微软的Outlook邮箱,以下命令的参数也是Outlook邮箱的参数,如果换用其它的邮箱,则需要更换成对应的SMTP服务器地址和认证方式。邮件客户端我选用mailsend,好处是不需要任何配置文件,只用一行脚本即可实现发件。还是在刚才的脚本中新增两行。这样即便DDNS服务器失效,只要DDNS上我们注册的IP和我们路由器实际的IP不一致,就会一直将实际的IP通知我,直到DDNS上注册了正确的IP为止。

[ $use_https -ne 0 ] && __URL=$(echo $__URL | sed -e 's#^http:#https:#')
ifconfig pppoe-wan | awk -F'[ :]+' '/inet\ addr/{print $4}' > /tmp/curip
/usr/bin/mailsend -t [phone]@139.com -f [uesename]@outlook.com -4 -smtp smtp-mail.outlook.com -port 25 -user [uesename]@outlook.com -pass [password] -sub "IP change warning" -msg-body /tmp/curip -auth-login -starttls
do_transfer "$__URL" || return 1


最后我还想再留一条备用线路,考虑情况,由于各种原因,已经无法在外部连通路由,但路由本身还可以上网。如果路由器能定时地主动地到某个地方读取指令,就可以尝试在外部无法连通时修复路由。最初我还是考虑使用邮箱,通过POP3将邮箱上的邮件下载下来并执行其中的脚本,但找遍全网也没有找到能在Openwrt上用的POP3客户端。再考虑其它的ftp空间、网盘外链等基本也都没有免费的,最后选定使用博客,虽然博客处于公共空间无法认证身份,但如果真用到了这个备用线路的话,一般也就restart然后再试图通过正常的SSH连接,所以也没有什么保密信息。基本思路是路由器定时地下载博客主页,如果发现其中有脚本,就执行。这样在选择博客时,需要此博客对个人有固定的域名,几级无所谓但一定要固定。同时能在主页显示出尽量多的文章正文,并且最好关闭评论以防其他网友通过留言的方式控制路由器。需要运行的脚本需要嵌入在其它自定义且易识别的字段中,以便路由器在下载到博客页面后能方便地解析出要执行的语句。我使用


@2016020318@touch /mnt/test@2016020318@

这种格式来标识命令,在@中包括年月日小时信息,这样如果路由器设置为每一小时检查博客一次的话,就可以避免重复运行命令。所用到的脚本如下

#!/bin/sh

/usr/bin/wget [blog url] -O /tmp/cmdpage -q
DATE=$(date +%Y%m%d%H)
cat /tmp/cmdpage | grep "\@${DATE}\@.*\@${DATE}\@" > /tmp/tocmd
sed -i "s/.*\@${DATE}\@\(.*\)@${DATE}\@.*/\1/g" /tmp/tocmd
sed -i 's/&lt;/</g' /tmp/tocmd
sed -i 's/&gt;/>/g' /tmp/tocmd
sed -i 's/&amp;/&/g' /tmp/tocmd
sed -i 's/&quot;/"/g' /tmp/tocmd
sed -i 's/&nbsp;/ /g' /tmp/tocmd
sed -i '1 i#!/bin/sh' /tmp/tocmd
chmod 700 /tmp/tocmd
. /tmp/tocmd


1、使用wget将网页下载到本地
2、读取系统当前时间,精确到小时
3、从下载到的网页中找到含有标识符的行,并写入到新文件中
4、去掉标识符和其前后的其它字符,只留命令本身
5、恢复HTML中的转义字符
6、加入shell信息行
7、赋予可执行权限并执行

这样再按常规方法配置计划任务,即可在所有外部通道失效时,使用网页控制路由。


评分

参与人数 1恩山币 +3 收起 理由
f0x + 3 城会玩

查看全部评分

我的恩山、我的无线 The best wifi forum is right here.
发表于 2016-2-3 19:18 来自手机 | 显示全部楼层
给力,先马一记
我的恩山、我的无线 The best wifi forum is right here.
回复

使用道具 举报

发表于 2016-2-3 22:29 来自手机 | 显示全部楼层
易懂明了
我的恩山、我的无线 The best wifi forum is right here.
回复

使用道具 举报

发表于 2016-2-4 11:19 | 显示全部楼层
居然还有这种事?

不过话说,从外网访问,最好还是virtual**登陆后再访问,否则实在太不安全,玩这个的人有多少是直接对外开放路由器端口的?

点评

用密码登录的话是不安全,我禁用密码登录改用密钥能好一点。  详情 回复 发表于 2016-2-4 18:15
我的恩山、我的无线 The best wifi forum is right here.
回复

使用道具 举报

发表于 2016-2-4 12:53 | 显示全部楼层
没碰到过这个问题,除了自己折腾一般不会断线换IP。
我的恩山、我的无线 The best wifi forum is right here.
回复

使用道具 举报

发表于 2016-2-4 13:01 | 显示全部楼层
有公网Wan的都是土豪。。。做个朋友吧?

点评

联通和电信的一般都有吧。移动、长城、鹏博之类的可能没有。  详情 回复 发表于 2016-2-4 18:17
我的恩山、我的无线 The best wifi forum is right here.
回复

使用道具 举报

发表于 2016-2-4 14:50 | 显示全部楼层
楼主很有想法,马克备用。
我也是CC,也用的DDNS,一切正常。

点评

能否帮忙测试一下?先用ps看一下dropbear监听的IP,然后断WAN再连WAN,看dropbear监听的IP是否跟着变。在我这就是不变的,不知道为什么。  详情 回复 发表于 2016-2-4 18:19
我的恩山、我的无线 The best wifi forum is right here.
回复

使用道具 举报

 楼主| 发表于 2016-2-4 18:15 | 显示全部楼层
jbcdidgosir 发表于 2016-2-4 11:19
居然还有这种事?

不过话说,从外网访问,最好还是virtual**登陆后再访问,否则实在太不安全,玩这个的人有多少是直 ...

用密码登录的话是不安全,我禁用密码登录改用密钥能好一点。
我的恩山、我的无线 The best wifi forum is right here.
回复

使用道具 举报

 楼主| 发表于 2016-2-4 18:17 | 显示全部楼层
coolleafly 发表于 2016-2-4 13:01
有公网Wan的都是土豪。。。做个朋友吧?

联通和电信的一般都有吧。移动、长城、鹏博之类的可能没有。
我的恩山、我的无线 The best wifi forum is right here.
回复

使用道具 举报

 楼主| 发表于 2016-2-4 18:19 | 显示全部楼层
nicholas.fq 发表于 2016-2-4 14:50
楼主很有想法,马克备用。
我也是CC,也用的DDNS,一切正常。

能否帮忙测试一下?先用ps看一下dropbear监听的IP,然后断WAN再连WAN,看dropbear监听的IP是否跟着变。在我这就是不变的,不知道为什么。
我的恩山、我的无线 The best wifi forum is right here.
回复

使用道具 举报

发表于 2016-2-4 20:52 | 显示全部楼层
备用方案太机智了,感谢分享
我的恩山、我的无线 The best wifi forum is right here.
回复

使用道具 举报

发表于 2016-2-4 20:56 | 显示全部楼层
我一般选择每天凌晨5点重启一次

这样第一个问题和第三个问题也解决了

点评

问题是有可能干扰后台的下载  详情 回复 发表于 2016-2-5 21:09
我的恩山、我的无线 The best wifi forum is right here.
回复

使用道具 举报

 楼主| 发表于 2016-2-5 21:09 | 显示全部楼层
s2005203007 发表于 2016-2-4 20:56
我一般选择每天凌晨5点重启一次

这样第一个问题和第三个问题也解决了

问题是有可能干扰后台的下载
我的恩山、我的无线 The best wifi forum is right here.
回复

使用道具 举报

发表于 2016-2-5 21:15 来自手机 | 显示全部楼层
用端口转发,吧wan的22转到192.168.1.1路由器的ip
我的恩山、我的无线 The best wifi forum is right here.
回复

使用道具 举报

发表于 2016-2-10 17:49 | 显示全部楼层
感谢大神。
在BB 14.07中设置mailsend更新IP成功。
BB的package库中没有编译好的mailsend,用CC的package。
BB的脚本文件为/usr/lib/ddns/dynamic_dns_updater.sh
我的恩山、我的无线 The best wifi forum is right here.
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

有疑问请添加管理员QQ86788181|手机版|小黑屋|Archiver|恩山无线论坛(常州市恩山计算机开发有限公司版权所有) ( 苏ICP备05084872号 )

GMT+8, 2024-3-29 00:41

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

| 江苏省互联网有害信息举报中心 举报信箱:js12377 | @jischina.com.cn 举报电话:025-88802724 本站不良内容举报信箱:68610888@qq.com 举报电话:0519-86695797

快速回复 返回顶部 返回列表