如何安全、优雅的连回家庭局域网?

连回家里可以做什么?

看下面五个场景。

1 连接路由管理界面,进行远程管理,通常如唤醒家庭局域网中的电脑,或者启动BT/PT进行远程下载。
2 向路由器中传输文件(将某些文件保存到家里,或者从家里获取一些文件)
3 访问部署在家庭局域网中的服务,如NAS,或者搭建好的Web应用程序(比如给别人建站,用于Demo站点搭建在家里)
4 使用远程桌面连接家里电脑(给客户展示你设计好的PS图样,存取文档,下载,执行程序编译软路由固件,打游戏…)
5 利用家中的互联网连接(典型如你在公司,有上网有限制,但从家里上网没有限制)

这几个啊,不是都有现成方案了吗?为什么还要说?

1 连回家里路由器图形界面?ISP封闭了80、443,改下路由图形界面端口,比如7001,公网上直接IP:端口访问就好了。

  方法可以。不过路由器这图形界面安全性是在差了点,开到公网上被破解分分钟的事。不安全。

2 向路由器中传输文件?

  • 路由上空间那么小,有必要吗?

       别激动,路由那点空间确实不是给你临时存储文件的,但是,路由上可以挂载其他硬盘,可以挂载NAS,你可以直接传到硬盘或者NAS里。

  • 好吧,如果空间没问题,那么为了传文件,在路由上开个网盘,比如可道云,防火墙开个端口,公网上直接IP:端口访问就好了。

  方法可以。搭建个网盘,不麻烦吗?另外这类内网级别的东西开到公网上,安全吗?不安全也不优雅。

3 访问部署在家庭局域网中的服务。老办法,防火墙开一堆端口映射,公网上直接IP:端口访问就好了。
  方法可以。设置一堆映射,麻烦,不优雅。内网东西开到公网,不安全。

4 使用远程桌面连接家里电脑。老办法,直接把Windows远程桌面端口转发到公网。
  方法可以。家庭电脑上公网,我不怎么放心。不安全。

5 利用家中的互联网连接?开HomeLede的IPSec,可以做到。
  方法可以。你可能要设置一个IPSec了。不优雅。

你把上面方法都怼了,你拿个既优雅又安全的出来!

没错,我还真有一个方案。利用SSH,即可设置一次搞定上面五个场景。安全性没有一点问题,还不需要设置一堆东西,既优雅又安全。

不错啊,怎么做?

三个要求:

1 首先,你要有个公网IP,让你在互联网上可以连回路由器。(没有怎么办?别急,计划下一篇给出一个方案)
2 有DDNS动态域名。这一步可选,有了动态域名你就可以避免记忆家里路由公网IP,当然,有Server酱等方案或者记忆力超群也没问题,不过记得大多数ISP的公网IP会变,记得要连接最新的。
3 有个电脑。台式,笔记本都可以。有的朋友问了,手机,Pad不行吗?理论说,不是不行,不过移动设备屏幕太小,上面五件事可以算是要求相对较高的远程操作了,你想想用手机操作方便吗?所以我推荐用电脑。

怎么做?

HomeLede已经内置了SSH服务器,我们需要做的是准备一个SSH客户端。Windows推荐使用Bitvise SSH Client。下载地址://www.bitvise.com/ssh-client-download
完全免费,功能强大。

如何连接到HomeLede(家庭路由器)?

SSH默认可以使用路由器的命令行用户连接,路由默认的root/password就可以。但这样太不安全了,我们采用秘钥对方式来连接。

打开Bitvise SSH Client,先保存一下连接设置。选择一个合适的位置保存连接信息。

我们来生成秘钥对。

首页上点击“Client key manager”,弹出窗口中,点击“Generate New”生成一个新的秘钥对。秘钥对弹窗中,“Algorithm”秘钥算法下拉框中,选择“Ed25519”。(Ed25519是目前最安全、速度最快的秘钥对生成算法,传统的一般用RSA),其他参考下图设置。
最后点击“Generate”生成。

接下来,我们把秘钥对中的公钥,保存至路由器。

