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

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

如果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分钟检查一次

发表评论

新用户的评论需审核后才会显示;

电子邮件地址不会被公开;
必填项已用*标注