内网穿透技术,简单理解就是将内网的服务映射到公网中,这样可以随时随地访问。

那什么是内网?什么是公网?先从这个基本概念来简单介绍吧

1. 公网、内网和外网

首先声明,公网、内网和外网这几个概念,不是专业名词,而是根据网络情况,给不同的网络定义个名称,是约定俗成的概念。

内网:也叫做局域网,通常指单一的网络环境。例如你家里的路由器网络、公司网络。网络大小不定,内网中的主机可以相互访问,一旦越出这个局域网访问,就无法访问该网络中的主机。

公网:就是我们可以冲浪【多多少少暴露一点年龄】的互联网,例如QQ、微信、爱奇艺,都是在公网的IP上,只要手机电脑有网络,都可以直接访问。

外网:指国外的网络,例如Github、YouTube,通常是无法访问的,个别能访问的,也是响应速度慢,网络带宽极低。

请大家做个遵纪守法好青年,这里撇开外网不谈,这里单独聊聊内网和公网。

一个路由器打开wifi功能,就是一个局域网,手机电脑就能链接。

路由器上接入网线,连接到公网,手机电脑就能访问公网。

那路由器是不是公网地址?网线直接接电脑上,那电脑是不是公网地址?

答案:路由器不是公网地址,运营商网线的那头,也是运营商的局域网,不是直接的公网地址。

区分公网和内网的唯一区别,是IP地址。

因为IPv4的物理限制,IP数量不够分,所以运营商通常是给某市某区的某一片区域划分一个IP

虽然IPv6出来了这么多年,奈何展开慢,不然谁愁IP呀。

你现在可以去访问百度,搜索IP,会显示你的IP:xxx.xxx.xxx.xx 某某省某某市某某区 xx运营商

一个公网IP划分成很多个局域网,这技术叫做NAT(网络地址转换)。

因为公网IP因为少,所以很宝贵。

因为家庭用的是内网地址,并且运营商封了很多端口,并且下载不满速上载低速,所以家用带宽年费用很低。

相反,公司带宽啥都有,但是需要各种备案,并且费用那是真的贵。

2. 为什么要内网穿透

抛开场景谈需求都是扯犊子,结合场景来理解内网穿透技术的适用范围。

先了解一下,内网有哪些限制?

  1. IP不固定,一段时间会自动切换。

  2. 不能直接访问,只能在同一个网络中访问。

  3. 敏感端口被封,不能用。例如80 443端口。

  4. 网速不稳定,下载不满速,上载低速。

再说一下,公网的优缺点:

  1. 贵,服务器贵,带宽贵,IP贵。

  2. IP固定,端口全开放。

  3. 带宽稳定,BGP多线路融合,响应速度快。

另外还要补充:

  1. 域名的注册和解析

  2. 大陆地区的域名需要ICP备案

  3. 服务器80端口的HTTP协议,web需要

  4. 服务器443端口的HTTPS协议,需要SSL证书

现在结合场景来介绍内网穿透的适用范围:

场景1:开发人员本地调试接口

描述:程序员给项目添加服务,例如短信服务,支付服务,需要在本地写代码、调试和测试。

特点:本地调试、网速要求低、需要HTTP或者HTTPS协议。

需求:必须本地,必须HTTP[S]网址。

场景2:远程办公,在家访问公司内部系统和存储服务

描述:疫情原因需要在家工作,又需要访问公司内部的系统。

特点:远程访问、具体协议不固定、远程时间不固定,可长可短。

特殊:出差的时候,手机上看家里电脑上的资料和视频。

场景3:公网访问局域网的私人存储

描述:家有私人存储,映射到公网,随时随地可以存取文件。

特点:网址或者IP地址都行,需要稳定的通道和传输带宽。

场景4:搭建私人游戏服务器,和伙伴开黑

描述:用自己的电脑做服务器,和小伙伴玩魔兽争霸、我的世界

特定:带宽要求不高,响应速度要求高,只需要IP

想起以前大学玩到宿舍熄灯后偷偷接电玩游戏的时光,想想就激动

