什么是内网穿透

内网穿透,也即 NAT 穿透,进行 NAT 穿透是为了使具有某一个特定源 IP 地址和源端口号的数据包不被 NAT 设备屏蔽而正确路由到内网主机。
通俗的讲,内网穿透其实就是两台计算机都处于不同的局域网之中,外网与内网的计算机节点需要连接通信,那么就需要借助内网穿透技术来解决这个问题,也叫NAT穿透。我们可能使用过的现有的软件,比如teamview,qq远程连接,都是基于内网穿透实现的。

使用场景

1.开发微信公众号,你可能跑了一个本地服务,还没有上线,但是需要调试,调试需要一个公网可以访问的域名。但是一般来说,外网访问不了你本地的服务。那么这个时候就可以通过一个公网服务器,通过端口转发,实现这个功能
2.周末在家,忽然接到通知,要跑一个服务器的脚本,或者改一段代码,脚本或者代码在公司的内网服务器,在家怎么访问呢?这个时候我们就可以用到ssh的隧道代理。

案例一: ngrok 其他参考

Ngrok 是一个反向代理软件,启动后会在公共服务器和本地客户端之间建立一个通道,并由公共服务器分配一个唯一的域名给这个通道。在 Homestead 中运行 Ngrok 之后,通过公共服务器分配的域名就可以在公网访问到 Homestead 中的站点,从而让支付宝和微信支付的服务器直接将回调数据发送到对应的回调接口。

  • 注册地址点击注册

  • 注册完毕 下载对应的文件

  • 我是在mac上使用的,直接下载一个压缩包,解压后里面就是执行文件
    1.解压

unzip /path/to/ngrok.zip

2.配置权限校验(authtoken 注册后会提供)

./ngrok authtoken xxxxxx

3.启动和查看帮助

# 查看帮助
./ngrok help
# 监听80端口
./ngrok http 80,-host-header表示你本地的域名,不用域名 直接访问端口也可以 ,-region us是指代理地址是美国 80代表80端口,除了协议和端口外,都是可以缺省的
# http 是连接协议,
ngrok http -host-header=shop.test -region us 80
  • 代理本地的80端口
./ngrok http 80ngrok by @inconshreveable                                                              (Ctrl+C to quit)Session Status                online
#账户名
Account                       xxxx@gmail.com (Plan: Free)
Version                       2.3.40
# 这个是代理地址的国家
Region                        United States (us)# 这个是web管理页面,可以查看访问信息
Web Interface                 http://127.0.0.1:4040
#这个就是代理地址,代理的是本地80端口
Forwarding                    http://14a4-222-129-1-243.ngrok.io -> http://localhost:80
Forwarding                    https://14a4-222-129-1-243.ngrok.io -> http://localhost:80Connections                   ttl     opn     rt1     rt5     p50     p900       0       0.00    0.00    0.00    0.00
  • 我们打开web地址看一下,就是4040端口

  • 这时我们请求一个地址 发现报错了,说我的80端口不能访问,因为80端口没启用

  • 终端console 的信息如下

  • 那我们用go 简单写一个可以使用的http 服务,20行代码。代码如下

