网络编程—NAT、代理服务与内网穿透
本文围绕计算机网络中NAT、代理服务器、内网穿透三大技术展开从底层原理到手动部署逐步拆解。一、引言IPv4协议使用32位地址理论上最多支持约43亿个IP。但随着互联网设备爆炸式增长公网IP地址早已入不敷出。为解决这一问题业界提出了多种方案其中最主流、部署最广泛的就是NAT网络地址转换。NAT并非孤立存在——它与代理服务器、内网穿透等技术共同构成了现代网络通信的基础设施层。本文将依次梳理这些技术的工作机制并通过frp实战演示内网穿透的完整部署流程。二、NAT2.1 背景NAT是当前解决IP地址不足的主要手段也是路由器的核心功能之一。其基本思路是在局域网内部使用私有IP在路由器或出口服务器上配置少量全局IP通过地址转换实现内网与外网的通信。私有IP的特点无需全局唯一不同局域网中可以出现相同的私有IP常见私有地址段10.0.0.0/8、172.16.0.0/12、192.168.0.0/16无法直接在公网上路由必须经过NAT转换学校、家庭等采用这种架构每个终端分配私有IP路由器持有一个或多个公网IP。2.2 地址转换NAT的核心操作是替换IP首部中的源地址和目标地址。以上图为例转换流程如下内网主机 10.0.0.10 向外部服务器 163.221.120.9 发送数据包源IP为 10.0.0.10NAT路由器收到数据包后将源地址替换为全局IP 202.244.174.37再转发到互联网外部服务器返回数据时目标IP为 202.244.174.37NAT路由器收到返回数据将目标IP替换回 10.0.0.10转发给内网主机NAT路由器内部维护一张自动生成的地址转换表当 10.0.0.10 首次向外部发送数据时表中就会生成对应的映射关系。2.3 NAPT基础NAT存在一个明显问题如果局域网内多台主机同时访问同一台外部服务器服务器返回的数据包目标IP都是同一个公网IPNAT路由器如何判断该转发给哪台内网主机答案是NAPT——使用IP 端口号建立关联关系。从转换表可以看出内网地址:端口外部目标转换后地址:端口10.0.0.10:1025163.221.120.9:80202.244.174.37:102510.0.0.11:1025163.221.120.9:80202.244.174.37:1026两台内网主机即使使用相同的源端口 1025NAPT也会为它们分配不同的公网端口从而区分不同的会话。这张映射表由NAT路由器自动维护TCP建立连接时生成表项断开连接后删除表项。日常所说的NAT绝大多数场景实际上指的是NAPT。2.4 NAT技术的缺陷NAT虽然解决了地址不足的问题但也带来了一些限制无法从外部主动建立连接NAT 内部的服务器无法被公网客户端直接访问转换表开销NAT 路由器需要维护地址映射表表项的生成与销毁会消耗额外的计算和内存资源单点故障风险通信过程中若 NAT 设备发生故障即使有热备设备接管所有已建立的 TCP 连接也会中断三、代理服务器代理服务器与NAT在表象上有些相似客户端向代理发请求代理转发给真正的服务器服务器返回结果后代理再回传给客户端。3.1 正向代理正向代理位于客户端和目标服务器之间代表客户端向目标服务器发送请求。1工作流程客户端将请求发送给正向代理服务器代理服务器根据配置处理请求代理将处理后的请求转发给目标服务器目标服务器返回响应给代理代理将响应返回给客户端2功能功能说明缓存加速缓存常用资源重复请求直接从缓存返回内容过滤屏蔽广告、阻止恶意网站访问控制限制特定网站的访问时段或权限隐藏身份对外只暴露代理服务器IP保护客户端隐私突破限制借助代理访问受地域限制的资源3应用场景企业网络管理、公共WiFi环境、跨境访问、游戏加速器等3.2 反向代理反向代理服务器位于客户端和Web服务器之间代表服务器接收客户端请求。客户端并不知道实际与哪台后端服务器交互只知道与反向代理通信。应用场景负载均衡根据策略将请求分发到多台后端服务器提升并发处理能力安全防护隐藏后端服务器真实IP降低被直接攻击的风险缓存加速缓存后端响应内容减少后端服务器负载动静分离静态资源由反向代理直接返回动态请求转发给后端内容重写添加/删除请求头、URL重写、用户认证等CDN内容分发网络本质上就是反向代理原理的大规模应用。3.3 NAT与代理服务器的区别对比维度NAT代理服务器工作层次网络层直接替换IP地址应用层理解并转发应用协议解决问题IP地址不足更贴近具体应用加速、安全、控制部署位置通常集成在路由器、防火墙等硬件软件程序部署在服务器上使用范围一般在局域网出口部署局域网、广域网、跨网均可典型代表家用路由器Nginx、Squid、游戏加速器用生活例子来解释托在日本工作的表姐去超市买花王尿不湿再寄回来——超市看到的买家是表姐表姐就是正向代理。后来找表姐代购的人太多表姐干脆囤了一批货在家有人要就直接发——此时表姐充当了反向代理带缓存功能。正向代理侧重请求转发反向代理常作为缓存和负载均衡入口。四、内网穿透4.1 需求前面提到NAT的缺陷之一是无法从外部主动建立连接。这意味着家里的电脑、公司的开发服务器虽然能主动访问外网但外网设备无法主动访问它们。内网穿透又称内网打洞就是为了解决这个问题——让公网用户能够访问位于NAT后面的内网服务。1原理在内网主机和一台具有公网IP的服务器之间建立一条持久的TCP连接外部请求先到达公网服务器再通过这条隧道转发到内网主机。2过程步骤1内网主机上运行frp客户端将本地SSH的22端口映射到公网服务器frps的8888端口建立NAT映射步骤2外部用户直接访问云服务器的8888端口流量通过隧道转发到家里Linux机器的22端口公网服务器起到中转桥梁的作用它必须拥有可被直接访问的公网IP。4.2 frpfrp是一款开源的内网穿透工具支持TCP、UDP、HTTP、HTTPS等多种协议。下面以frp v0.58.1为例演示完整的部署流程。4.2.1 下载与安装远程穿透下载地址_frp下载地址-CSDN博客注意选择与系统架构匹配的版本如果GitHub下载速度慢可以借助Watt Toolkit等工具加速。下载后解压tar -zxvf frp_0.58.1_linux_amd64.tar.gz cd frp_0.58.1_linux_amd64解压后目录中包含两个程序frpsfrp服务端部署在公网服务器上frpcfrp客户端部署在内网主机上4.2.2 服务端配置公网服务器上的配置追求简洁只需指定监听端口即可。创建frps.toml# frps.toml - 公网服务器端配置 bindPort 8888bindPort是frps监听的端口用于接收frpc的连接请求。4.2.3 客户端配置内网主机上创建 frpc.toml# frpc.toml - 内网客户端配置 # 公网服务器上frp服务的IP与端口 serverAddr x.x.x.x # 替换为你的公网服务器IP serverPort 8888 [[proxies]] name ssh-service # 代理名称自定义 type tcp # 代理类型 localIP 127.0.0.1 # 本地服务IP localPort 22 # 内网服务监听的端口SSH默认22 remotePort 8081 # 公网服务器上监听的端口配置含义公网服务器的 8081 端口会被映射到内网主机的 22 端口。4.2.4 启动服务服务端和客户端都可以使用nohup在后台启动# 公网服务器启动frps nohup ./frps -c ./frps.toml /dev/null # 内网主机启动frpc nohup ./frpc -c ./frpc.toml /dev/null 命令说明nohup忽略挂断信号使进程在终端关闭后继续运行 /dev/null将标准输出和标准错误都重定向到/dev/null放入后台运行4.2.5 SSH远程登录测试在任意一台能上网的机器上通过公网服务器的8081端口连接内网SSHssh -p 8081 用户名公网服务器IP如果连接成功说明内网穿透隧道已正常工作。4.2.6 Nginx远程访问测试除了SSH还可以穿透Web服务。先在内网主机上安装Nginx# CentOS安装 sudo yum install nginx # Ubuntu安装 sudo apt install nginx # 启动 nginx # 停止 # nginx -s stopapt安装的Nginx默认首页路径为/var/www/html/默认首页文件为index.nginx-debian.html。在frpc.toml中追加一个代理配置[[proxies]] name nginx-service type tcp localIP 127.0.0.1 localPort 80 remotePort 8082重启frpc后在浏览器访问http://公网服务器IP:8082即可看到内网Nginx的默认页面。

