Frps 家庭服务器访问解决方案
100.64.0.0/10运营商级(Carrier-grade)NAT保留IP地址
在一次跟踪路由的网络操作时发现自己路由器下一跳路由节点的IP地址比较奇怪,是100.64.0.1
。好奇促使我查询了这个IP地址的归属,结果是保留地址,到这里觉得比较奇怪了,按照常理以IPv4为例保留的IP地址一般为以下几种,常用于内网通讯或者特殊用途:
地址块 | 起始 | 结束 | 备注 |
---|---|---|---|
10.0.0.0/8 | 10.0.0.0 | 10.255.255.255 | 局域网分配 |
172.16.0.0/12 | 172.16.0.0 | 172.31.255.255 | 局域网分配 |
192.0.0.0/24 | 192.168.0.0 | 192.168.255.255 | 局域网分配 |
169.254.0.0/16 | 169.254.0.0 | 169.254.255.255 | 两台主机对等连接,当Windows获取不到IP地址的时候会自动分配此类地址 |
127.0.0.0/8 | 127.0.0.0 | 127.255.255.255 | 回环(loopback)地址,表示本机 |
255.255.255.255/32 | 255.255.255.255 | 255.255.255.255 | 广播地址 |
这个100.64
开头的IP地址又是什么鬼?搜索维基百科的Reserved IP Address词条才发现原来教科书上介绍的只是部分保留地址,整个保留地址家族的成员还是比较多的,那么100.64
打头的IP地址对应地址块为100.64.0.0/10
,地址范围为100.64.0.0
~100.127.255.255
,共包含有4,194,304个IP地址,这个保留地址也是用于内网,但是这个内网不是一般内网而是Carrier-grade NAT,这个英文对应的翻译是“运营商级NAT”。进一步搜索得知2012年4月的 RFC 6598 (IANA-Reserved IPv4 Prefix for Shared Address Space) 将100.64.0.0/10
(Shared Address Space) 地址块,用于给运营商ISP使用:
NetRange: 100.64.0.0 - 100.127.255.255 CIDR: 100.64.0.0/10 OriginAS: NetName: SHARED-ADDRESS-SPACE-RFCTBD-IANA-RESERVED NetHandle: NET-100-64-0-0-1 Parent: NET-100-0-0-0-0 NetType: IANA Special Use
据此可以推断出电信的黑科技实际上是使用了一个类似路由的设备将我们的网络组织成一个局域网,再通过网址转换NAT技术来实现网络通信,可以这么理解吧,我们以前通过PPPoE拨号获取的是随机分配的公网IP地址,这个IP地址是完全可以被互联网上任何设备访问的无障碍地址,但是现在通过拨号获取的只是一个内网地址,也就是说我们自己的路由器或者电脑拨号连接到了电信运营商的“大路由器”上,再也没有公网IP地址了。
为什么电信要使用这种方式来管理用户上网?首先我们要知道IPv4地址已经告枯竭,2011年2月4日全球顶级IP地址分配机构IANA分配完了最后5个A级地址块,因此IANA宣告IPv4地址告罄。2011年4月15日,APNIC宣布其剩余的可自由分配的IPv4地址已全部分配完毕,亚太地区进入IPv4地址耗尽阶段。随后几个月,中国各大运营商从APNIC以会员资格申请到了最后的几个C,至此各运营商也陷入了IPv4地址耗尽的困境。由于IPv6技术进展缓慢,为了解决IPv4耗尽对电信企业日益增长的用户对于网络需求的影响,NAT444/NAT44的方案由此诞生。
NAT444/NAT44方案说白了就是将过去每个宽带用户独立分配公网IP的方式改为分配内网IP给每个用户,运营商再对接入的用户统一部署NAT设备,NAT的作用就是将用户网络连接发起的内网IP,以端口连接的形式翻译成公网IP,再对外网资源进行连接。这样做以后,可以实现多个用户共享一个IP地址,在技术实现原理上和我们家用的路由器一样,其中NAT444对应传统宽带用户,NAT44则对应3G或者4G移动上网终端。
这样做的好处显而易见,首先延缓了IPv4耗尽对电信业务带来的威胁并进一步为IPv6技术部署留足时间,其次是内网保护,所有接入互联网的主机都不再直接接入,而是出于电信NAT设备的保护之下,没有独立的公网IP,所有端对端的远控软件将会失效,比如以前的灰鸽子木马,由于主机丧失了公网IP,灰鸽子反弹的IP地址将是电信NAT设备所使用的公网IP,黑客无法以此定位到中了灰鸽子木马的具体主机,不过这不影响第三方端口转发的远控软件,比如TeamViewer,但是对传统远控软件杀伤力是巨大的。最后增强了隐私保护,对于远端的网站通过IP地址跟踪等形式采集用户数据,或者以后台记录IP的形式定位用户身份的行为将不再有效,因为这个IP地址可以同一时间段内被大量用户所使用,所以部分广告商可能需要修改广告跟踪代码的相关逻辑,这边顺带说一句并不意味着处于电信NAT保护的用户可以做违法的事情,比较电信公司不是傻瓜,电信级NAT设备会有日志记录系统,所以处于其下的网络设备的上网流量都是得到有效审计的。
这样做的坏处是什么呢?首先丧失了公网IP让极客们的生活失去了不少乐趣,比如原先通过花生壳动态域名解析服务可以定位到我们家的上网设备,然后可以在上面架设一些服务等,从最原始的网站服务(电信封锁了80端口)到远程私有云存储,甚至是个人VPN等等,现在都不能直接使用了,因为动态域名服务解析的IP地址是电信级NAT设备所使用的公网IP,同时也是若干电信用户所共享的IP地址,NAT并不会转发你的请求到特定的电信用户,所以这些服务都失效了,其实这对于安装远程网络监控的公司或者个人带来的麻烦最大,原来只要配置好动态域名解析就可以在任何地方使用网络进行监控查看,现在都不可以了。其次共用IP地址容易让部分网络服务提供商误杀合法用户,比如一位非法的资源滥用电信用户和你在共享同一个公网IP地址,非法的资源滥用者由于滥用某个网络服务商资源从而被加入黑名单,注意这里只有将你们所共享的公网IP地址加入了黑名单,所以导致你这个合法的用户也不能正常使用该网络服务商所提供的资源了。最后这样做的坏处还有影响到电驴等P2P软件的使用,因为处于内网下导致电驴等软件一直是LowID,影响传输速度。
如何解决此问题?要想重新获取公网IP,最后还是要联系电信运营商,不行只有进行投诉解决了。
后来发现这种现象普遍存在,甚至有电信运营商直接分配172或者10开头的内网IP地址,但这种分配方式容易与用户自己的路由器IP地址冲突,所以还是100.64开头这种好一些,毕竟新设立专用于ISP运营的保留地址,个人网络设备占用的可能性较低。
希望IPv6能够尽快全面推广开,从而解决现在尴尬的局面。
FRP穿透方案
偶然间遇到了FRP这个工具,感觉frp比ngrok更好用,直接用官网下载相应版本就好,而不用自己编译,特别方便。下面我将介绍如何通过frp,让局域网内的arm板对外网用户提供ssh服务。(居于网内主机如何向外网提供web服务之类的也是一样的道理)
(1)准备工作
有一个公网IP的服务器(VPS),根据服务器环境,和主机环境下载相应的frp服务器端和客户端。我这里服务器服务器环境是linux 64位,客户端环境是arm 端。所以到官网https://github.com/fatedier/frp/releases下载相应版本,如下图:
下载解压后有如下的七个文件:
(2)配置服务器端
服务器端只需要两个文件frps和frps.ini,其中frps为可执行文件,frps.ini为配置文件,是不是很方便?配置文件如下图(很简单):其中bind_addr为本机IP,bind_port为frp对客户端的端口号,auto_token是客户端连接服务器端的口令。
配置好后即可运行服务器端:./frps -c ./frps.ini
运行成功如上图,现在就可以配置客户端啦!
(3)配置客户端
同样将客户端解压后有七个文件,只需要frpc和frpc.ini,配置文件如下:
注意:server_addr是服务器端的公网IP地址,server_port是frp服务端口号,auto_token是连接服务器的口令,必须和服务器保持一致。[ssh_208]是客户端通过服务器与用户之间的通道名,每个客户端必须不一样,remote_port是服务器端对外提供本机服务的端口号,即用户连接60.12.220.16:10085,相当于连接127.0.0.1:22,即arm板上的ssh服务
运行客户端:./frpc -c ./frpc.ini
(4)测试
现在我们用外网主机来远程登陆到我们的arm板子,ssh 60.12.220.16 -p 10085
可以看到,完美成功!!
(5)补充后期遇到的问题!!!
注意:客户端的时钟不能和服务器端时钟相差太大!否则会出现认证超时的错误:authorization timeout
这个超时时间可以在配置文件中通过 authentication_timeout 这个参数来修改,单位为秒,默认值为 900,即 15 分钟。如果修改为 0,则 frps 将不对身份验证报文的时间戳进行超时校验。
使用命令:date 查看当前计算机时间
使用命令:date -s "YYYY-MM-DD HH-MM-SS" 设置时间
使用命令:hwclock -w 写入flash