内网穿透FRP工具使用


疫情吐槽

  自上海疫情开始已经整整一个月了,最开始学校通知居家办公大概是3月12号左右,当时还至少能出去逛逛吃个饭买点东西。记得有天下午我和学弟在学校附近吃了个晚饭,刚回到家就听说单元楼下被封起来了,说是单元里出了密接,我险些被封门外,然后连续做了几天核酸后解封了。好景不长,虽然上杨浦区算是相对比较安全的,而且我们小区之后也没有密接了,但是上海总体上是比较危险的,所以从4月1号开始要封城了,统统居家隔离。做了几次核酸和抗原自测后,我单元楼上莫名其妙的出了几个阳性,先是16楼,然后扩散到15、17、18,搞得人心惶惶,不过好在阳性的几个已经转移到方舱了,这几天小区里也没有出现新增。

  虽然我平常比较喜欢宅在家里,但是这一个月里我几乎没怎么出过房间门,坐久了确实感觉有些腰酸背痛,而且每天吃的都是小区里统一订购的盒饭,有好长一段时间食欲不振,甚至昨晚做梦梦见终于解封了,出去买吃的却告诉我材料不够没法做QAQ。当然比起其他小区甚至吃饭都成问题,我已经算得上幸运了,最近稍微习惯一些了,能勉强吃掉个8成了。另外的话自己还提前屯了些卤蛋香肠和面包,不过可惜的是面包还剩了4个,过期了,心疼。然后买了一箱水溶C100已经喝完了,只能自己烧自来水喝,中间有一次趁着下楼做核酸去售货机上买了几瓶水,没几天就喝完了,虽然加了几个团购群,但是小区里就我们单元出了6个阳性,所以也不太敢团购,还有个原因就是懒,反正日子勉强能过。

  最后讲下居家办公,还是比较有新鲜感的,至少能自己决定啥时候起床了,这点还是比较舒服的,另外在家里需要经常连接学校的VPN来访问内网,对于经常要使用实验室服务器的我来说还是不太方便的,以为学校的Easy Connect会改变全局的网络环境,导致本地一些应用程序无法访问网络。典型的就是我无法通过192.168.x.x来访问局域网中的其他设备,也就无法通过wifi来对手机进行ADB调试了,所以打算用内网穿透来解决这一问题。

内网穿透

  内网穿透的大概原理非常简单,大概的解释一下就是由于NAT技术存在,网关会为位于内网的机器分配一个内网特有的ip地址,有A类(10.0.0.0~10.255.255.255)、B类(172.16.0.0~172.31.255.255)、C类(192.168.0.0~192.168.255.255)的区别。对于实验室的服务器来说,它是一个位于校园网这个内网中的机器,它的ip可能是10.xxx.xxx.xxx,而对于我自家的台式机来说,则是位于家庭局域网中的一个机器,ip是192.168.x.x。不同内网中的NAT地址可能是相同的,比如我家和你家可能都有一个ip地址为192.168.1.1的设备,但是我去访问192.168.1.1这个地址时只能访问到我自家的设备,因为不同内网之间是相互隔离的。

  想要主动访问一个内网中的设备,据我所知有两种方法

  1. 需要知道目标机器的内网IP,并且自己的机器要与目标机器位于同一个内网中,这样直接通过内网IP访问即可
  2. 需要知道目标机器所在网关的公网IP,并且该网关为目标机器特别设置了端口映射,这样可以通过公网IP加端口的方式访问

  对于第一种方法,要么你在物理意义上位于内网中,比如通过连学校、公司的wifi,来使自己位于学校、公司的内网中。但是这样的话回到家里的话就没法进内网了,所以一般学校和公司会有自己的VPN工具,可以使用这个工具来远程进入内网。

  对于第二种方式,则需要我们拥有网关的控制权,然后为内网中的特定IP来设置对应的端口映射,显然我们无法获得学校或者公司网关的控制权。但是值得一提的是,我们能够轻松获得自己家里网关的控制权,也就是说我们有办法能够通过公网IP来访问自己家里的某一台机器。

  综上所述,我们想要远程连接实验室的服务器,就只能使用VPN了,是这样吗?然而并不是。上面讲的都是想要主动访问一个内网中的设备的情况,如果是反过来呢,如果内网中的设备主动建立联系了,不就没啥问题了吗,其实这就是内网穿透的思路,利用了外网不能访问内网,但是内网可以访问外网的特点,让内网主动与外网建立连接。

  据我所知内网穿透的工具大概分为两类:

  1. 开箱即用的商业内网穿透工具,如花生壳、ngrok等,他们由商家自己提供公网服务器,让内网的机器主动与服务器相连接后,由服务器暴露端口供外界访问。这些一般提供试用功能,在一定程度上已经足够满足需求了。
  2. 假如你的要求更高,比如需要自定义访问的域名等等,那么可以使用github上开源的FRP,来自定义的搭建一个内网穿透服务器,功能非常多,足够满足需求。

  接下来讲下如何使用FRP工具来自定义的搭建一个较为安全的内网穿透服务来访问学校的内网。具体如何使用FRP工具就不细说了,自己看文档吧。

网关配置端口映射

  首先讲下什么叫安全的内网穿透服务。内网与外网隔离的一个重要的目的就是要考虑安全性,一些重要的服务可能只对内网开放,盲目的让外界进入内网可能会造成严重的安全问题。FRP工具考虑到这个问题,所以在客户端和服务端连接时可以配置校验凭证,防止外部机器被冒充,导致内网机器连接上了被冒充的外部机器,造成内网泄露。此外如果一个shell被代理到了公网服务器上,那么任何人都能通过这个公网服务器暴露的端口来访问到内网的shell,这样也是不安全的。所以在使用FRP工具的时候最好要考虑到这两个问题。

  这边我使用的策略是让内网的机器直接与我家里的机器相连,而跳过公网服务器的代理,这样就无需对外暴露端口,而且内网的客户端连接的IP地址写死是我家里的IP,不担心被人冒名顶替。要实现这样的效果首先要进行网关端口映射的配置,使得外界能够通过公网IP来访问家中的机器。

  像家里的路由器之类的设备,一般输入192.168.1.1就能访问到后台管理页面了,里面就能配置端口映射,很简单就不详细写了。需要注意的是,两个位于同个局域网中的设备貌似不能通过公网IP加端口的方式来访问到,即使你做了端口映射也不行,所以测试端口映射是否生效的时候最好使用手机的流量来测试。

FRP服务端与客户端部署

  首先我们要知道的是,服务端是部署在自家的机器上,而客户端是部署在学校内网的机器上,因为客户端才是主动请求的一方。首先搭建服务端,配置文件也不需要怎么改,注意下端口就行了。然后想办法先进内网(连VPN也好其他方式也好,随便你),为内网的机器配置好客户端。注意这里的顺序别搞错,先服务端再客户端,这样等客户端成功连接上一次后,一旦服务端被关闭了,客户端也会定时重连,因为家中的电脑不可能24小时开着。以后每次重启的时候只需要开一下服务端,客户端就会自动的连接上来了。

尾声

  几周下来,这套方案已经大体经过时间的考验了,客户端那边没啥问题。不过最近发现自家的路由器有时候会自动重启,结果每次重启以后不仅自己机器的局域网IP变了,连网关的公网IP都变了,好像是运营商的DHCP的锅,导致需要去重新改下客户端那边的配置的IP地址。除此之外暂时没遇到其他问题。


文章作者: 大A
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 大A !
评论
  目录