Linux网络编程:NAT、代理服务、内网穿透和打洞

目录

NAT技术

NAT技术背景

NAT IP转换过程

NAPT

NAT技术的缺陷

代理服务器

正向代理

⼯作原理

功能特点

应⽤场景

反向代理

基本原理

应⽤场景

NAT和代理服务器

内网穿透和内网打洞

内网穿透

内网打洞(NAT穿透)


NAT技术

NAT(Network Address Translation,网络地址转换)技术,是解决IP地址不足的主要手段,并且能够有效地避免来自网络外部的攻击,隐藏并保护网络内部的计算机。

NAT技术背景

之前我们讨论了, IPv4协议中, IP地址数量不充⾜的问题

NAT技术当前解决IP地址不够⽤的主要⼿段, 是路由器的⼀个重要功能;

NAT能够将私有IP对外通信时转为全局IP. 也就是就是⼀种将私有IP和全局IP相互转化的技术⽅法:

很多学校, 家庭, 公司内部采⽤每个终端设置私有IP, ⽽在路由器或必要的服务器上设置全局IP;

全局IP要求唯⼀, 但是私有IP不需要; 在不同的局域⽹中出现相同的私有IP是完全不影响的;

NAT IP转换过程

这里私有IP地址的世界就是局域网,全局IP地址的世界就是公网了。

NAT路由器将源地址从私有IP地址 10.0.0.10替换成全局的公网IP地址 202.244.174.37(其实就是路由器的WAN口IP地址),数据包在互联网种经过各种路由转发最终到达服务器;

NAT路由器收到外部的数据时, ⼜会把⽬标IP从202.244.174.37替换回10.0.0.10;

在NAT路由器内部, 有⼀张⾃动⽣成的, ⽤于地址转换的表;

当 10.0.0.10 第⼀次向 163.221.120.9 发送数据时就会⽣成表中的映射关系;

NAPT

NAPT(Network Address Port Translation,网络地址端口转换),可以将多个内部地址映射为一个合法公网地址。

如果局域⽹内, 有多个主机都访问同⼀个外⽹服务器, 那么对于服务器返回的数据中, ⽬的IP都是相同的. 那么NAT路由器如何判定将这个数据包转发给哪个局域⽹的主机?

这时候NAPT来解决这个问题了. 使⽤IP+port来建⽴这个关联关系

当局域网中的主机向外网发送数据时,路由器会将该数据包的源IP地址替换为自己的WAN口IP地址,并建立该主机私有IP与其对应访问的公网IP之间的映射关系。

但如果局域网中的多台主机同时访问同一个外网服务,当路由器收到外网发来的响应数据时,路由器无法判断该响应数据应该转发给局域网中的哪台主机,因为该局域网中所有主机的数据包都由路由器代替发送了,因此发来的响应数据包的目的IP地址都是路由器的WAN口IP地址。

于是NAPT在建立转换表的映射关系时,除了建立局域网中私有IP与其对应访问的公网IP之间的映射关系外,还会加上一个由NAT路由器选定的端口号。

此时当局域网中的多台主机同时访问同一个外网服务时,虽然外网发来的响应数据的目的IP地址都是路由器的WAN口IP,但发给局域网中不同主机的响应数据对应的目的端口号是不同的,此时路由器就能通过IP+Port的方式来区分发给不同主机的数据包。

这种关联关系也是由NAT路由器⾃动维护的. 例如在TCP的情况下, 建⽴连接时, 就会⽣成这个表项; 在断开连接后, 就会删除这个表项.

NAT技术的缺陷

由于NAT依赖这个转换表, 所以有诸多限制:

⽆法从NAT外部向内部服务器建⽴连接。

装换表的⽣成和销毁都需要额外开销;

通信过程中⼀旦NAT设备异常, 即使存在热备(热备设备只是一个备胎的作用,在主机异常时充当备用机,但它无法做到保存主机与外界连接信息), 所有的TCP连接也都会断开;

