一、写在最前面
如果在没有做好安全措施的情况下将内网服务器暴露在外网并不是一件聪明的事,这样会将自己的个人信息置于不安全的环境,特别是一些NAS,采用的系统被暴出有较多的漏洞,所以在做内网穿透前,一定要做好足够的安全评估。
二、什么叫内网穿透
循序递进,几点讲清楚:
- 在互联网主干道上,大家都是用的公网IP来标识自己。知道这个IP,就可以直接定位连接。
- IP有两种,IPV4、IPV6;只有IPV4会有内网穿透的情况
- 鉴于IPV4的数量,不可能让所有设备都在主干道上标识自己的且是不重复的唯一IP
- 所以就想了个办法,把一个区域内的所有设备连在一起并统一和主干道上其他区域设备联系,对外只共用一个公网IP来标识自己,对内则分配一些够用的私有地址。简称NAT
- 设备与设备之间的连接除了物理存在的端口外,还有软件层面的端口,要产生连接必须要有个端口给你把数据传进去。
- 所以NAT就干了这么一件事:私有IP+端口《–》公网IP+端口 从而实现某台内网机器的上网
- 而当自己所能操作的范围内没有公网ip,就不能实现自己想要的内网穿透。但实际上只要你能上网,对外而言你就一定有一个公网ip,只是你操作不到!比如小区局域网、城域局域网
- 而内网穿透,本质就是对公网IP或者端口做文章,从而实现自定义访问。
- 比如使用其他的公网IP:
- 需要一台自己拥有的能够操作的、具有公网IP的机子A(物理机、虚拟机都可以)
- 需要进行端口映射/转发,让本地局域网的机子和机子A建立联系,从而实现内网穿透
- nat123、花生壳、frp、只要是类似的,都是这种模式:使用其他能操作的公网ip进行转发
- 这种模式的好处在于访问端可以直接用域名或地址访问而不需要安装其他任何辅助客户端
10.知道端口后直接连:
- 一般情况下,NAT转换出去的端口是随机的,但你要知道,我们手机或电脑上玩的各种软件是可以和他们自己的服务器进行双向通信的。
- 原因就是,在他们通信的时候,相互获取了对方的公网IP+端口(有些app是固定的域名)
- 而不管是p2p连接,还是VPN,只要是类似的,就是这种模式
- 它必须在两端都安装使用辅助的客户端才行(可以理解为获取对方地址相互连接,甚至还可以加密提高安全性)
- 这种模式的难点在于建立起初始连接,有很多种方式,简称打洞、穿越。
- 缺点就是才说的:两端必须都需要安装使用辅助客户端来实现。
今天我们用到的主角就是FRP
三、什么是 FRP
FRP (Fast Reverse Proxy) 是一个可用于内网穿透的高性能的反向代理应用,支持 TCP , UDP , HTTP , HTTPS 协议。下载https://github.com/fatedier/frp/releases
四、准备条件
1.内网服务器,这里以一台威联通(QNAP)的NAS(网络附件存储器)为例,其它设备类似
2.一台公网服务器(阿里云,腾讯云均可,Linux系统)
3.域名(非必需,如果你不想记长长的IP地址的话,建议申请一个域名,国内域名商需要备案,国外的略过)
五、具体步骤
服务器配置
1.登陆服务器,下载FRP
直接列命令,不多解释,小白按着来就行
#从github上下载相应版本的frp wget https://github.com/fatedier/frp/releases/download/v0.31.2/frp_0.31.2_linux_amd64.tar.gz #解压 tar -zxvf frp_0.31.2_linux_amd64.tar.gz #修改文件名,进入文件夹,删除frpc相关内容 mv frp_0.31.2_linux_amd64 frp cd frp rm frpc* -f -r #配置frps.ini vim frps.ini #后台启动 nohup ./frps -c ./frps.ini &
2.配置说明
服务器配置均在frps.ini文件中,非常简单,只需填写与客户端进行通信的端口就行
[common]bind_port = 7000 #与客户端绑定的进行通信的端口
客户端配置
1.客户端的配置建议使用Docker部署,方便快捷,操作简单,现在一般的nas都支持docker,这里与威联通(QNAP)系统为例
进入ContainerStation->创建->搜索"frpc",可以看到在DockerHub中会有很多个结果,这都是大家制作好上传的,这里推荐使用
不为啥,因为我用了没有任何问题
具体配置如图
上图为基本配置,里面的CPU限制和内存限制根据上图设置即可,命令是待docker启动后自动运行的命令,注意后面的"/Public/frpc.ini"是客户端配置的文件地址,这里需要在高级设置中进行设置
1.设置docker的网络模式为Host模式,目的是让docker可以直接操作和使用宿主机的网络资源
2.为docker配置一个可访问的目录,目的让docker有权访问宿主机中的配置文件,这里使用的是宿主机的public文件夹,在文件夹下自行新建一个叫frpc.ini的文件用于配置客户端
3.客户端配置文件说明
server_addr:frp服务器的地址 servrer_port:服务器的端口 也就是上文件中的7000 [nasweb]表明这是一个新的名为nasweb的配置,frp支持多端口配置 type:传输层协议 local_ip:本地内网ip地址 local_port:本地服务的端口,就是nas上你要暴露出来的服务的端口,比如web就是80 remote_port:在互联网上要访问nas上的服务的时候要访问的端口,需要在公网服务器上开放相应的端口,具体请查看相关的官方文档
配置完成后点击启动,观察命令行,如果显示成功连接,则表示配置完成,如果出错,根据相关的信息进行排查
五、相关说明
1.其实大部分的nas系统上均有提供类似于内网穿透的服务,但一般情况下免费的速度低,收费的费用高,而且效果并不好,做为喜欢diy的人,肯定不会喜欢这种方式。
2.域名配置方面请自行网上搜索,这里不作说明
原文链接:https://blog.csdn.net/jayhuang44754019/article/details/119782565