相关新闻

Java 修饰符终极指南:从 public 到 volatile,一文掌握 12 种修饰符的底层原理

Java 修饰符终极指南:从 public 到 volatile,一文掌握 12 种修饰符的底层原理

面试官:Java 修饰符有几个?我答出 7 个后,他追问了 volatile 和 transient 从访问权限到 JVM 指令,从内存可见性到序列化,这篇带你彻底吃透 Java 修饰符我们之前聊过 数据类型(值长什么样)和 变…

2026/8/16 23:27:49 阅读更多 →
头歌实践教学平台:Spark大数据编程(二十六~三十)

头歌实践教学平台:Spark大数据编程(二十六~三十)

二十六、Spark 的设计与运行原理任务描述 本关任务:根据相关知识内容完成右侧习题。相关知识 为了完成本关任务,你需要掌握:Spark 基本概念 Spark 运行架构 Spark 运行流程 Spark 计算框架优势二十七、Scala Option任务描述 本关任务&#xf…

2026/8/16 23:27:49 阅读更多 →
深入掌握seq命令:从数字序列生成到Linux运维实战应用

深入掌握seq命令:从数字序列生成到Linux运维实战应用

1. 从“seq”说起:一个被低估的文本生成利器如果你在Linux或macOS的命令行里待过一段时间,大概率见过或用过seq这个命令。它的名字是“sequence”(序列)的缩写,功能也如其名——生成一个数字序列。乍一看,这…

