当前位置: 首页 > news >正文

‌内网穿透技术‌总结

内网穿透是一种网络技术,通过它可以使外部网络用户访问内部网络中的设备和服务。一般情况下,内网是无法直接访问的,因为它位于一个封闭的局域网中,无法从外部访问。而通过内网穿透,可以将内部网络中的设备和服务暴露在外部网络上,从而实现远程访问和管理。本文将详细介绍几种常见的内网穿透方式。

内网穿透和NAT

为了理解内网穿透,首先需要了解一些相关概念。

在这里插入图片描述

路由器默认情况下是使用 NAT(Network Address Translation,网络地址转换)来实现内网访问外网的。当内网中的设备(如电脑、手机等)需要访问外部网络时,路由器会将内网设备的私有 IP 地址转换为路由器的公网 IP 地址,并分配一个不同的端口号,同时记录下转换关系。例如,当内网中的一台电脑(私有 IP 地址为 192.168.1.3:56789)向外部服务器发送请求时,路由器会把源 IP 地址和端口 转换为路由器的公网 IP 地址(187.25.x.x:12345),外部服务器看到的请求源 IP 就是 187.25.x.x。当外部网络有数据返回时,路由器根据之前记录的转换关系,将目标 IP 地址从公网 IP 转换回对应的内网设备的私有 IP 地址,从而实现通信。

通过 NAT,多个内网设备可以共享一个公网 IP 地址与外部网络进行通信,有效地解决了 IPv4 地址资源不足的问题。但是同时,外部网络看到的是路由器的公网 IP 和特定的端口号,而不知道具体是哪个内网设备在进行通信,也就不能直接访问内网设备。对于外部网络发起的访问请求,路由器通常也会根据特定的规则(如:访问控制列表ACL)进行过滤和转发,以保护内网设备的安全。当内网中的设备需要对外提供服务(如搭建服务器)或者需要与外部特定设备进行通信时,由于 NAT 的存在,外部设备无法直接找到内网设备。这就产生了对内网穿透技术的需求。内网穿透技术的目的就是打破 NAT 的限制,实现外部网络与内网设备的直接通信。

应用场景

内网穿透技术在多种场景中得到广泛应用。例如,当用户需要随时随地远程访问家中的电脑、NAS(网络附加存储)设备或监控摄像头;或者在公司内部,需要从外网安全地访问公司内部的服务器、办公系统等。

  • 远程办公:员工可以通过内网穿透技术访问公司内部的办公系统、文件服务器等资源,实现远程办公。
  • 智能家居:智能家居设备通常处于家庭内网中,通过内网穿透技术,用户可以在外部网络中远程控制这些设备。
  • 游戏联机:玩家可以通过内网穿透技术建立游戏服务器,与其他玩家进行联机游戏。
  • 视频监控:将内网中的监控摄像头的视频流通过内网穿透技术传输到外部网络,实现远程监控。
  • 开发调试:开发人员可以通过内网穿透技术将本地开发环境中的服务器暴露到公网,方便进行测试和调试。

常见实现方式

内网穿透主要通过以下几种方式实现:

反向代理

反向代理位于互联网和网络服务器之间,他拦截来自客户端的请求,并代表客户端与网络服务器进行通信。如常见的如Nginx。

通过在具有公网 IP 的服务器上搭建反向代理服务,将外部网络的请求转发到内网服务器上。反向代理服务器充当了中间人的角色,隐藏了内网服务器的真实结构,同时也可以实现负载均衡和安全防护等功能。

端口映射

在路由器或防火墙上设置端口映射,将内网设备的特定端口映射到公网 IP 地址的某个端口上,使得外部设备可以通过公网 IP 和映射后的端口访问内网设备。

一般来说,三大运营商的家用带宽都是动态的公网ip,每隔一两天会变化一次,所以要通过DDNS来实施修改保定的ip,推荐DDNS-go:案例:
1,路由器配置DDNS,实现域名和动态IP地址绑定
2,路由器配置端口映射,实现局域网内请求转发
在这里插入图片描述

VPN(虚拟专用网络)

通过建立虚拟隧道,将不同内网中的设备连接到同一个虚拟网络中,实现内网之间的通信。

同时,利用 VPN 技术可以建立一条安全的隧道,将内部网络与外部网络连接起来。外部用户通过连接到 VPN 服务器,就仿佛处于内部网络中,能够访问内部网络的资源。VPN 不仅提供了远程访问的功能,还能保证数据传输的安全性,通常用于企业内部的远程办公等场景。