3. 内网穿透原理和常用方法

既然内网主机不能直接访问,那就在公网弄个服务器。

因为内网主机可以访问公网主机,然后将内网主机和公网主机进行连接,并且保持连接。

如果公网主机接收到的请求,通过链接转发给内网主机即可。

将内网服务进行公网映射,服务通常从端口提供服务,例如:

  • ssh服务,端口好似22

  • web服务,端口是80和443

  • 远程桌面服务,端口是3389,win专业版支持远程桌面

  • redis服务,端口是6379

  • jellyfin视频站,端口是8096

  • 我的世界 游戏服务,端口是25565

如下图:

这个就是内网穿透的思路。

有了思路,怎么实现?实现的重点是主机连接并且保持长久连接。

实现的方法有几种,这里都来介绍一下:

  1. 基于TCP的Socket连接

  2. 基于SSH的反向代理

  3. 基于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一样,需要客户端配合服务端工作,所以用户需要配置双端,才可以使用。

我当初做内网云也想到了这个,可惜实践的太少,又不想做客户端,所以放弃了.....

4. 内网转发的安全问题

有利肯定就有弊,将本地服务器暴露在公网,也有不好的地方。

第一个:公网主机端口被扫描

网络上到处都有爬虫机器人抓数据和扫描接口【抓肉鸡】。

内网主机由于无法访问,所以你开放端口是没啥安全问题的。

但是部署到公网后,就要注意安全问题。

解决方法:

  • 记录端口访问日志并定时检查

  • 端口伪装,例如22->34423, 3306->42887

  • 端口定时更换,或动态端口号

第二个:DDoS攻击

这个是针对服务器来说的,并非某个端口。

何为DDoS?一般来说是指攻击者利用“肉鸡”对目标网站在较短的时间内发起大量请求,大规模消耗目标网站的主机资源,让它无法正常服务。

自由服务器需要考虑下,解决方法很多,如下:

  • 高防服务器,重点提高服务器的流量防御能力。

  • 黑名单,统一封锁大量或区域IP,可能会关闭了正常流量。

  • DDoS清洗,实时检查请求,发现奇怪请求直接关闭链接。


学习知识点的,到此就可以止步了,下面是内网穿透服务介绍,需要请求继续观看,有给大家准备福利


5. 简单易用的内网穿透服务推荐

服务:内网云——基于SSH安全协议的内网穿透服务

官网:内网云SSH

体验隧道:ssh -R 80:127.0.0.1:8000 sh@sh3.neiwangyun.net

体验隧道直接用,无密码无客户端,官网都不用去

命令解析:

  • ssh:ssh远程命令

  • -R:逆向绑定远程端口

  • 80:固定端口

  • 127.0.0.1:固定的本机网络

  • 8000:你需要转发的网络端口,自行更改

  • sh:默认匿名账号,不需要密码验证

  • http://sh3.neiwangyun.net:内网云服务器节点的地址,固定值

隧道持久化:

  1. screen + autossh

  2. supervisor + autossh

福利:隧道兑换码 NEW-USER-ONE-PIECE