2026/8/16 23:27:49 阅读更多 →

最新新闻

nslookup命令使用说明

nslookup命令使用说明

个人建站,域名备案完成后,往往还要做域名解析服务,技术人员怎么能知道自己配置的DNS正确与否呢?NSLOOKUP查询域名信息的一个非常有用的命令,可以指定查询的类型,可以查到DNS记录的生存时间还可以指定使用哪…

2026/8/17 0:00:08 阅读更多 →
【原创唯一】基于SpringBoot+Vue的在线书店商城系统 课程设计/大作业/期末作业(源码+MySQL数据库+实验报告+PPT+远程部署)

【原创唯一】基于SpringBoot+Vue的在线书店商城系统 课程设计/大作业/期末作业(源码+MySQL数据库+实验报告+PPT+远程部署)

摘要 电子商务与移动支付的普及,线上购书已成为高校师生及社会公众获取图书的重要方式。传统线下书店在图书检索、库存查询、订单跟踪等方面存在信息分散、效率较低等问题。本文设计并实现了一套基于 B/S 架构的网上书店系统,采用前后端分离模式&#xf…

2026/8/17 0:00:08 阅读更多 →
飞书局域网文件传输实战:3种方案实现高速点对点传输

飞书局域网文件传输实战:3种方案实现高速点对点传输

1. 项目概述:为什么要在局域网内用飞书传文件? 飞书作为一款主流的协同办公套件,其核心功能是围绕云端协作设计的。无论是文档、表格还是文件,通常的分享逻辑都是“上传到云端 -> 生成链接 -> 分享给同事”。这个流程在互联…

2026/8/17 0:00:08 阅读更多 →
LabVIEW异步调用实战:解决界面卡顿与并行处理难题

LabVIEW异步调用实战:解决界面卡顿与并行处理难题

1. 项目概述:为什么异步调用是LabVIEW进阶的必经之路如果你在LabVIEW里写过稍微复杂点的程序,尤其是涉及到界面响应、多任务并行或者硬件IO等待,大概率会遇到一个头疼的问题:程序“卡”住了。前面板点不动,进度条不更新…

2026/8/17 0:00:08 阅读更多 →
LabVIEW异步调用实战:从原理到生产者消费者模式,解决界面卡顿与并行处理难题

LabVIEW异步调用实战:从原理到生产者消费者模式,解决界面卡顿与并行处理难题

1. 项目概述:为什么异步调用是LabVIEW进阶的必修课? 如果你用LabVIEW做过稍微复杂点的项目,尤其是涉及界面响应、多任务并行或者硬件IO等待的场景,大概率遇到过这样的窘境:前面板点个按钮,整个程序就“卡死…

2026/8/17 0:00:08 阅读更多 →
错误分享:误将磁盘分区类型选成磁盘名称

错误分享:误将磁盘分区类型选成磁盘名称

1.先删除原有分区2.fdisk重新创建3.发现进程被占用4.使用kill关不掉进程,加 -9 强制关闭5.关闭后重新使用fdisk创建,tips:记得改完后要使用 w 保存

2026/8/16 23:59:08 阅读更多 →

日新闻