代理服务器

代理服务器(Proxy Server)的功能就是代理网络用户去取得网络信息,代理服务器又分为正向代理和反向代理。

花王尿不湿是⼀个很经典的尿不湿品牌, 产⾃⽇本.

我⾃⼰去⽇本买尿不湿⽐较不⽅便, 但是可以让我在⽇本⼯作的表姐去超市买了快递给我. 此时超市看到的买家是我表姐, 我的表姐就是 "正向代理";

后来找我表姐买尿不湿的⼈太多了, 我表姐觉得天天去超市太⿇烦, ⼲脆去超市买了⼀⼤批尿不湿屯在家⾥, 如果有⼈来找她代购, 就直接把屯在家⾥的货发出去, ⽽不必再去超市. 此时我表姐就是 "反向代理"

正向代理⽤于请求的转发(例如借助代理绕过反爬⾍).

反向代理往往作为⼀个缓存.

正向代理

正向代理(Forward Proxy)是⼀种常⻅的⽹络代理⽅式,它位于客⼾端和⽬标服务器之间,代表客⼾端向⽬标服务器发送请求。正向代理服务器接收客⼾端的请求,然后将请求转发给⽬标服务器,最后将⽬标服务器的响应返回给客⼾端。通过这种⽅式,正向代理可以实现多种功能,如提⾼ 访问速度、隐藏客⼾端⾝份、实施访问控制等。

比如公司内部一般都会有自己的服务器,当我们使用公司内网上网时:

我们对外网发起的数据请求,首先会转发到公司的这台服务器上,然后由公司的这台服务器代替你对外网进行访问。

当公司的服务器收到对应外网的响应数据后,再由公司的这台服务器将数据转发给你。

在此情况下,正向代理的好处:

正向代理最大的一个好处就是可以加速资源访问。
比如公司中大量员工都要访问外网的同一个资源,那么正向代理服务器就可以将对应的资源缓存到本地,此时当其他人要访问该资源时,直接在正向代理服务器就可以获取,而不需要再次进行外网访问。

⼯作原理

客⼾端将请求发送给正向代理服务器。

正向代理服务器接收请求,并根据配置进⾏处理,如缓存查找、内容过滤等。

正向代理服务器将处理后的请求转发给⽬标服务器。

⽬标服务器处理请求,并将响应返回给正向代理服务器。

正向代理服务器将响应返回给客⼾端。

Nginx

功能特点

缓存功能:正向代理服务器可以缓存经常访问的资源,当客⼾端再次请求这些资源时,可以直接从缓存中获取,提⾼访问速度。

内容过滤:正向代理可以根据预设的规则对请求或响应进⾏过滤,如屏蔽⼴告、阻⽌恶意⽹站等。

访问控制:通过正向代理,可以实现对特定⽹站的访问控制,如限制员⼯在⼯作时间访问娱乐⽹

站。

隐藏客⼾端⾝份:正向代理可以隐藏客⼾端的真实IP地址,保护客⼾端的隐私。

负载均衡:在多个⽬标服务器之间分配客⼾端请求,提⾼系统的可扩展性和可靠性。

应⽤场景

企业⽹络管理:企业可以通过正向代理实现对员⼯⽹络访问的管理和控制,确保员⼯在⼯作时间内专注于⼯作,避免访问不良⽹站或泄露公司机密。

公共⽹络环境:在公共场所如图书馆、学校等提供的⽹络环境中,通过正向代理可以实现对⽹络资源的合理分配和管理,确保⽹络使⽤的公平性和安全性。

内容过滤与保护:家⻓可以通过设置正向代理来过滤不良内容,保护孩⼦免受⽹络上的不良信息影 响。提⾼访问速度:对于经常访问的⽹站或资源,正向代理可以通过缓存机制提⾼访问速度,减少⽹络延迟。

