openwrt利用ssh隧道穿透,实现内网路由器远程管理

openwrt利用ssh隧道穿透,实现内网路由器远程管理无评论

2017年1月25日 at 下午7:23分类:其他 阅读: 1,130 次

如果openwrt路由器在内网,分配的是私网地址,如何通过远程ssh或web来管理路由器

首先需要一台有公网地址的VPS,假设VPS的IP地址为11.22.33.44,系统为Ubuntu 14.04

1、在openwrt上启动ssh隧道

ssh -Nfg -R 11111:192.168.1.1:22 11.22.33.44 -p 6000 -l root

192.168.1.1为openwrt地址,ssh端口为22,远程VPS的地址为11.22.33.44,ssh端口为6000,11111为映射端口,连接时会要求输入VPS的SSH密码,连接成功查看网络连接

# netstat -nautp

Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name

tcp        0      0 127.0.0.1:11111         0.0.0.0:*               LISTEN      19335/sshd: root

tcp        0      0 11.22.33.44:6000    22.33.44.55:45222      ESTABLISHED 19335/sshd: root

tcp6       0      0 ::1:11111               :::*                    LISTEN      19335/sshd: root

22.33.44.55为路由器经nat转换后的公网IP地址,可以看出openwrt的22端口映射成了vps本地的11111端口

此时在vps上可以通过如下命令来连接openwrt

ssh root@127.0.0.1 -p 11111

如果要映射web页面,在openwrt上执行:

ssh -Nfg -R 11111:192.168.1.1:80 11.22.33.44 -p 6000 -l root

将80端口映射到VPS上的11111端口,在vps上可以通过http://127.0.0.1:11111来访问路由器的WEB管理页面

 

2、openwrt的免密码登录

上述过程在openwrt执行隧道连接时需输入vps的连接密码,下面介绍如何省略此步骤

在VPS上执行

ssh-keygen -b 1024 -t rsa

在目录/root/.ssh中生成id_rsa(私钥)和id_rsa.pub(公钥)

将id_rsa.pub拷贝到openwrt的/etc/dropbear目录,并改名为authorized_keys,从VPS登录openwrt不再需要密码

 

在openwrt上执行

~# dropbearkey -t rsa -f ~/.ssh/id_dropbear
Generating key, this may take a while...
Public key portion is:
ssh-rsa AAAAB3NzaC1yc2EAA6666666666666666666666666666666666wjA+k739HnuMCbjVnZ8i/h
K4A1sm0As2Xywa866662NSL6u2Hxf6bwLmAteJRfk92oypw8VhDZnJ8O0O1fc3+vAgWrYerbQ5GJ3DScQsIIvfsqhlqU4Rq14/05/LIONc/pkHuQ2iJ6CPkDPV5bBCKzHn
2+jE55cjXg1jcUbI6iLpRRbUOj2Os97OzJP1s4x6rCMz6PWnD3SdZYQJOjzAGaSjosg+K9nVC+AKGTCbGIfe8oIOBWM0w50BjRYZQCiUVi0nUMsh3iMb root@OpenWrt
Fingerprint: md5 d4:dc:29:6b:ce:ad:af:fa:d5:27:01:74:bb:ae:39:07

将上面的粗体部分拷贝到VPS的~/.ssh/authorized_keys中,注意这个是单行数据,要删除所有回车键

这样从openwrt上ssh VPS不再需要密码

 

3、在其他设备上登录VPS来访问路由器

修改vps上的/etc/ssh/sshd_config文件,修改或增加

GatewayPorts yes

openwrt上映射ssh命令改为:

ssh -Nfg -R *:11111:192.168.1.1:22 11.22.33.44 -p 6000 -l root

连接后VPS网络连接状况变为:

# netstat -nautp
Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name

tcp        0      0 0.0.0.0:11111           0.0.0.0:*               LISTEN      21295/sshd: root

tcp        0      0 11.22.33.44:6000    22.33.44.55:41473      ESTABLISHED 21148/sshd: root@no

可以看到监听地址由127.0.0.1变为0.0.0.0

openwrt上映射web命令改为:

ssh -Nfg -R *:11112:192.168.1.1:80 11.22.33.44 -p 6000 -l root

此时可以通过任何设备执行如下命令访问路由器的ssh

ssh root@11.22.33.44 -p 11111

通过http://11.22.33.44:11112访问路由器WEB页面

为了避免ssh异常退出,可以写一个脚本,加入定时任务检查,如果ssh隧道断开,则重新连接:

#!/bin/sh
icount=`ps -w | grep "ssh -Nfg" |grep -v grep| wc -l`
if [ $icount = 0 ] ;then
logger -t "ssh_remote" "ssh remote restart!"
ssh -Nfg -K 120 -R *:11111:192.168.1.1:22 11.22.33.44 -p 6000 -l root
ssh -Nfg -K 120 -R *:11112:192.168.1.1:80 11.22.33.44 -p 6000 -l root
fi

