前言
目录
首先我们对内网和外网这两个名词做个解释:
1、内网:是内部建立的局域网络或办公网络,常见是接入路由器-接入光猫、局域网内IP地址范围共分三类:
C类:192.168.0.0-192.168.255.255
B类:172.16.0.0-172.31.255.255
A类:10.0.0.0-10.255.255.255
2、公网:又称外网是通过一个网关或网桥与其他网络系统连接,地址相对是固定的。
内网穿透,也即 NAT 穿透,进行 NAT 穿透是为了使具有某一个特定源 IP 地址和源端口号的数据包不被 NAT 设备屏蔽而正确路由到内网主机。下面就相互通信的主机在网络中与 NAT 设备。
内网是指局域网中的一些设备所在的网络,只有在这个内网中的设备之间才能直接通信,而外部网络无法直接访问内网中的应用或者设备。
但是在某些情况下,我们可能需要让外部网络用户访问内网中的应用或设备,这个时候就需要用到内网穿透技术。所以内网穿透就是用来解决外网访问内网的。
常见场景使用:企业远程办公、数据远程同步、远程监控、远程联机游戏、文件远程共享,内网穿透作为程序员常用的调试手段之一,让他人访问我们本地启动的服务,而且这种访问可以不受局域网的限制,
你是否有好奇过它神奇的作用?明明没有将服务部署到服务器,
程序员们究竟是怎么通过这种特殊方式让所有人访问自己的主机的?介绍内网穿透的原理。
内网穿透有哪些?
常见的内网穿透有花生壳、巴比达、NAT123、快解析,同样是内网穿透其实还是有区别的;例如:花生壳 设计语言 为 C语言 底层采用 PHTunnel 通信协议,运行速度快、巴比达 设计语言 为 C语言 底层采用自研 WanGooe Tunnel 通信协议和花生壳一样都支持TCP、HTTP、HTTPS协议,端到端的TLS加密通信,黑白名单防黑验证功能等。
NAT123官网未获取到相关介绍信息,看样子很久没有更新了,捣鼓半天没搞明白,快解析官网未介绍相关设计语言以及采用的技术,同样支持TCP、HTTP、HTTPS协议,快解析是金万维分离出来品牌产品,好像是2022年左右成立的吧!记不清了,看官网信息,金万维是DDNS 动态域名解析服务商,2016年公司用的就是动态域名解析,后来公司搬迁没有公网IP了,就没用了。
还有一些其他内网穿透 例如:ngrok 是一款国外的工具,该工具采用go语言进行开发,支持TCP、HTTP、TLS(企业用户,需要付费)。该工具主要用于解决外网的客户端无法访问内网资源的问题,因为其具有使用简单、连接迅速,具备良好的跨平台特性等特点,只需要在官网下载对应的客户端进行安装即可,该工具将之前的一款旧版本进行了免费开源,各大开源平台均有它的身影,据说后来被一些大神又重新封装了一遍,就有了后来的FRP,总体来说FRP是ngrok一种延伸。
感觉只是换一个名称和使用方法而已,同时也继承该工具的优点、和缺点,但是这个缺点有点致命,不管是先前ngrok还是后来的FRP都有一个共同点,内存溢出,后来在网上看到一些大神解决方法,按照此方法确实有所改善始终未能全部根除,时不时还会出现,另一个缺点就是幽灵断网,内网项目正常、服务端也正常,网络也正常,用的好好的突然失联断网,找不到原因不去管他过一段时间(不确定)自己网络又通了,在网上问了一些网友,他们表示也遇到这些情况,网上暂时未找到解决方法,希望大神有时间,将这个半吊子开源工具的2个问题能够修复,据说ngrok付费的版本是没有这些问题。不知道是不是老外(欲擒故纵,故意为之)。
由于时间有限其他内网穿透等有时间再介绍,如果其他内网穿透是使用Go语言的话,那基本就是和上述介绍的情况差不多了,基本都是使用ngrok又么就是frp,还有一些其他语言开发的,总体来说,开发内网穿透是、耗时耗力、劳心劳力、高投入、低回报的一件事。
FRP 配置及使用
下载frp软件。
1.下载 FRP(推荐)
服务端和客户端使用的都是同一份文件,只是配置文件和启动文件不同。因此只需要下载一份文件,并按类型分成两份。
服务器上输入uname -m是 x86_64 架构,因此下载 linux_amd64 版本
通过命令行下载并解压:
wget -c https://github.com/fatedier/frp/releases/download/v0.53.2/frp_0.53.2_linux_amd64.tar.gz
tar -xvf frp_0.53.2_linux_amd64.tar.gz
mv frp_0.53.2_linux_amd64 frp
查看目录:
.
├── frpc
├── frpc.toml
├── frps
├── frps.toml
└── LICENSE
这些文件分成两部分。
客户端,也即内网的服务器,需要 frpc 和 frpc.toml
服务端,也即公网的服务器,需要 frps 和 frps.toml
剩下的是LICENSE,可以不用管
将两类文件分别打包
mkdir client server
mv frpc* client
mv frps* server
2. 服务端配置
将 server 目录上传到公网服务器任意路径。如果需要自动启动,看下一节。如下编辑 frps.toml,参数见注释。
这里有几个参数需要根据需要手动修改:
bindPort:frp 服务端监听的端口,也即服务入口,建议修改
auth.token:授权码,这个授权码之后在客户端还会用到
webServer.port:监控流量页面的端口,建议修改
webServer.user:监控流量页面的用户名
webServer.password:监控流量页面的密码
log.to:日志文件路径,根据需要修改
其中认证token可以用 pwgen 命令来生成,这个授权码之后在客户端还会用到。
sudo apt install pwgen -y
pwgen -s 32 1
3.运行服务:
./frps -c frps.toml
记得防火墙打开云服务器的7500端口和其他所有提到的端口,这些端口可以用’,'分割,在一个规则中同时打开。然后网页输入公网IP:7500,输入设置的Dashboard账户和密码,登录后即可看到 frp 的状态。