P2P(点对点)技术

利用 P2P 网络的特性,让内网中的设备直接与外部设备建立连接,无需经过中间服务器。这种方式适用于一些对实时性要求较高的应用,如在线游戏、视频会议等。

(1)UDP 打洞技术:常见的实现 P2P 的方式之一。UDP 打洞技术通过中间服务器的协助,在各自的 NAT 网关上建立相关表项,使 P2P 连接的双方发送的报文能够直接穿透对方的 NAT 网关,从而实现双方直接互连。具体过程为:客户端 A 向集中服务器发送请求,以建立与客户端 B 的 UDP 连接;集中服务器将 B 的外网和内网地址二元组发给 A,同时也将 A 的相关信息发给 B;A 和 B 收到对方信息后,开始向对方的外网和内网地址二元组发送 UDP 数据包,并自动锁定第一个给出响应的地址二元组,从而打开“洞”,实现直接通信。但需注意,UDP 转换协议提供的“洞”并非绝对可靠,NAT 设备内部的 UDP 转换空闲状态计时器可能会关闭一段时间内没有数据通信的“洞”。为避免此问题,可在穿越 NAT 后设定一个穿越有效期。

(2)TCP 打洞技术:基于 TCP 的 P2P 应用相对较少,但在某些情况下也有打洞需求。TCP 连接的建立依赖三次握手交互,NAT 网关处理 TCP 连接时开销较大。不过,TCP 协议完备的状态机机制使其能更精确地获取某个 session 的生命期。一种新的代理类型 xtcp 可用于解决此问题,例如采用搭建 frp 服务器的方式,在传输数据的两端部署 frp 客户端以建立直接连接

注意事项

  • 安全性问题:内网穿透可能会带来一定的安全风险,如外部攻击、数据泄露等。因此,在使用内网穿透技术时,需要采取相应的安全措施,如加密通信、访问控制等。
  • 网络稳定性:内网穿透的效果可能受到网络环境的影响,如网络延迟、带宽限制等。在选择内网穿透方式时,需要考虑网络稳定性因素。
  • 法律法规:在使用内网穿透技术时,需要遵守相关的法律法规,不得用于非法目的。

内网穿透技术是一种非常实用的网络技术,可以帮助用户在不同内网环境中实现设备之间的通信。在使用内网穿透技术时,需要根据实际需求选择合适的方式,并注意安全和合法性问题。

相关文章:

‌内网穿透技术‌总结

内网穿透是一种网络技术,通过它可以使外部网络用户访问内部网络中的设备和服务。一般情况下,内网是无法直接访问的,因为它位于一个封闭的局域网中,无法从外部访问。而通过内网穿透,可以将内部网络中的设备和服务暴露在…...

Git使用—把当前仓库的一个分支push到另一个仓库的指定分支、基于当前仓库创建另一个仓库的分支并推送到对应仓库(mit6828)

把学习过程中遇到的Git问题汇总如下(后续学习遇到问题会及时更新此专栏): Git原理及常用命令小结——实用版(ing......)、Git设置用户名邮箱-CSDN博客 解决git每次push代码到github都需要输入用户名以及密码-CSDN博客…...

windows11+ubuntu20.04.6双系统安装

记录win11和ubuntu20.04.6在单个硬盘上安装的主要流程 系统说明 BIOS模式: UEFI 硬盘: 1TB固态 内存: 32GB 步骤 1、 准备两个不小于16GB的U盘,一个用于装Windows,一个用于装ubuntu,注意8G的U盘虽然能够…...

如何通过 PhantomJS 模拟用户行为抓取动态网页内容

引言 随着网页技术的不断进步,JavaScript 动态加载内容已成为网站设计的新常态,这对传统的静态网页抓取方法提出了挑战。为了应对这一挑战,PhantomJS 作为一个无头浏览器,能够模拟用户行为并执行 JavaScript,成为了获…...

ARM驱动学习之8 动态申请字符类设备号