将上述代码保存为/root/monitor.sh并设置可执行权限
crontab -e编辑定时任务,加入
*/10 * * * * /root/monitor.sh
10分钟检查一次

斐讯K2 刷breed、第三方固件及开启telnet、ssh方法,含原版固件净化、新增功能

斐讯K2 刷breed、第三方固件及开启telnet、ssh方法,含原版固件净化、新增功能有16条评论

2017年1月13日 at 上午9:22分类:硬件 阅读: 9,579 次

固件发布页面:
http://iytc.net/wordpress/?p=1772

jd拿了个免费的斐讯K2:

软件版本: 22.4.5.42
设备型号: K2
硬件版本: A2

据说有收集用户信息的问题:

http://bbs.mydigit.cn/read.php?tid=1572590

需要刷第三方固件或对原版固件进行净化处理

 

1、刷breed

breed类似uboot,用于路由器的引导,刷了breed后,可以方便的刷第三方固件

这里使用的是利用网页执行脚本的漏洞安装breed

便携机无线连接K2,K2 WAN口连internet,先保证可以正常上网
用Firefox,傲游,Chrome等登录http://192.168.2.1

选择右上角的“定时重启路由器”

点选时间中的右侧下拉分钟选择框,鼠标箭头(手势)放在05上,点击鼠标右键,在Firefox或傲游浏览器“审查元素”(傲游浏览器先按“F12”按键打开审查页面后再点击定时重启):

双击"05",改为你要执行的命令:

改为:

05 | wget http://breed.hackpascal.net/breed-mt7620-phicomm-psg1208.bin

在定时重启路由器页面上重新选择05之后(这里要注意,一定要重选,并且重选后可以看到05后面自己输入的字符):

点击“保存”按钮后,就相当于K2执行了wget获取文件的命令。

重复上述过程,分别改为:

05 | mtd unlock Bootloader

05 | mtd -r write breed-mt7620-phicomm-psg1208.bin Bootloader

上述操作是利用漏洞执行了3条命令,下载breed并写入bootloader,最后一次保存后,路由器会写breed并重启。

如果路由器没有自动重启,说明操作过程有误,请仔细检查操作过程。

你可以用此方法让K2执行任何命令(比如下面的安装SSH的命令)。

 

进入Breed方法:

拔除K2上Wan口的网线,路由器断电,持续按住路由器上的reset按钮,接通路由器电源,3秒后松开reset按钮。
在浏览器地址栏输入“http://192.168.1.1”访问Breed Web。

进入Breed Web后,请及时进行原始EEPROM、固件备份,然后再刷其他的固件。

 如果不想刷其他第三方固件,想对原版固件进行净化,继续往下处理:

开启telnet方法(此步骤可省,可直接用WEB漏洞安装SSH):

先用breed备份eeprom文件,将备份出来的文件用ultraedit修改:

将0x26、0x27位置修改为10、70,然后通过breed的“固件更新”写入修改的eeprom

重启后可用telnet 192.168.2.1进入shell界面(无密码):

或者可以用web漏洞直接执行:

/usr/sbin/telnetd -l /bin/login.sh

也可以开启telnet

 

安装SSH:

telnet登录后执行(其实ssh也可以通过WEB漏洞来安装,可以省去安装telnet步骤):

opkg install http://downloads.openwrt.org/barrier_breaker/14.07/ramips/mt7620a/packages/base/dropbear_2014.63-2_ramips_24kec.ipk
# 开机自启
/etc/init.d/dropbear enable
# 更改root密码为 admin
echo -e 'admin\nadmin' | passwd root
# 启动
/etc/init.d/dropbear start

原版固件的净化:
进shell后,先把定时任务干掉

第二个任务是上面设置的定时重启,在web页面关闭

第一个任务比较可疑,半夜两点上传数据?

winscp找到/usr/lib/lua/luci/tools/scheduletask.lua文件

修改luci.sys.call("cp -f %s %s > /dev/null" % {defaultrule,crontabpath})

--luci.sys.call("cp -f %s %s > /dev/null" % {defaultrule,crontabpath})
luci.sys.call("touch %s" % {crontabpath})

 

 

再看有没有可疑网络程序

禁用可疑程序:

/etc/init.d/lc stop

/etc/init.d/lc disable

http_event_inform是厂家远程管理的tr069程序

/etc/init.d/tr069 stop

/etc/init.d/tr069 disable

查看可疑进程:

禁用可疑程序:

/etc/init.d/collect stop

/etc/init.d/collect disable

 

telnet不安全,把telnet也禁掉:

/etc/init.d/telnetd_startup stop