LabVIEW异步调用实战:从原理到生产者消费者模式,解决界面卡顿与并行处理难题

LabVIEW异步调用实战:从原理到生产者消费者模式,解决界面卡顿与并行处理难题

1. 项目概述:为什么异步调用是LabVIEW进阶的必修课? 如果你用LabVIEW做过稍微复杂点的项目,尤其是涉及界面响应、多任务并行或者硬件IO等待的场景,大概率遇到过这样的窘境:前面板点个按钮,整个程序就“卡死…

2026/8/17 0:00:08 阅读更多 →
LabVIEW异步调用实战:解决界面卡顿与并行处理难题

LabVIEW异步调用实战:解决界面卡顿与并行处理难题

1. 项目概述:为什么异步调用是LabVIEW进阶的必经之路如果你在LabVIEW里写过稍微复杂点的程序,尤其是涉及到界面响应、多任务并行或者硬件IO等待,大概率会遇到一个头疼的问题:程序“卡”住了。前面板点不动,进度条不更新…

2026/8/17 0:00:08 阅读更多 →
飞书局域网文件传输实战:3种方案实现高速点对点传输

飞书局域网文件传输实战:3种方案实现高速点对点传输

1. 项目概述:为什么要在局域网内用飞书传文件? 飞书作为一款主流的协同办公套件,其核心功能是围绕云端协作设计的。无论是文档、表格还是文件,通常的分享逻辑都是“上传到云端 -> 生成链接 -> 分享给同事”。这个流程在互联…

2026/8/17 0:00:08 阅读更多 →

周新闻

基于阿里云与通义千问(Qwen)构建AI应用:从模型调用到生产部署的完整实践指南

基于阿里云与通义千问(Qwen)构建AI应用:从模型调用到生产部署的完整实践指南

如果你是一名开发者,最近可能已经感受到了AI大模型正在从“玩具”变成“生产力工具”的强烈信号。从代码补全到智能Agent,从本地部署到云端API,我们正处在一个技术栈快速重构的节点。然而,面对层出不穷的模型、框架和工具&#xf…

2026/8/16 0:00:54 阅读更多 →
工业通信系统底层逻辑:04 反射——高频能量撞墙之后会发生什么?

工业通信系统底层逻辑:04 反射——高频能量撞墙之后会发生什么?

第四篇:反射——高频能量撞墙之后会发生什么? —— 你以为信号已经过去了,其实它正在回来打你 老Q的现场笔记 第五季,我们正式进入工业神经系统层。这里不再是单个设备的战斗,而是整个工厂“经脉”层面的秩序之战。从这一篇开始,你将第一次看清:看似简单的信号传播,背…

2026/8/16 0:00:55 阅读更多 →
【文章复现】非线性值迭代自适应动态规划(ADP):离散时间非线性系统的策略迭代自适应动态规划算法研究附Matlab代码

【文章复现】非线性值迭代自适应动态规划(ADP):离散时间非线性系统的策略迭代自适应动态规划算法研究附Matlab代码

✅作者简介:热爱科研的Matlab仿真开发者,擅长毕业设计辅导、数学建模、数据处理、建模仿真、程序设计、完整代码获取、论文复现及科研仿真。🍎 往期回顾关注个人主页:Matlab科研工作室👇 关注我领取海量matlab电子书和…

2026/8/16 0:03:55 阅读更多 →

月新闻

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南 【免费下载链接】BaiduNetdiskPlugin-macOS For macOS.百度网盘 破解SVIP、下载速度限制~ 项目地址: https://gitcode.com/gh_mirrors/ba/BaiduNetdiskPlugin-macOS 还在为百度网盘macOS版的龟速下…

2026/8/16 6:00:23 阅读更多 →
终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换 【免费下载链接】ncmdump 项目地址: https://gitcode.com/gh_mirrors/ncmd/ncmdump 还在为网易云音乐下载的NCM格式文件无法在其他播放器播放而烦恼吗?ncmdump解密工具帮你轻松解决这个困…

2026/8/16 6:00:24 阅读更多 →
HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

AgentCard 智能体卡片:为英语学习 App 打造桌面级学习助手适用平台:HarmonyOS 7.0 (API 26 Beta)一、引言 HarmonyOS 7.0(API 26 Beta)新增了 AgentCard 智能体卡片能力,这是继 HMAF(鸿蒙智能体框架&#x…

2026/8/16 6:00:27 阅读更多 →