跨境电商与海外访问:对于跨境电商或需要访问海外资源的企业和个⼈,正向代理可以帮助他们突破⽹络限制,顺畅地访问海外⽹站和资源。

反向代理

反向代理服务器是⼀种⽹络架构模式,其作为Web服务器的前置服务器,接收来⾃客⼾端的请求, 并将这些请求转发给后端服务器,然后将后端服务器的响应返回给客⼾端。这种架构模式可以提升 ⽹站性能、安全性和可维护性等。

比如域名www.baidu.com对应的服务器实际就是一个反向代理服务器。

百度内部实际并不是只有一台服务器,但不同地区的人们都可以通过访问www.baidu.com享受到百度提供的服务,实际我们访问的就是百度的反向代理服务器。
当这台反向代理服务器收到客户端的数据请求后,就会将我们的数据请求转发给百度内部的某台服务器进行数据处理,然后再将数据处理的结果返回给客户端。

基本原理

反向代理服务器位于客⼾端和Web服务器之间,当客⼾端发起请求时,它⾸先会到达反向代理服务器。反向代理服务器会根据配置的规则将请求转发给后端的Web服务器,并将Web服务器的响应返回给客⼾端。在这个过程中,客⼾端并不知道实际与哪个Web服务器进⾏了交互,它只知道与反向代理服务器进⾏了通信。

应⽤场景

• 负载均衡:反向代理服务器可以根据配置的负载均衡策略,将客⼾端的请求分发到多个后端服务器上,以实现负载均衡。这有助于提升⽹站的整体性能和响应速度,特别是在⾼并发场景下。

安全保护:反向代理服务器可以隐藏后端Web服务器的真实IP地址,降低其被直接攻击的⻛险。同时,它还可以配置防⽕墙、访问控制列表(ACL)等安全策略,对客⼾端的请求进⾏过滤和限制, 以保护后端服务器的安全。

缓存加速:反向代理服务器可以缓存后端Web服务器的响应内容,对于重复的请求,它可以直接从缓存中返回响应,⽽⽆需再次向后端服务器发起请求。这可以⼤⼤减少后端服务器的负载,提升⽹站的响应速度。

内容过滤和重写:反向代理服务器可以根据配置的规则对客⼾端的请求进⾏过滤和重写,例如添加或删除请求头、修改请求路径等。这有助于实现⼀些特定的业务需求,如URL重写、⽤⼾认证等。

动静分离:在⼤型⽹站中,通常需要将静态资源和动态资源分开处理。通过将静态资源部署在反向代理服务器上,可以直接从反向代理服务器返回静态资源的响应,⽽⽆需再次向后端服务器发起请求。这可以⼤⼤提升静态资源的访问速度。

CDN(Content Delivery Network,内容分发⽹络)就是采⽤了反向代理的原理

NAT和代理服务器

路由器往往都具备NAT设备的功能, 通过NAT设备进⾏中转, 完成⼦⽹设备和其他⼦⽹设备的通信过程.

代理服务器看起来和NAT设备有⼀点像. 客⼾端像代理服务器发送请求, 代理服务器将请求转发给真正要

请求的服务器; 服务器返回结果后, 代理服务器⼜把结果回传给客⼾端.

那么NAT和代理服务器的区别有哪些呢?

从应⽤上讲, NAT设备是⽹络基础设备之⼀, 解决的是IP不⾜的问题. 代理服务器则是更贴近具体应⽤, ⽐如通过代理服务器进⾏翻墙, 另外像迅游这样的加速器, 也是使⽤代理服务器.

从底层实现上讲, NAT是⼯作在⽹络层, 直接对IP地址进⾏替换. 代理服务器往往⼯作在应⽤层.

从使⽤范围上讲, NAT⼀般在局域⽹的出⼝部署, 代理服务器可以在局域⽹做, 也可以在⼴域⽹做,

也可以跨⽹.