内网穿透原理和实现思路介绍相关推荐

  1. ngrok内网穿透原理分析和实现

    转载: ngrok内网穿透原理分析和实现 在互联网终端急剧增长的今天,公网ip已经成为稀缺资源,对于国内垄断的电信运营商来讲,更是不可能随便免费给你一个公网ip,许多家庭宽带都无法分配到 公网ip,又 ...

  2. frp内网穿透原理及配置应用

    1 Frp介绍 frp 是一个专注于内网穿透的高性能的反向代理应用,支持 TCP.UDP.HTTP.HTTPS 等多种协议.可以将内网服务以安全.便捷的方式通过具有公网 IP 节点的中转暴露到公网. ...

  3. 内网穿透原理,以及用花生壳实现内网穿透

    在做自学项目部署nginx的时候,nginx部署在阿里云服务器上,项目在本地,阿里云的nginx无法访问到本地的ip,所以需要做一下内网穿透.记录一下 什么是内网穿透? 内网和外网的概念: 内网:即所 ...

  4. 大白话告诉你内网穿透原理和验证

    内网穿透到底干啥的这里不做详述,这篇文章主要是讲这玩意怎么做的 分析 网上有很多原理图,但是说实话鄙人天资愚钝没咋看懂,在网上疯狂百度和个人的验证之后,得出如下简图 其实很简单 想让我们内网的服务能被 ...

  5. 内网穿透实现原理及三种实现方式

    1.操作系统 Deepin - 基于Linux的开源国产操作系统(软件生态好,缺点不够流畅) 官网 Ubuntu | 全球领先的用于个人电脑.平板及手机的操作系统 我使用的版本 Ubuntu乌班图-桌 ...

  6. 树莓派mjpg-streamer+内网穿透

    树莓派mjpg-streamer+内网穿透 一.背景 二.你需要的材料 三.视频传送 四.内网穿透 五.应用及效果 一.背景 我相信很多小伙伴和我一样,对物联网很感兴趣,就算你的专业.工作不是物联网方 ...

  7. 推荐两款好用的企业级内网穿透软件

    内网穿透技术:说到内网穿透,相信很多人肯定一知半解,到底什么是内网穿透呢!什么情况下需要内网穿透呢!接下来给大家简单的述说一下原理,内网穿透,也即 NAT 穿透,进行 NAT 穿透是为了使具有某一个特 ...

  8. 内网穿透技术有哪些(经验分享)

    内网穿透技术:说到内网穿透,相信很多人肯定一知半解,到底什么是内网穿透呢!什么情况下需要内网穿透呢!接下来给大家简单的述说一下原理,内网穿透,也即 NAT 穿透,进行 NAT 穿透是为了使具有某一个特 ...

  9. 【Java】Socket网络编程实现内网穿透、端口映射转发、内网穿透上网工具的编写,设置IP白名单防火墙

    这里写目录标题 简介 更新 一.背景 1.1 情景假设 1.2 想要达到的目的 1.3 局限 1.3 解决方案一(路由器NAT) 1.4 解决方案二(云服务器转发) 二.方案介绍 2.1 方案简介 2 ...

最新文章

  1. Java反射机制demo(四)—获取一个类的父类和实现的接口
  2. Android中的进程
  3. 2014 Super Training #7 F Power of Fibonacci --数学+逆元+快速幂
  4. VTK:可视化之RandomProbe
  5. springboot工具类
  6. [COCI2017-2018#5] Pictionary(并查集+dfs)
  7. ubuntu下解压缩zip,tar,tar.gz和tar.bz2文件
  8. Linux各发行版本简介
  9. todo项目开发_Facebook的TODO项目,巴西的Coursera,Drupal等
  10. float取小数点后几位_python Integer整型与Float浮点型操作
  11. mingw gcc mysql_Windows平台mingw编译器 mysql
  12. 基础物理-物质的组成
  13. JS数组ES3-ES6常用方法
  14. office宏病毒反弹shell实验
  15. Deepgreen/Greenplum 删除节点步骤
  16. 转 localStorage
  17. 外媒:三星确认Galaxy S10 5G版4月5日开始销售
  18. Airbnb、小猪短租等这类短租类产品发展前景如何?
  19. 采集存储板第218篇:基于5VFX70T的3U VPX 光纤数据采集存储板
  20. 本地HTML访问REST服务的实现

热门文章

  1. android 调取数字键盘,如何在android中的EditText上显示数字键盘?
  2. python下载手机app视频教程_Python实例教学app
  3. chrome主页被劫持,每天开机第一次启动,Chrome都会打开2345、360、hao123等网页
  4. linux创建用户使用密钥对登录
  5. phpstudy环境下连接mysql数据库
  6. 平价好用蓝牙耳机推荐,四款音质出众的蓝牙耳机
  7. C++装饰器模式的实现
  8. 《软件工程之美》打卡第五周
  9. 【C#】Hashtable哈希表及其与Dictionary字典的区别
  10. flutter获取Android照片,Flutter调用Android相机拍照及选取本地相册并渲染