package mainimport ("io""log""net/http"
)
/*** @Description: 写一个简单版本的web服务*/
func main()  {http.HandleFunc("/",Hello)//指定路由处理err:=http.ListenAndServe(":8889",nil)//建立端口监听服务if err !=nil{log.Fatal("ListenAndServe error:",err)}}
//接收请求 返回hello world
func Hello(w http.ResponseWriter,req * http.Request)  {io.WriteString(w,"技术小虫说:hello word\n")
}
  • 我们的程序监听的是8889端口,访问一下看看

  • 接下来我们把 ngrok 代理到8889端口

  • 可以正常相应8889

案例二:ssh内网穿透

  • 为了尽可能还原,我在我的电脑上创建一台ubuntu虚拟机,我的电脑(LocalA macos )和ubuntu(LocalB)虚拟机网络无法通信

  • 一台有独立ip 的服务器(RemoteC),我的电脑可以访问到,虚拟机也可以访问到

  • 先来看一个简单版的本地端口转发(LocalA 执行)

ssh -L 2222:localhost:22 root@122.22.22.122 //当本地2222端口被访问的时候,请求会被转发RemoteC的22端口,需要输入RemoteC的密码 guofu@guofu-Inspiron-3558 ~ $ ssh -p 2222 root@localhost
root@localhost's password: # 需要输入RemoteC的密码,因为是2222转发到了124的22
  • 再来看一个远程接口转发(LocalB执行)
ssh -R 8080:localhost:80 root@122.22.22.122  # RemoteC访问8080端口 会被转发到LocalB的80端口,这个其实就是 ngrok的实现方式
  • 在RomoteC 访问8080端口

  • 下面演示另一种情况,我通过RemoteC 访问 LocalB的22端口

1.在LocalB 执行

guofu@guofu:~$ ssh -fNTCR localhost:2222:localhost:22 root@122.22.22.122    #当RemoteC访问2222端口,就会被转发到LocalB的22端口,需要输入RemoteC的root 密码

2.然后我们登录RemoteC,访问2222端口看看能否被转发到LocalB的22端口,显示进入了ubuntu机器,其实是利用了RemoteC 做跳板机登录

[root@iZ2ze32d6gy2re63vx8froZ ~]# ssh -p 2222 guofu@localhost
guofu@localhost's password: #此处输入LocalB的guofu的密码
Welcome to Ubuntu 18.04.5 LTS (GNU/Linux 4.15.0-132-generic x86_64)* Documentation:  https://help.ubuntu.com* Management:     https://landscape.canonical.com* Support:        https://ubuntu.com/advantage

  • 或者我们直接在LocalA 访问 RemoteC的2222端口,也可以直接登录到LocalB的服务上去
ssh -p 2222 root@122.22.22.122

其他方案

其他的成熟的服务,比如frp,蜻蜓映射,natapp等,有兴趣的可以进一步了解

小结

本文只是简单的展示了内网穿透的实现方案,但是实际应用中,我们还要关注内网穿透带来的安全问题,和服务的持续连接问题,可以参考这篇文章

让你的工作更高效!快来看看如何使用内网穿透相关推荐

  1. NAT-DDNS内网穿透技术,快解析DDNS的优势

    进行 NAT 穿透,是为了使具有某一个特定源 IP 地址和源端口号的数据包不被 NAT 设备屏蔽而正确路由到内网主机.对于穿透类型,一般分为两大类,一是基础NAT,另一个是NAPT,大家可能并不怎么了 ...

  2. 快解析——好用的内网安全软件

    都听说过外网,毫无疑问,外网对于每个网络用户是十分重要的.但很多人都忽略了内网的安全,保证内网的安全也是十分重要的.平时我们的电脑中都会安装各种杀毒软件和防火墙保护电脑安全,同理,保证内网的安全也可以 ...

  3. 钉钉邮箱登录入口_清博舆情钉钉小程序上线 ,五大优势三大亮点助力工作更高效...

    清博大数据在多项赛事与微软.Google.阿里.百度等团队同台竞技并获得:第28届中国计算语言大会CCL2019中文幽默比赛冠军:互联网虚假新闻检测2019全球挑战赛多模态识别技术冠军:2020年&q ...

  4. 图解研发效能:让过程被看见,让工作更高效

    前面我的同事分别从需求协作.代码协同和应用发布三方面,和我们分享了如何通过云效完成日常的产品研发.当我们的工作活动都在云效上时,这便就有了度量的数据基础. 在很多文章中我们看到的是,效能洞察主要是帮助 ...

  5. 新一代三维GIS技术助力灭火救援工作更高效、更标准、更科学

    2009年,SuperMap发布了首款二三维一体化GIS软件,并首次提出了二三维一体化GIS技术.随后,二三维一体化的应用系统不断涌现,二三维一体化技术逐步成为三维GIS发展和研究的主流.2017年, ...

  6. 在校外如何安全访问校园内网资源?快解析内网穿透

    现如今很多高校选择利用信息化手段实施网络教学,通过在线直播课堂.网络点播教学.在线辅导答疑等形式丰富教学形式,使学生学习时间更为自由.便利.但很多时候以用校园内网为前提,在校外如何安全访问校园内网资源 ...

  7. 用快解析内网穿透实现零成本自建网站

    作为一个IT行业从业者,因为掌握编程技术,经常会受开公司的朋友之托做个网站,但是发现自己的网络竟然不是公网IP,是电信给的虚拟IP,也就是说就算做好了网站,也映射不出去,别人访问不到,怎么办?现在我们 ...

  8. 疫情反复,如何轻松居家办公?——快解析内网穿透

    自疫情以来,居家办公成为了很多企业维持公司运转的必须方式.对于大多数企业来说,云办公不仅是新概念,还是新尝试.如何突破网络限制,实现企业内部资源异地访问,进行远程协同办公,成为越来越多企业需要解决的难 ...

  9. 神卓互联内网穿透:打通内外网络,实现高效办公

    随着信息技术的不断发展,人们的工作和生活方式也在不断改变.在这个信息化时代,网络已经成为了人们生活和工作中不可或缺的一部分.然而,在实际的工作中,经常会遇到内外网络互通困难的问题,影响着工作的高效性和 ...

最新文章

  1. windows server 2008下搭建DHCP服务器
  2. MATLAB实战系列(三)- 如何将MATLAB直接转成C/C++代码
  3. 负数显示红字html语言,需要将单元格内的负数显示为红色且不带负号显示两位小数的格式代码是下面哪一种A、 0.00;[红色...
  4. java关联查询实战_MapReduce实战(五)实现关联查询
  5. java实现 SSL双向认证
  6. 真机测试报错ERROR/AndroidRuntime: java.lang.RuntimeException: setParameters failed解决办法
  7. Asp.Net 中Report Service (RDLC)动态绑定数据-学习笔记
  8. apply()与call()的区别
  9. testng查看覆盖率_使用Cobertura统计单元测试覆盖率
  10. cocos2d-x新手学习之Helloworld(第三篇)[版本号:cocos2d-x-3.1.1]
  11. Android 之注册Facebook开发者账号
  12. 洞察问题本质的思维,你知道吗?
  13. 【转】七种常见阈值分割代码(Otsu、最大熵、迭代法、自适应阀值、手动、迭代法、基本全局阈值法)...
  14. emule中节点加入Kad网络过程(源代码详解)【对原文部分改进】
  15. HBase的VERSIONS的意思
  16. 【Flink】迟到数据的处理
  17. all elements are null问题
  18. 终极思考!我们人类是宇宙中唯一的高级智能吗? | 2018新年快乐
  19. 宗海图cad_基于多软件的ArcGIS宗海图制图技术研究_李胜
  20. x210开发板linux嵌入式,X210开发板刷机方法

热门文章

  1. 宁德时代与戴姆勒卡车股份公司扩大全球合作伙伴关系
  2. 亚航app航班价格抓取
  3. CSS系列之浏览器私有前缀
  4. 守望先锋地图工坊分享合集
  5. 百度地图 ( 一 ) 显示地图
  6. 2021年TWS耳机有哪些推荐?TWS耳机排名!
  7. 开源WebGIS开发——如何创建一张地图
  8. java的包资源管理器怎么弄出来_eclipse包资源管理器java项目,包,类重命名 来学习吧...
  9. ​互链半年报 | 区块链平台应用落地哪家强?阿里系第一,迅雷、平安紧随
  10. 朋友就像人民币 ,有真有假