从部署位置上看, NAT⼀般集成在防⽕墙, 路由器等硬件设备上, 代理服务器则是⼀个软件程序, 需

要部署在服务器上.

代理服务器是⼀种应⽤⽐较⼴的技术.

翻墙: ⼴域⽹中的代理.

负载均衡: 局域⽹中的代理.

内网穿透和内网打洞

由于IPv4地址短缺,我们绝大多数人使用的都是内网IP(比如 192.168.1.100),外面的人根本无法直接“敲门”访问你。内网穿透和打洞就是解决这个“敲门”问题的钥匙。内网穿透和打洞就是解决两个内网IP通信问题。

内网穿透

内网穿透是一种通过网络代理与中转技术,实现公网设备与内网设备进行通信的解决方案。其核心在于克服网络地址转换(NAT)与防火墙带来的连通性障碍。

  • 核心原理:依赖于一台具有公网IP的中继服务器。内网客户端主动与该服务器建立一条持久的、出向的通信隧道。所有发往内网服务的公网请求,均先发送至此中继服务器,再由该服务器通过已建立的隧道转发至内网客户端。

  • 通信模式间接通信客户端反向连接。数据路径为:公网客户端 ⇄ 中继服务器 ⇄ 内网服务端。这是一种典型的C/S(客户端-服务器)或B/S(浏览器-服务器)架构的变体。

  • 技术本质:在传输层或应用层实现端口映射与流量转发

  • 优点

    • 高通用性:不受内网NAT设备类型的限制,穿透成功率高。

    • 配置简单:技术实现相对标准,易于部署和管理。

  • 缺点

    • 性能瓶颈:所有流量经由中继服务器,其带宽和处理能力可能成为瓶颈,增加通信延迟。

    • 单点故障:中继服务器的可用性直接决定整个服务的可用性。

  • 典型协议/工具:HTTP/Socks5代理、反向代理、Frp、Ngrok。

内网打洞(NAT穿透)

内网打洞,即NAT穿透,是一组旨在建立端到端(P2P)直接通信的技术。其目标是在无需中继服务器转发数据的情况下,让两个均位于私有网络后的主机直接交换数据。

  • 核心原理:利用NAT设备的行为特性。当内网主机向公网发送数据包时,NAT会临时创建一个地址映射表项(即“打洞”),允许相应的返回数据包通过。打洞技术通过一个公网的协调服务器,交换双方经过NAT转换后的公网端点信息,然后引导双方同时向对方的公网端点发送数据包,从而“哄骗”各自的NAT设备接受来自“外部”的流量,建立起直接的P2P通道。

  • 通信模式直接通信。在理想情况下,数据路径为:客户端A ⇄ 客户端B。协调服务器仅在会话初始化阶段起作用。

  • 技术本质:依赖于交互式连接建立(ICE)​ 框架,通常结合STUN(用于发现自身公网地址和检测NAT类型)和TURN(作为中继后备方案)协议共同实现。

  • 优点

    • 高性能:直接通信带来低延迟、高带宽,提升了用户体验。

    • 可扩展性:减轻了中心服务器的流量压力,系统扩展性更好。

  • 缺点

    • 成功率受限:其成功与否高度依赖于两端NAT设备的类型(如完全锥形、限制锥形、对称型)。对于对称型NAT,打洞难度极大甚至不可能。

    • 实现复杂:需要处理复杂的网络地址发现、连接保活和失败转移机制。

  • 典型协议/应用:WebRTC、SIP、BitTorrent、Skype(早期版本)。

在现代网络应用中,内网穿透(中转)​ 与 内网打洞(P2P)​ 并非互斥,而是常被结合使用,形成混合策略。例如,WebRTC会优先尝试高效的P2P打洞,若因网络限制失败,则自动降级至使用TURN服务器进行中转,从而在效率可靠性之间达到最佳平衡。

此篇完,感谢收看!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

_dindong

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值