在“Client Key Management”窗口中,点击选中刚才生成的秘钥对,点击下方“Export”按钮,弹出窗口中,选择格式“OpenSSH format”,点击下方“Export”按钮。选择一个公钥保存位置并命名。本例中使用“HomeLedePubKey”扩展名默认为pub。

打开“HomeLedePubKey.pub”,其中以“ssh-ed25519 ”字样开头的这一行,就是秘钥对的公钥。全选本行后,按Ctrl+C复制。

打开HomeLede管理界面,找到“系统”,“管理权”,拉到最下面,在“SSH秘钥”处,按Ctrl+V将上一步复制的公钥粘贴进来。点击“保存并应用”。

至此,路由器已经接受我们刚才生成的秘钥了。

接下来,设置路由器的SSH服务端。默认路由器SSH服务端会接收来自本地(LAN,也就是家庭网络内部),22端口的请求,且允许使用用户名密码认证。如下。

我们添加(点击“SSH秘钥”上面左侧“添加”按钮)一条WAN的设置,接收来自互联网的,某个端口(注意避开ISP屏蔽的80、443),比如7001,最后别忘记点击最下面的“保存并应用”。

注意,我们去掉了“密码验证”及“允许 root 用户凭密码登录”,这样从互联网的连接,只能使用秘钥方式连接。通过穷举密码的破解方式就无效了。如下图。

至此,通过SSH客户端,我们已经可以从互联网安全的连回家庭网络了。

可以测试一下,在Bitvise SSH Client中输入外网IP或者动态DNS域名,端口按照刚才设置填写,使用root用户,认证方式选择publickey。

点击“Login”后,下方日志中出现“Authentication completed.”字样,就是连接成功了。

如果是第一次连接,会弹出窗口,询问是否接受服务器的Host Key,点击“Accept”就好。

接下来,点击“Save Profile”将测试完毕的连接信息保存起来。

这个tlp文件就是连接回家庭局域网的钥匙,务必保存好(存到邮箱,或者网盘都可以),如果在公共计算机上使用,使用后记得删除。

好了,接下来我们开始解锁上面的五种场景。

先来 解锁1 访问路由器图形界面、 3 访问部署在家庭局域网中的服务 和 5 利用家中的互联网连接。

SSH支持动态Socks转发,利用这个功能,可以在运行SSH客户端(Bitvise SSH Client,也就是你手里的这个电脑)的主机上开一个本地Socks5代理,所有流量通过SSH转发到服务端(HomeLede软路由上)。一次完成场景1、3、5。

确认连接到SSH服务端后(HomeLede软路由),在Bitvise SSH Client中,点击“Services”,在“SOCKS/HTTP Proxy Forwarding”处,勾选“Enabled”启动,最后点击下面“Apply”应用设置。

按照默认设置,会在本地127.0.0.1的1080端口开启一个SOCK5代理。如果你本地端口已经被占用,请自行调整上面端口后,再启用。

随后,我们让浏览器通过这个SOCKS5代理来访问网络。

以Chrome为例。虽然Chrome可以使用Windows系统默认设置的代理,但操作起来非常不灵活,不推荐这样用。建议为Chrome安装一个插件,//proxy-switchyomega.com/。

SwitchyOmega安装后,会自动在“情景模式”中创建一个叫做proxy的情景,我们把其中的“代理服务器”的“代理协议”设置为“SOCKS5”,代理服务器设置为“127.0.0.1”,端口“1080”(指向SSH客户端开启的本地Socks5代理)。最后,点击“应用选项”。

现在就可以开启新浏览窗口,浏览网页了。在地址栏右侧,可以通过点击“SwitchyOmega”图标,设置Chrome联网模式,比如我们希望连回家里的HomeLede,选择刚才配置的“Proxy”模式。

现在试试访问以下家里的路由器界面,比如192.168.1.1。是不是和在家里访问一样了?

你可以试试访问NAS管理界面,比如群晖的,192.168.1.220:5000,或者任何家中的Web服务。是不是都可以访问了?

输入百度,腾讯等等任何网站,现在所有流量都相当于在家中HomeLede软路由发出,访问受限的网站都可以访问了?

