IPV4地址不足,私有IP无法访问,使用NAT技术、内网穿透与打洞逐个解决

文章目录

NAT技术、内网穿透与打洞:从原理到实际应用

在学习了IP协议后,我们知道,如今的IPV4地址数量不足,成为一个宝贵的资源,因此诞生了NAT地址转换技术,用于解决IP地址不足的问题。本文将详细讲解NAT技术,以及以NAT技术为基础的其他技术。

一、NAT:私网连公网的核心技术

1.1 NAT技术是什么

NAT(网络地址转换)可以认为是路由器的一个核心功能:让多个用私网IP的设备,共享路由器的公网IP访问互联网,以此缓解IPv4地址枯竭的问题。

我们常说的私网IP,都是按RFC1918规范划分的,三类私网IP段如下:

  • A类:<10.0.0.0> ~ <10.255.255.255>(多用于企业、运营商内网)

  • B类:<172.16.0.0> ~ <172.31.255.255>

  • C类:<192.168.0.0> ~ <192.168.255.255>(最常见,家里/小型办公网络基本用这个)

这些IP只在各自私网内有效,公网路由器不会转发指向私网IP的数据包,必须经过NAT转换才能接入公网。因此,在公网中直接访问一台私有IP的设备是访问不到的,必须由路由器这个"接头人"才可以将数据进行转发。而这个"接头人"是如何知道将数据转交给那个设备,这就需要用到NAT技术。

1.2 关键的NAPT转换表

实际场景中用得最多的不是单纯的IP转换,而是NAPT(网络地址端口转换)------既转IP,又转端口。路由器会维护一张NAPT转换表,核心是把内网设备的「私网IP+端口」,映射成路由器的「公网IP+随机端口」。

举个实际例子:

如上图:

你用家里的电脑(192.168.1.100:312)访问百度服务器([80.101.49.12:80),形成数据包1,发送给家用路由器,家用路由器会做两件事:

  1. 把数据包的源地址替换成自己的公网IP,将源端口替换成一个未被使用的随机端口(10.112.13.2:223),形成数据包2;
  2. 并把 192.168.1.100 : 312 ↔ 10.112.13.2 : 223 记录到转换表;
  3. 把数据包从WAN口发出,到达下一级路由器。

下一级路由器收到后,会做同样的事情,假设下级路由器直接为运营商路由器,那么与家用路由器类似

  1. 把数据包的源地址替换成自己的公网IP,将源端口替换成一个未被使用的随机端口(220.181.50.60 :587),形成数据包3;
  2. 并把 10.112.13.2 : 223 ↔ 220.181.50.60 :587 记录到转换表;
  3. 把数据包从WAN口发出,这里直接发送到公网。

此时,该数据包的源IP已经变为一个公网IP,在百度收到该数据包后,可以向该IP回应数据包,这样就不是直接向源主机的私有IP发送数据包了

此时,该数据包经过的路由器都会形成NAPT表,建立起IP映射,如下图:

等百度的响应包回来,目标地址是 220.181.50.60 :587,路由器查转换表,再把目标地址层层转换,最终传到你的电脑上。如下图所示

1.3 NAT的"硬限制"

NAT的核心问题是「单向映射」:必须是内网设备先主动连公网,路由器才会生成映射;如果公网设备想主动连内网设备,路由器里没有对应的映射记录,根本不知道该把数据包转给谁。不同私网的设备之间,也没法直接通信------这也诞生内网穿透、打洞技术这样新的技术。

二、内网穿透:给私网设备找个"公网替身"

2.1 核心逻辑

内网穿透(也叫NAT穿透)的思路很直白:找一台有固定公网IP的服务器当「中转站」。

  1. 私网设备主动连公网服务器,触发路由器生成NAT映射,服务器记录下这台设备的「公网IP+端口」;

  2. 其他设备(公网/另一私网)想访问这个私网设备,先把请求发给公网服务器;

  3. 服务器把请求转发给私网设备,私网设备的响应也按这个路径回传。

说白了,公网服务器就是私网设备在公网的「替身」,所有请求先找替身,再由替身转交。

如上图所示,任何访问替身服务器(180.100.100.100:8088)的数据,都会被替身服务器转发给PC1主机。这样,就相当于私网中的设备可以访问到另一个私网中的设备,前提是被访问的设备一定要提前在网路中建立好NAT转换关系。

2.2 典型应用场景

  • 远程访问:在外网连家里的NAS、办公电脑,或访问公司内网的OA系统;

  • 开发测试:本地写的接口、网页不用部署到公网服务器,就能让客户/测试人员访问;

  • 物联网管理:家里的摄像头、工厂的工控设备,能被云端远程监控和控制;

  • 临时共享:比如给客户演示本地开发的小程序、APP后台接口。

三、内网打洞:让私网设备直接"面对面"通信

内网穿透需要服务器全程中转数据,带宽消耗大;而内网打洞(P2P打洞)更高效------服务器只帮忙「传地址信息」,最后两台私网设备能点对点直连,后续通信不用过服务器。

3.1 打洞的核心流程(以两台私网设备A、B为例)

  1. A和B都主动连同一台公网「打洞服务器」,触发各自路由器生成NAT映射,服务器记录下A的「公网IP+端口」(记为A')和B的「公网IP+端口」(记为B');

  2. 服务器把A'发给B,把B'发给A,即两个私网的设备有了对方在公网中的IP和端口,因此可以直接访问:

  3. A向B'发起连接,B向A'发起连接------因为两边路由器都有对应的NAT映射,数据包能穿透路由器,最终A和B直连;

  4. 后续A和B的通信全程点对点,不再经过服务器。

这就像在两边路由器的「出入口」各打了个洞,让对方的数据包能直接穿过去,所以叫「打洞」。

3.2 典型应用场景

  • 直播/短视频:主播的视频流直接发给观众,不用服务器中转,大幅降低服务器带宽成本;

  • 在线游戏:玩家之间的实时交互(比如走位、技能释放)直连,降低延迟;

  • P2P下载(比如迅雷):下载文件时直接从其他用户的电脑拿数据,不用从服务器下载;

  • 远程桌面(高端场景):比如企业内网的两台设备直连,比穿透更流畅。

四、代理服务器:另一种转发思路

代理服务器和NAT、穿透/打洞的核心区别是:代理在「应用层」转发,而NAT在「网络层」转发,适用场景也不同。

4.1 正向代理:替客户端"跑腿"

正向代理是客户端的「代理人」,所有客户端的公网请求都先发给代理服务器,再由代理服务器转发。

核心特点:客户端知道代理服务器的存在,服务器不知道真实客户端(只知道代理);

典型用途:

  1. 管控上网行为:公司内网或者校园网限制员工访问某些网站,所有请求走代理,代理过滤违规请求;

  2. 加速访问:代理缓存静态资源(比如图片、视频),同一内网的人再访问时,直接从代理拿,不用连公网;

  3. 突破地域限制:比如通过海外代理访问外网资源;

4.2 反向代理:替服务端"接客"

反向代理是服务端的「前台」,公网用户的请求先发给代理服务器,代理再转发给内网的真实服务端。

  • 核心特点:用户不知道真实服务端的存在(只知道代理),服务端知道代理的存在;

  • 典型用途:

    1. 隐藏内网服务:核心服务部署在内网,不直接暴露给公网,降低被攻击的风险;

    2. 负载均衡:把用户请求分给多台内网服务器(比如电商网站的订单系统,多台服务器分担压力);

    3. 动静分离:代理把静态资源请求(图片、JS)转发给CDN,动态请求(接口)转发给应用服务器;

相关推荐
小Tomkk8 小时前
数据库 变更和版本控制管理工具 --Bytebase 安装部署(linux 安装篇)
linux·运维·数据库·ci/cd·bytebase
赌博羊8 小时前
ImportError: /lib/x86_64-linux-gnu/libc.so.6: version `GLIBC_2.32‘ not found
linux·运维·gnu
木卫二号Coding8 小时前
第七十九篇-E5-2680V4+V100-32G+llama-cpp编译运行+Qwen3-Next-80B
linux·llama
getapi9 小时前
Ubuntu 22.04 服务器的系统架构是否为 amd64 x86_64
linux·服务器·ubuntu
win x9 小时前
深入理解HTTPS协议加密流程
网络协议·http·https
消失的旧时光-19439 小时前
Linux 入门核心命令清单(工程版)
linux·运维·服务器
仙俊红9 小时前
从 Filter / Interceptor 到 HTTPS
网络协议·http·https
艾莉丝努力练剑9 小时前
【Linux:文件】Ext系列文件系统(初阶)
大数据·linux·运维·服务器·c++·人工智能·算法
Trouvaille ~9 小时前
【Linux】TCP Socket编程实战(一):API详解与单连接Echo Server
linux·运维·服务器·网络·c++·tcp/ip·socket
liann1199 小时前
3.1_网络——基础
网络·安全·web安全·http·网络安全