用Beaglebone Black搭建低功耗家用简易NAS下载机(2)——外网访问篇

  这一篇除了写主线之外还简单记叙了一下我在操作过程中遇到的两个小插曲……

  经过上一篇对Beaglebone Black的配置,我们已经搭建好了一个简易的NAS环境,可以在局域网内管理Beaglebone挂载区上面的文件,以及挂任务到Beaglebone上面来下载等等。但是我们的目标是在外面的时候就能挂任务给家里的Beaglebone Black让它自己下载,等回到家的时候就能下载好。所以今天要做的是通过配置路由器来让Beaglebone Black能直接被外网访问。

一、绑定内网IP地址

  我们路由器一般都是通过DHCP服务器自动给局域网内的设备分配IP地址,如果没有固定某个IP的话,过了某个IP续订的时间后再打开设备,也许内网的IP地址就会改变。比如今天开机是192.168.1.100,明天就变成192.168.1.101了。所以为了方便后续的操作,献给接入内网环境的Beaglebone Black绑定一个静态的IP地址,我这里就用 192.168.1.88 好了。

  现在路由器后台找到当前运行的Beaglebone Black,一般默认主机名就是Beaglebone,找到之后记录下它的MAC地址,当然也可以通过ssh连上Beaglebone Black之后直接用“ifconfig”命令来得到网卡的MAC。记录下来之后在路由器后台的“网络安全”下面找到“ARP绑定”(不同的路由器后台具体位置不一样),然后填写上刚才记录下的MAC地址,在IP地址那里就填入我们希望分配过去的“192.168.1.88”。填好之后再看看“网络配置”那里的“DHCP”,发现这里面也已经自动添加了一条规则给Beaglebone Black的MAC分配了同一个IP。对于不同的路由器,有些只需要设置一个地方,有些要两个地方都设置才生效。

二、映射外网端口

  固定好Beaglebone Black的内网IP之后,我们就可以把它暴露给外网环境访问了。一般来说讲局域网内的设备暴露给外网有两种方式,一种是设置DMZ主机,相当于把某个内网设备直接整体包括任何端口都暴露到外网,第二种是通过“虚拟服务”,把某些外网环境下路由器的某些端口直接映射给内网的机子。我们在这里选用第二种方法,这样可以根据需要配置,以后也方便给不同主机做不同映射。

  我们进入到路由器后台“应用服务”的“虚拟服务”下,根据前一篇配置Aria2远程下载我们知道,它接收远程任务主要是通过6800端口,所以我们首先把路由器的6800端口,映射到内网刚才分配的IP“192.168.1.88”的6800端口。其次为了便于没有客户端的情况下提交任务,我们还在Beaglebone Black上面搭建了Nginx,上面挂载了一个网页版的客户端YAAW,所以我们把网页用到的80端口也映射给它。

  这样配置完成后,访问路由器的6800端口和80端口就被转发到我们的Beaglebone Black上面了。

三、绑定动态域名

  我们大部分都是使用ADSL的方式来拨号上网,这样每次断线再拨号之后IP地址会变动,虽然现在大部分人的路由器都是7×24小时工作,IP地址不会轻易变动,但总有万一的情况出现,所以我们还是通过绑定动态域名来确保任何时候都能从外网访问到路由器。

  我用的这款路由器支持花生壳的动态域名,刚好我很早就开始用着它,就直接在路由器后台的“动态域名”页面上设置好登录信息就OK了。设置好之后访问那个动态域名就相当于访问路由器的外网IP了,就不用担心外网IP变动了,因为这样不管外网IP怎么变动,动态域名都能绑定到新的IP上。

四、在外网环境下用客户端建立下载任务

  正常来说这样设置好后,在外网环境就可以通过访问“ http://动态域名/yaaw ”来进入Aria2的客户端YAAW来远程给Beaglebone Black下达下载任务了。但是我这里遇到一个小插曲(详见下文“小插曲一”),解决之后就可以正常的在外网远程下载了。

  当然如果不想在自己的Beaglebone上面建立客户端的话,也可以通过“ http://aria2c.com ”这个别人建立好的YAAW网页客户端来下载,只要把“JSON-RPC”设置为“http://你的动态域名:6800/jsonrpc ”即可。

  自此,整个设置外网访问的工作就做完了,不过刚做好的时候也因为一些小插曲导致家里的其他设备WIFI不大正常(详见下文“小插曲二”),后面解决了之后一直这么挂着用了快一个星期,一直非常稳定,不管我身在何处,它都躺在家中的角落安安静静的爬资源。