/etc/init.d/telnetd_startup disable

 

重启后网络进程清爽了:

备份修改以后的固件:

 

去除鼠标右键限制:
/usr/lib/lua/luci/view/themes/bootstrap/header.htm
找到
oncontextmenu=self.event.returnValue=false
删除

 

增加功能,比如要增加一个定时开关WIFI的功能(睡觉时间自动将WIFI关闭)

如果是通过shell几行命令就搞定了,我们搞复杂点,实现通过web来配置:
打开/usr/lib/lua/luci/view/themes/bootstrap/header.htm
找到
<li>
<a href="#" id="timeRboot" data-toggle="modal" data-target="#timeRestartModal">定时重启路由器</a>
</li>
在下面增加:
<li>
<a href="#" id="wifiRboot" data-toggle="modal" data-target="#wifiRestartModal">定时重启WIFI</a>
</li>

界面上会出现新增菜单:

依葫芦画瓢修改header.htm增加配置界面:

还需依照/etc/config/timereboot、/usr/lib/lua/luci/controller/admin/timereboot.lua增加相应文件,省略一万字...

所有实现此功能需要修改的文件打包如下,有兴趣者可以参考:

K2

 

软件包添加

现在我们尝试增加一个广告屏蔽的软件包adbyby

首先增加一个控制界面,还是修改/usr/lib/lua/luci/view/themes/bootstrap/header.htm

找到<% elseif v == "more_wlextend" then %>,在此语句上方添加:

<% elseif v == "adbyby" then %>
<li><a class="list_li1_a" href="<%=nodeurl(prefix, v, nnode.query)%>" id="adbyby" style='<%if temp=="adbyby" then%> border-left:3px solid #F08300;color:#F08300;background:#F8F8F8;<%end%>'><div><span class="icon-more_safeset iconSpan"></span><span class="textSpan">广告屏蔽</span></div></a>
</li>

再依葫芦画瓢修改/usr/lib/lua/luci/view/admin_index/index.htm文件:

else if(v == "adbyby")
{
nhref = "<%=luci.dispatcher.build_url("admin", "adbyby")%>";
$(tbsid).html("广告屏蔽")
}

增加/usr/lib/lua/luci/controller/admin/adbyby.lua、/usr/lib/lua/luci/model/cbi/adbyby.lua、/etc/config/adbyby等文件,文件内容可以对应目录powersave的内容进行修改。

刷新界面,出现新菜单:

修改的文件包如下:

adbyby

界面修改后,需加入adbyby的可执行文件,由于adbyby的文件较大,而原版固件的剩余空间较少,只有500多K:

因此需进行变通,有人做了一个在ram中运行的adbyby版本:

http://www.right.com.cn/forum/thread-191833-1-1.html

占用flash空间只有20多K,由于程序未开源,有一定风险,安装:

opkg install http://tianbao.sf.net/adbyby

开启
tb ad on

关闭
tb ad off

开启后,程序下载http://update.adbyby.com/download/7620n.tar.gz到/tmp(ram),再解压到/tmp/adbyby运行:

/tmp/adbyby/bin/adbyby

规则更新URL在/tmp/adbyby/bin/update.info文件

程序会启动一个tbb程序来定时(间隔123秒)检查下载规则

参考此程序的过程,我们可以创建一个脚本文件,比如/root/adbyby.sh,内容如下:

cd /tmp
#等待网络连接成功
wget_ok="0"
rm -f 7620n.tar.gz
while [ "$wget_ok" = "0" ]
do
wget http://update.adbyby.com/download/7620n.tar.gz
if [ "$?" == "0" ]; then
wget_ok="1"
else
sleep 30
fi
done
#解压、启动adbyby
mkdir -p adbyby
tar -zvxf 7620n.tar.gz -C ./adbyby
cd ./adbyby/bin
./startadbb

修改文件权限为755,我们可以将/root/adbyby.sh加入到自启文件/etc/rc.local中,开启自动启动,不过由于要控制adbyby启动和停止,因此最好创建一个服务,新建/etc/init.d/adbyby
#!/bin/sh /etc/rc.common
START=80
start() {
/root/adbyby.sh &
}
stop() {
cd /tmp/adbyby/bin
./stopadbb
}
restart() {
stop
start
}

修改权限为755,执行/etc/init.d/adbyby enable将服务加入自启动
下一步是将界面和可执行文件关联起来。此部分主要修改/usr/lib/lua/luci/model/cbi/adbyby.lua文件,控制adbyby的停止与运行,以及读取规则文件日期,修改文件如下:
adbyby

修改的所有文件打包如下:

k2_mod

 

完整的修改后的固件如下:

firmware_k2_blue_adbyby

ssh用户名:root

ssh及web密码:admin

 