所有家庭内网服务都不需要暴露在公网上(无需端口转发),无需担心安全问题,使用完毕后,关闭SSH客户端(Bitvise SSH Client)一切连接就中断了。

我们再来看看2 向路由器中传输文件。

我们不会利用路由器自有空间存储文件,路由就是个中转,通常在路由上挂载额外的硬盘,或者NAS。如下图,路由上挂在了额外的硬盘及NAS。

提示:路由挂载NAS可以使用HomeLede的“网络存储”->“挂载SMB网络共享”。

SSH客户端支持文件传输,点击左侧的“New SFTP window”,弹出一个文件传输的窗口,左侧“Local files”是你当前电脑,右侧“Remote files”是HomeLede路由器。在右侧选择你想存储文件的路径,比如你NAS挂载位置,左侧选择路径,文件,右键文件“Upload”即可上传。在右侧选择文件,右键“Download”即可下载。

最后一个场景,4 使用远程桌面连接家里电脑

(给客户展示你设计好的PS图样,存取文档,下载,执行程序编译软路由固件,打游戏…)

通常用远程桌面连接搞定。一般家里电脑不会总开着,所以用之前,需要先开机。现在几乎100%有线网卡都支持远程唤醒,一根网线连接HomeLede软路由与电脑,电脑BIOS中设置允许唤醒,操作系统中也在网卡处启用唤醒,另外操作系统要允许远程桌面连接,为了连接方便,建议在路由上给你电脑配置静态IP。(还可以考虑智能开关,将电脑设为来电自动开机,通过手机遥控开关,使电脑上电后自动启动。)

SSH连接HomeLede,进入路由界面,“管控”->“网络唤醒”,右侧选择你要唤醒设备的MAC地址,点击“唤醒主机”之后,大概10几秒,电脑就会进入操作系统了。


这时就可以远程连接了,如何来做呢?

SSH客户端支持双向端口转发,我们需要的是从手边的电脑连接到家里的电脑,所以使用Bitvise SSH Client的C2S(Client To Server)功能,我们做的是将本机的一个端口,转发到家庭局域网里电脑的远程桌面连接端口上。切换到C2S标签,点击下方“Add”添加一个转发。“Listene Interface”和“List. Port”是你本机监听端口,我们通常用127.0.0.1,端口随意一个空闲的,比如13389。
“Destination Host”和“Dest. Port”是家庭网络中对应的位置。比如家里电脑是192.168.1.3,Windows默认远程连接端口是3389。这里就填入192.168.1.3和3389。

这样,一条规则就建好了,这条规则的意思是,将本机(SSH客户端)127.0.0.1的13389端口流量转发到HomeLede(SSH服务端),由HomeLede转发到家庭局域网的192.168.1.3的3389端口。

建好规则后,规则配置栏右下角会出现“Apply”字样的超链接,点击即可生效。

接下来,我们启动手头电脑的远程桌面连接,连接127.0.0.1:13389,怎么样,是不是出现了家里电脑的远程登录界面?输入用户名密码登录吧。随后,你是想展示设计图,编译固件,甚至打游戏,就随你了。

以上对于Bitvise SSH Client的各种设置,如“Services”,“C2S”标签的设置,都可以点击左侧“Save Profile”保存下来,下次SSH一建立,所有设置会自动生效。当然SSH客户端还可以远程在HomeLede上执行命令,也就是左侧“New terminal console”按钮,点击即可打开一个命令行窗口。其实还有好多功能,大家可以自行探索。

总结

本文介绍了使用SSH连回家庭局域网的方法,特别适合于在外工作的人士,经常需要访问回家庭网络资源的人士使用。
本方法适合于在电脑上操作,安全高效,一次设置,长期可用。

本文的方案在HomeLede软路由固件上(//github.com/xiaoqingfengATGH/HomeLede)测试通过。

涉及到的软件下载:

  • HomeLede固件://github.com/xiaoqingfengATGH/HomeLede/wiki/HomeLede%E7%89%88%E6%9C%AC%E5%8F%91%E5%B8%83
  • SSH客户端:Bitvise SSH Client //www.bitvise.com/ssh-client-download
  • Chrome浏览器插件:SwitchyOmega //proxy-switchyomega.com/