ARM驱动学习之8 动态申请字符类设备号 KernelCode: • 字符设备函数在文件“include/linux/fs.h”中 • alloc_chrdev_region() 是动态分配主次设备号。 • 宏定义MAJOR提取dev_t数据中的主设备号源码: /*** alloc_chrdev_region() - register a range of char dev…...

TCP.IP四层模型

一、TCP/IP模型协议分层 1、应用层: 2、传输层: TCP:传输控制协议 UDP:用户数据报协议 3、网络层: IP: 国际协议(IP地址) ICMP: 互联网控制消息协议(互联网…...

极狐GitLab DevSecOps 功能合集(七大安全功能)

极狐GitLab 是 GitLab 在中国的发行版,专门面向中国程序员和企业提供企业级一体化 DevOps 平台,用来帮助用户实现需求管理、源代码托管、CI/CD、安全合规,而且所有的操作都是在一个平台上进行,省事省心省钱。可以一键安装极狐GitL…...

进阶SpringBoot之异步任务、邮件任务和定时执行任务

SpringBooot 创建 Web 项目 异步任务: service 包下创建 AsyncService 类 Async 异步方法 Thread.sleep(3000) 停止三秒,捕获异常 package com.demo.task.service;import org.springframework.scheduling.annotation.Async; import org.springfram…...

【设计模式-桥接】

定义 桥接模式(Bridge Pattern)是一种结构型设计模式,它通过将抽象部分与实现部分分离,使它们都可以独立地变化。桥接模式的关键在于将类的抽象部分与其实现部分解耦,以便两者可以独立地变化。这种设计模式的一个主要…...

JVM JMM 专题篇 ( 12000 字详解 )

一:JVM 简介 JVM 是 Java Virtual Machine 的简称,意为 Java 虚拟机,虚拟机是指通过软件模拟的具有完整硬件功能的、运行在一个完全隔离的环境中的完整计算机系统。 常见的虚拟机:JVM、VMwave、Virtual Box,JVM 和其…...

【C++】—— list 模拟实现

【C】—— list 模拟实现 1 list 基础结构2 默认构造3 迭代器3.1 整体框架3.2 成员函数3.3 begin() 与 end() 的实现3.4 operator-> 的实现3.5 const 迭代器3.5.1 const 迭代器为什么命名 const_iterator3.5.2 const 迭代器的实现3.5.3 合并两个迭代器 4 源码 1 list 基础结…...

Redis主要问题

Redis redis是单线程,基于内存操作,所以执行很快。,与网络延迟有关。 还是买早餐的例子,从早餐店买一个包子,首先早餐店得还有包子没有卖完,然后卖出,包子数量-1,重新设定早餐店包…...

vue3 ref的用法及click事件的说明

1、ref可以定义一个简单的属性,也可以是一个复杂的列表、数组等等。 2、为什么要使用 ref?简单的let个变量不行吗?const个变量不行吗? 其实这个跟vue的响应式的系统有关,官方的说明如下: 3、为 ref() 标注…...

通信工程学习:什么是HFC混合光纤同轴电缆

HFC:混合光纤同轴电缆 HFC(Hybrid Fiber Coaxial)混合光纤同轴电缆是一种结合了光纤与同轴电缆的宽带接入网技术。以下是对HFC混合光纤同轴电缆的详细解释: 一、HFC混合光纤同轴电缆的定义与概述 定义:HFC是一种结合光…...

怎么浏览URL的PDF文件呢

最近发现PDF文件网页端打开就是丑,不知道怎么办 1. 看着实在不舒服,用chorm的插件 然后原本本地用的也是2345pdf阅读器 2. 之后也下载了adobe pdf的桌面阅读器 2345打开是这个样子 这个是现在啦 如果要一些安装包什么的,评论见~ 最…...

【2025届华为秋招机考三道编程题之一】华为校招留学生软件开发工程师-真题机考笔试/(200分)- 跳格子3(Java JS Python C)

华为校招机考的题型: 编程:软件测试工程师,算法,OD岗,三道编程题不限语言【C,Python,Java】 校招:600分 120分钟,100/200/300 社招:400分 150分钟&#xf…...

高性能缓存利器:Caffeine 在 Spring Boot 中的应用

在现代应用程序中,缓存是提高数据检索速度、减少对数据库或其他数据源访问次数的重要手段。Spring Cache 提供了多种缓存实现方式,而在我们的 Spring Boot 项目中,我们选择了 Caffeine 作为默认的缓存库。 Caffeine 简介 Caffeine 是一个基…...

pWnOS的第二种全新解法(ssh私钥破解、webmin漏洞提权)

端口 端口扫描内容请看:vulnhub(8):pWnOS(还没信息收集就已经成功打点)-CSDN博客 打点 ssh登录公钥收集 ./2017.pl 192.168.234.116 10000 /home/vmware/.ssh/authorized_keys 0 ./2017.pl 192.168.234.11…...

Maven入门学习笔记

一、maven介绍 Maven是一款自动化构建工具,专注服务于JAVA平台的项目构建和依赖管理。在javaEE开发的历史上构建工具的发展也经历了一系列的演化和变迁。 管理jar包 当我们使用SSM之后我们就需要使用非常多的jar包 没有maven找jar包非常的麻烦。 使用maven下载…...

linux驱动开发-arm汇编基础

目录 写在前面 1、Cortex-A7 处理器有 9 种处理模式 2、Cortex-A 寄存器组 通用寄存器 1、汇编语法 2、Cortex-A7 常用汇编指令 2.1 处理器内部数据传输指令 2.1.1 传输数据操作类型 1、MOV指令 2、MRS指令 3、MSR指令 2.2、存储器访问指令 2.2.1 LDR指令 2.2.2 …...

遍历 Map 类型集合的方法汇总

1 方法一 先用方法 keySet() 获取集合中的所有键。再通过 gey(key) 方法用对应键获取值 import java.util.HashMap; import java.util.Set;public class Test {public static void main(String[] args) {HashMap hashMap new HashMap();hashMap.put("语文",99);has…...

关于iview组件中使用 table , 绑定序号分页后序号从1开始的解决方案

问题描述:iview使用table 中type: "index",分页之后 ,索引还是从1开始,试过绑定后台返回数据的id, 这种方法可行,就是后台返回数据的每个页面id都不完全是按照从1开始的升序,因此百度了下,找到了…...

Leetcode 3577. Count the Number of Computer Unlocking Permutations

Leetcode 3577. Count the Number of Computer Unlocking Permutations 1. 解题思路2. 代码实现 题目链接:3577. Count the Number of Computer Unlocking Permutations 1. 解题思路 这一题其实就是一个脑筋急转弯,要想要能够将所有的电脑解锁&#x…...

页面渲染流程与性能优化

页面渲染流程与性能优化详解(完整版) 一、现代浏览器渲染流程(详细说明) 1. 构建DOM树 浏览器接收到HTML文档后,会逐步解析并构建DOM(Document Object Model)树。具体过程如下: (…...

在Ubuntu中设置开机自动运行(sudo)指令的指南

在Ubuntu系统中,有时需要在系统启动时自动执行某些命令,特别是需要 sudo权限的指令。为了实现这一功能,可以使用多种方法,包括编写Systemd服务、配置 rc.local文件或使用 cron任务计划。本文将详细介绍这些方法,并提供…...

从零实现STL哈希容器:unordered_map/unordered_set封装详解

本篇文章是对C学习的STL哈希容器自主实现部分的学习分享 希望也能为你带来些帮助~ 那咱们废话不多说&#xff0c;直接开始吧&#xff01; 一、源码结构分析 1. SGISTL30实现剖析 // hash_set核心结构 template <class Value, class HashFcn, ...> class hash_set {ty…...

在WSL2的Ubuntu镜像中安装Docker

Docker官网链接: https://docs.docker.com/engine/install/ubuntu/ 1、运行以下命令卸载所有冲突的软件包&#xff1a; for pkg in docker.io docker-doc docker-compose docker-compose-v2 podman-docker containerd runc; do sudo apt-get remove $pkg; done2、设置Docker…...

return this;返回的是谁

一个审批系统的示例来演示责任链模式的实现。假设公司需要处理不同金额的采购申请&#xff0c;不同级别的经理有不同的审批权限&#xff1a; // 抽象处理者&#xff1a;审批者 abstract class Approver {protected Approver successor; // 下一个处理者// 设置下一个处理者pub…...

根目录0xa0属性对应的Ntfs!_SCB中的FileObject是什么时候被建立的----NTFS源代码分析--重要

根目录0xa0属性对应的Ntfs!_SCB中的FileObject是什么时候被建立的 第一部分&#xff1a; 0: kd> g Breakpoint 9 hit Ntfs!ReadIndexBuffer: f7173886 55 push ebp 0: kd> kc # 00 Ntfs!ReadIndexBuffer 01 Ntfs!FindFirstIndexEntry 02 Ntfs!NtfsUpda…...

Axure 下拉框联动

实现选省、选完省之后选对应省份下的市区...