可以用两种方式烧写此固件:

1、解压后winscp上传到K2路由器的/tmp目录,然后ssh执行“mtd -r write /tmp/firmware_k2_blue_adbyby.bin firmware”即可

2、解压后可以在breed中直接烧写此固件

adbyby功能验证:

K2界面显示adbyby运行状态显示“运行中”:

打开优酷视频(http://www.youku.com/),点击一个视频浏览,会自动跳过广告。

 

下面继续尝试加入SSR for Openwrt

K2原版固件虽然只剩下500多K空间,不过由于K2自带了libopenssl和libpcre库,因此还是可以装下SSR的

首先重新用openwrt 14.07 SDK编译源码项目:
https://github.com/ywb94/openwrt-ssr
将编译好的luci-app-shadowsocksR-Client_1.2.1_all.ipk安装到K2,注意K2需修改/etc/opkg.conf,改为正确的源地址:
src/gz barrier_breaker_base http://downloads.openwrt.org/barrier_breaker/14.07/ramips/mt7620a/packages/base
src/gz barrier_breaker_packages http://downloads.openwrt.org/barrier_breaker/14.07/ramips/mt7620a/packages/packages
src/gz barrier_breaker_luci http://downloads.openwrt.org/barrier_breaker/14.07/ramips/mt7620a/packages/luci
src/gz barrier_breaker_routing http://downloads.openwrt.org/barrier_breaker/14.07/ramips/mt7620a/packages/routing
src/gz barrier_breaker_management http://downloads.openwrt.org/barrier_breaker/14.07/ramips/mt7620a/packages/management
然后opkg update后再安装。

按照上面添加adbyby的方法在K2界面上添加SSR界面:

20170213162543接下来需要对SSR的代码进行修改,将shadowsocksr的路径由admin/services/shadowsocksr/改为admin/shadowsocksr/,因为K2原版没有admin/services/路径。

还有一点比较奇怪的是lua中不能使用“o.rmempty = false”语句了,如果使用就出错,需要把所有此语句删除。

一顿大改后,功能基本正常了,界面还需调整。

界面调整修改/www/luci-static/bootstrap/css/cbi.css,增加一些样式:

 

检查SSR的功能,发现防火墙规则没有起来,问题出在ipset上,运行ipset,提示错误:

root@K2:~# ipset list
ipset v6.20.1: Cannot open session to kernel.

搜索openwrt,发现并没有K2固件中的3.10.14内核版本,google搜索发现3.10.14为MTK出的一个openwrt版本:

https://github.com/unigent/openwrt-3.10.14

下载后重新编译所需要的各个ipk

编译成功后,lsmod可以发现能够加载ipset模块了,但是运行还是报错:

root@K2:~# ipset list
ipset v6.30: Kernel error received: message could not be created

还是不行,可能是内核原因,无解了

准备回到解放前,用iptables一条条的添加防火墙规则

好不容易把SSR给折腾成功了,目前的ssr特性:

支持两种dns解析方式:

1、远程解析:本地域名是被污染的,由远程ssr服务器进行二次解析,本地不对dns做处理

2、pdnsd解析:用支持tcp方式的dns隧道进行gfw列表站点的解析,在本地能获取到正确的域名对应的IP地址

采用路由方式进行代理:中国网段的IP不走代理;中国以外的IP走透明代理访问;

在实际测试时发现一个问题,由于设置ssr后,要对dnsmasq进行重启,日志中会打印大量gfw列表的信息:

Mon Feb 20 19:32:44 2017 daemon.info dnsmasq[6760]: using nameserver 127.0.0.1#5353 for domain 1984bbs.org
Mon Feb 20 19:32:44 2017 daemon.info dnsmasq[6760]: using nameserver 127.0.0.1#5353 for domain 1984bbs.com
Mon Feb 20 19:32:44 2017 daemon.info dnsmasq[6760]: using nameserver 127.0.0.1#5353 for domain 1949er.org

..

gfw列表有4000多条,打印信息较多,在其他openwrt可能只占用几秒的CPU处理时间,但是在K2上发现CPU占用100%(0% idle)的时间达到90秒!

没办法,重新编译了一个dnsmasq,屏蔽打印输出,替换K2的/usr/sbin/dnsmasq文件

 

 

未完待续。。

linux下常用命令

linux下常用命令无评论

2017年1月3日 at 下午7:50分类:其他 阅读: 600 次

查看目录大小

du -h --max-depth=1

查看网络连接

netstat -nautp

查看防火墙规则

iptables -L -n -v

查看版本

uname -a
cat /etc/redhat-release

后台执行命令

(cmd &)

查找最近30天内修改的文件

find ./squashfs-root/ -mtime -30 -type f -print

查找大于100K的文件
find . -size +100k -exec ls -ld {} \;