通常情况下,内网 可以简单的理解为路由器创建的网络,连接到这个网络的电脑之间可以相互访问。
举个例子,假设我们的网络架构是这样的:
直接通过网线连接到小明的路由器上的电脑A、电脑B 、电脑C 之间互相访问没有问题,例如:
同理,连接到 李华的路由器上的几台电脑间相互访问也没有问题。
我们就可以认为小明的路由器下的几台电脑就位于同一个 内网 中,而李华的路由器下的几台电脑位于 另外一个内网 中。
当小明想和李华通信时,问题就出现了。因为 小明的路由器 和 李华的路由器 之间没有直接连接,也没有连接到同一个上级路由,它们并不知道如何连接到对方。
假如运营商给 小明的路由器 或 李华的路由器 分配了公网 IP,这个问题就迎刃而解。
举个例子,假如小明有一个公网 IP ,1.1.1.1,那么李华就可以发起对 1.1.1.1的连接:
由于 IPv4 地址的稀缺,国内三大运营商(电信、移动、联通)基本都不给家宽用户分配公网 IP,更不用说一些二线小运营商了。
这就导致上面的连接无法成功建立,因为李华的路由器想连接到 小明的路由器就必须告诉互联网对方的公网 IP,但是现在他们都没有分配到公网 IP。这时,二者想建立连接就需要使用内网穿透或 UDP 打洞等技术了。
简单的说,内网穿透就是使用一台有公网 IP 的电脑 (frp服务器,下文称为节点) 作为 “中间人” 来与没有公网 IP 的电脑建立连接并转发数据。
由于电脑D并没有直接连接到游戏服务器,而是由 frpc 代为连接,因此游戏服务器看到的 IP 实际上是 frpc 的 IP,也就是127.0.0.1。因此,如果小明想知道电脑D的真实 IP,还需要进行额外配置。
结合场景来理解内网穿透技术的适用范围。
先了解一下,内网有哪些限制?
1.IP不固定,一段时间会自动切换。
2.不能直接访问,只能在同一个网络中访问。
3.敏感端口被封,不能用。例如80 443端口。
4.网速不稳定,下载不满速,上载低速。
公网的优缺点:
1.贵,服务器贵,带宽贵,IP贵。
2.IP固定,端口全开放。
3.带宽稳定,BGP多线路融合,响应速度快。
另外还要补充:
域名的注册和解析
大陆地区的域名需要ICP备案
服务器80端口的HTTP协议,web需要
服务器443端口的HTTPS协议,需要SSL证书
现在结合场景来介绍内网穿透的适用范围:
场景1:开发人员本地调试接口
描述:程序员给项目添加服务,例如短信服务,支付服务,需要在本地写代码、调试和测试。
特点:本地调试、网速要求低、需要HTTP或者HTTPS协议。
需求:必须本地,必须HTTP[S]网址。
场景2:远程办公,在家访问公司内部系统和存储服务
描述:疫情原因需要在家工作,又需要访问公司内部的系统。
特点:远程访问、具体协议不固定、远程时间不固定,可长可短。
特殊:出差的时候,手机上看家里电脑上的资料和视频。
场景3:公网访问局域网的私人存储
描述:家有私人存储,映射到公网,随时随地可以存取文件。
特点:网址或者IP地址都行,需要稳定的通道和传输带宽。
场景4:搭建私人游戏服务器,和伙伴开黑
描述:用自己的电脑做服务器,和小伙伴玩魔兽争霸、我的世界
特定:带宽要求不高,响应速度要求高,只需要IP
既然内网主机不能直接访问,那就在公网弄个服务器。
因为内网主机可以访问公网主机,然后将内网主机和公网主机进行连接,并且保持连接。
如果公网主机接收到的请求,通过链接转发给内网主机即可。
将内网服务进行公网映射,服务通常从端口提供服务,例如:
ssh服务,端口好似22
web服务,端口是80和443
远程桌面服务,端口是3389,win专业版支持远程桌面
redis服务,端口是6379
驰网科技服务器租用端口是80 --艾西
我的世界Minecraft游戏服务端口是25565
CS:GO游戏服务端口是27015
方舟生存进化的游戏服务端口是27015、27016、77771
《使命召唤:先锋》平台 TCP UDP PC 3074, 27014-27050 3074-3079
如下图:
这个就是内网穿透的思路。
有了思路,怎么实现?实现的重点是主机连接并且保持长久连接。
实现的方法有几种,这里都来介绍一下:
基于TCP的Socket连接
基于SSH的反向代理
基于WebSocket连接
【当然除此之外,还有其他方法,有知道的可以在评论区补充。】
感兴趣的小伙伴看到这里啦喜欢的记得点赞加关注!
1. 基于TCP的Socket连接
Socket连接是计算机网络课程中的基础编程题,你们肯定都做过,《基于TCP的Socket连接做一个命令行版聊天室》
下图是Socket的通信模型
基于TCP的Socket连接,是一种可靠的连接形式,适合将两个主机的端口进行绑定并保持连接。
因为Socket需要客户端和服务端,所以Socket做内网穿透,需要客户端。
既然需要做客户端,通常各服务商的操作,是接入更多的处理,例如智能选择节点等,客户使用就更简单更智能。
优点:智能选择节点,操作完全可控
缺点:安装客户端,响应速度慢
2. 基于SSH的反向代理
SSH,全称Secure SHell,一个安全加密协议。
OpenSSH是遵循协议实现的一个免费开源工具,日常说的SSH,指的是这款软件。
几乎所有的Linux和Macos都自带这款软件,Win10和11都自带,Win7需要借助第三方终端。
SSH支持远程控制和代理,代理有正向代理、反向代理、socks5代理。
反向代理的操作,就是让远端启动端口,把远端端口数据转发到本地。
HostA 上启动一个 PortA 端口,通过 HostB 转发到 HostC:PortC上,在 HostA 上运行:
反向代理:
HostA$ ssh -R HostC:PortC:HostB:PortB user@HostC
使用SSH做内网穿透,好处是无客户端,基本上每个操作系统都内置了SSH。
优点:安全可靠,无客户端,响应速度快
缺点:单一节点
3. 基于WebSocket连接
WebSocket 协议诞生于 2008 年,在 2011 年成为国际标准,并且 WebSocket 同样是 HTML 5 规范的组成部分之一。
WebSocket 是一种全新的协议。它应用在了 web page 上,从而使通信双方建立起一个保持在活动状态连接通道,并且属于全双工(双方同时进行双向通信)。
WebSocket和Socket的工作模式差不多,不同点是WebSocket工作在Web网页上。
WebSocket和Socket一样,需要客户端配合服务端工作,所以用户需要配置双端,才可以使用。
内网转发的安全问题
有利肯定就有弊,将本地服务器暴露在公网,也有不好的地方。
第一个:公网主机端口被扫描
网络上到处都有爬虫机器人抓数据和扫描接口【抓肉鸡】。
内网主机由于无法访问,所以你开放端口是没啥安全问题的。
但是部署到公网后,就要注意安全问题。
解决方法:
记录端口访问日志并定时检查
端口伪装,例如22->34423, 3306->42887
端口定时更换,或动态端口号
第二个:DDoS攻击
这个是针对服务器来说的,并非某个端口。
何为DDoS?一般来说是指攻击者利用“肉鸡”对目标网站在较短的时间内发起大量请求,大规模消耗目标网站的主机资源,让它无法正常服务。
自由服务器需要考虑下,解决方法很多,如下:
高防服务器,重点提高服务器的流量防御能力。
黑名单,统一封锁大量或区域IP,可能会关闭了正常流量。
DDoS清洗,实时检查请求,发现奇怪请求直接关闭链接。
总结:按实际情况来决定最后的选择,有机房硬防火墙还是很安全,自己个人做内网穿透多多少少对业务会有一定的影响。一个东西他属于哪里就让他在哪里好好待在保证业务的正常运转,在这网时代有时候服务器不稳定几秒几分钟就会损失一些比较多的Money。
我是驰网艾西喜欢的记得点赞+关注 携手驰网一同探索
(有一台服务器可以做很多超酷的事情)