小插曲一、电信运营商暗把公网变私网

  就在我配置完动态域名之后,路由器上显示动态域名连接成功。我用“ping”命令来“ping”了一下我的动态域名,得到的IP地址结果跟我访问“ip138”得到的本机IP地址是一样的(见下图),但是在外网环境不管怎么访问都无法访问到Beaglebone Black。
[01]

  后面偶然间打开路由的“连接状态”,看到当前虽然是已连接外网,但是得到的IP地址却是“100.64.XX.XX”(见下图)。这个路由得到的IP地址跟我访问外网的时候所显示的本地外网IP地址完全不一样啊。
[02]

  然后上网查了一下,发现这个“100.64”开头的IP地址是私网地址,说白了就是一个内网的IP地址,就跟你局域网是“192.168”开头一样的。原来电信等几大运营商,为了节省公网IP的资源,把成片成片的用户偷偷组成一个内网,然后在网关里面通过NAT的方式让大家以为自己是在外网。这就是为什么我们明明路由器得到的是一个私网IP,访问外网的时候却看到的是名正言顺的公网IP,就是运营商网关做NAT转换的结果。这样做造成的后果就是,外网访问那个你看到的IP并不是你自己真实的IP,无法通过那个IP来访问到自己本身。好处是相对安全,可以在运营商网关过滤掉外网给你带来的攻击,坏处就是你无法通过被动的方式被被外网访问到。这也是为什么网上很多人反馈说家里的监控在外网却无法访问(当然现在新的监控系统通常是主动连接到位于公网IP的监控服务器,来实现被外网访问,而不是被动等待外网的连接,所以没这个问题),以及外网无法控制家里的WIFI插座啊、WIFI机器人等等。通过之前的搜索,发现大部分地区的各种运营商都在偷偷这样干,完全没有知会过用户,原来不是只有我一个人遇到这个问题。

  了解清楚原因之后,我就打电话给运营商,跟客服人员说要公网IP,第二天技术人员再打电话来确认一遍需求之后,就在他们的后台那里改一下,我这边就解放了。重新在路由器上面断开再连接,终于发现路由器得到的是公网IP,可以直接被外网访问了,于是就能正常的在外网环境下访问Beaglebone Black了。

小插曲二、磊科路由器后门带来的隐患

  就在得到公网IP的那天晚上,家里的无线设备似乎都遇到了问题,刚开始能正常使用,但是隔了一段时间之后就连不上WIFI了, 总是卡在“正在获取IP地址……”那里。用有线方式连接路由器的电脑 上网依然正常,但是访问路由器的IP无法进入路由器的管理页面。重新给路由器断电再上电之后能正常使用一段时间,随后又出现同样问题,恢复出厂设置也不济。

  后面谷歌了一下,发现这是早就被爆出来的“磊科后门”,只是因为之前一直被电信运营商“保护”在私网环境下,所以以前完全没有遇到这个问题。最彻底的解决方法就是刷机升级固件了,不过我用的是磊哥NW762路由器,主要是看中它可以原生支持插USB设备来进行迅雷远程下载。如果刷第三方固件的话,就失去了原生的迅雷远程下载功能,而官方固件又已经有年头没更新了,我目前的固件版本已然是官网最新版了。所以这样一来,刷固件的解决方案就被暂时搁置了。

  但是后来又找到了另外一个解决方案,有人分析了这个后门发作的原因,主要是在于路由器的TCP的5357端口和UDP的53413,只要把这两个端口转发到不存在的地方就行了,或者干脆设置一个DMZ到不存在的主机也行。于是我决定双管齐下,因为端口转发的优先级在我这一款路由器里面是高于DMZ主机的,也就是说同时设置了DMZ主机和端口转发的话,访问被转发的端口会跳转到映射地址,而不是DMZ主机本身,这样一来的话即便设置了DMZ主机也不会影响我之前给Beaglebone Black设置的端口转发,于是就大胆的进行设置了。(如下图)
[03]

  我把那两个有问题的端口都转发到一台不存在的地址上,这里我用“192.168.1.44”,另外也把这个不存在的IP作为DMZ主机暴露出来。
[04]

  经过这样设置后,重启一下路由器,家里的无线设备终于又恢复正常了。一切又回归宁静,除了多个Beaglebone Black在角落默默地爬……

文章目录
  1. 1. 一、绑定内网IP地址
  2. 2. 二、映射外网端口
  3. 3. 三、绑定动态域名
  4. 4. 四、在外网环境下用客户端建立下载任务
  5. 5. 小插曲一、电信运营商暗把公网变私网
  6. 6. 小插曲二、磊科路由器后门带来的隐患
|