概述
本文来补一补计算机网络基础知识。
内网穿透:NAT Traversal、Intranet Penetration,一种网络技术,让外部能访问内部资源。
通常情况下,内网中的计算机或设备位于防火墙或路由器之后,无法直接被公共网络访问。内网穿透,用于将位于私有网络(内网)中的计算机或设备暴露给公共网络,使得公共网络中的其他计算机或设备能够访问内网中的资源。
主要特点
- 解决NAT限制:主要针对没有公网IP的内网环境,通过技术手段突破NAT(网络地址转换)设备的限制;
- 临时通道:通常用于建立临时的访问通道,不是永久性的网络架构;
- 第三方中转:常依赖第三方中转服务器或点对点连接技术;
- 简单直接:目标是"打通网络",让外部能访问内部。
实现
内网穿透实现方式
端口转发
Port Forwarding,也叫端口映射,最基础、最原始的方法,通常直接在路由器上配置。
原理:在路由器或防火墙上配置规则,将公网IP的特定端口映射到内网某台设备的特定端口。
特点:
- 简单直接:配置相对简单,不需要额外软件
- 性能好:直接转发,没有中间代理的开销
- 风险高:直接将内部服务暴露在公网,缺乏安全防护
- 依赖公网IP:需要路由器有公网IP地址
适用场景:
- 家庭网络中的临时测试
- 对性能要求极高,对安全性要求不高的场景
- 网络环境简单,有固定公网IP
DMZ主机
Demilitarized Zone,端口映射的加强版,但安全性更差。
原理:将内网中的一台设备完全暴露在公网,路由器将所有未明确映射的端口请求都转发给这台设备。
特点:
- 极度危险:相当于将设备直接放在公网上
- 配置简单:一键设置
- 仅用于测试:生产环境绝对不推荐使用
UPnP
Universal Plug and Play,自动端口映射。
一些应用程序(如BT下载、游戏、P2P软件)会自动通过UPnP协议在路由器上创建端口映射。
原理:应用程序自动与路由器通信,请求打开特定端口;路由器自动配置端口映射规则。
特点:
- 自动化:不需要手动配置
- 安全性差:应用程序可能滥用此功能
- 依赖支持:需要路由器和应用程序都支持UPnP
DDNS+端口映射
Dynamic DNS,动态DNS。针对没有固定公网IP的情况。
原理:
- 在DDNS服务商注册域名(如mydomain.ddns.net)
- 在路由器或设备上安装DDNS客户端,自动更新IP地址
- 配置端口映射
特点:
- 解决动态IP问题:适合家庭宽带等动态IP环境
- 仍需要公网IP:只是解决了IP变化的问题
- 安全性同端口映射:没有额外的安全防护
VPN
虚拟私人网络,不是严格意义上的内网穿透,但能达到类似效果。
原理:在外网建立VPN服务器,客户端通过VPN连接到内网,获得内网IP地址
特点:
- 安全性高:加密通信,身份验证
- 配置复杂:需要设置VPN服务器和客户端
- 性能开销:加密解密带来额外开销
- 网络层访问:获得的是完整的网络层访问权限
SSH隧道
SSH Tunneling,利用SSH协议建立加密隧道。
常见方式:
- 本地端口转发:
ssh -L 本地端口:目标主机:目标端口 跳板机 - 远程端口转发:
ssh -R 远程端口:本地主机:本地端口 跳板机 - 动态端口转发:建立SOCKS代理
特点:
- 加密安全:基于SSH的加密
- 灵活:可以转发任意TCP端口
- 需要SSH访问:需要有一台有公网IP的SSH服务器
- 配置复杂:命令行操作,对非技术人员不友好
简单HTTP代理
使用轻量级HTTP代理软件。
常见工具:
- socat:
socat TCP-LISTEN:8080,fork TCP:内网主机:80 - netcat:结合其他工具实现简单转发
- tinyproxy、squid等
特点:
- 极其简单:几行命令即可
- 功能有限:通常只支持HTTP或简单TCP转发
- 无安全特性:没有负载均衡、缓存等高级功能
反向代理
Reverse Proxy,一种代理服务器的部署方式,代表服务器接收客户端的请求,并将这些请求转发给内部的服务器。与正向代理不同,对外隐藏真实服务器,并充当客户端与内部服务器之间的中间人。
原理:反向代理服务器位于用户与目标服务器之间,但是对于用户而言,反向代理服务器就相当于目标服务器,即用户直接访问反向代理服务器就可以获得目标服务器的资源。反向代理提高了内部服务器的安全,加快了对内部服务器的访问速度。
主要特点
- 服务端代理:代理的是服务端,对外隐藏真实服务器信息;
- 安全防护:作为安全屏障,保护后端服务器免受直接攻击;
- 负载均衡:可以将请求分发到多个后端服务器,提高系统性能;
- 缓存加速:可以缓存静态内容,减少后端服务器压力;
- TLS终止:处理SSL/TLS加密解密,减轻后端服务器负担。
应用场景
- 公开服务发布:企业需将内部Web应用、API或门户网站安全地暴露至公网,同时隐藏后端架构细节;
- 负载均衡需求:需要将流量分发到多个后端服务器以提高性能和可靠性;
- 安全防护需求:需要对外隐藏服务器真实IP和架构,提供统一的安全入口;
- SSL/TLS卸载:集中处理加密解密,简化后端服务器配置。
对比
| 手段 | 安全性 | 配置复杂度 | 性能 | 功能丰富度 | 适用场景 |
|---|---|---|---|---|---|
| 端口映射 | 低 | 低 | 高 | 低 | 简单测试、家庭使用 |
| DMZ主机 | 极低 | 极低 | 高 | 低 | 绝对不推荐用于生产 |
| UPnP | 低 | 自动 | 高 | 低 | 特定应用自动配置 |
| DDNS+映射 | 低 | 中 | 高 | 低 | 动态IP环境 |
| VPN | 高 | 高 | 中 | 中 | 需要完整内网访问 |
| SSH隧道 | 高 | 高 | 中 | 中 | 技术人员临时访问 |
| 简单HTTP代理 | 低 | 低 | 中 | 低 | 快速测试 |
| 反向代理 | 高 | 中-高 | 高 | 高 | 生产环境、公开服务 |
FRP
Fast Reverse Proxy缩写,基于Go语言、开源(GitHub,106K Star,15K Fork),支持TCP等多种协议,专注于内网穿透的高性能反向代理工具,内网穿透领域实打实的一哥:
- 功能强大:支持多种协议和高级功能
- 配置灵活:丰富的配置选项满足不同需求
- 性能优秀:高效的连接复用和转发机制
- 安全可靠:完善的安全认证和加密机制
核心特点:
- 高性能:采用TCP连接流式复用,在单个连接间承载更多请求
- 多协议支持:TCP、UDP、HTTP、HTTPS、WebSocket等
- 安全可靠:支持TLS加密、Token认证
- 功能丰富:负载均衡、端口复用、P2P通信、插件系统
- 跨平台:支持Windows、Linux、macOS等主流操作系统
原理:通过反向代理技术,解决内网设备因NAT或防火墙限制而无法直接暴露到公网的问题。
流程:
- 建立连接:内网的frpc主动向公网的frps发起连接(TCP长连接)
- 创建隧道:由于内网防火墙通常允许出站流量,该连接可成功建立,形成一条从客户端到服务端的反向隧道
- 外部访问:外部用户访问frps的公网IP和指定端口(如公网IP:8080)
- 请求转发:frps通过已建立的隧道,将请求转发给对应的frpc
- 代理响应:frpc将请求代理到内网服务(如本地的127.0.0.1:80),获取响应后原路返回给用户
支持多种原生插件:
static_file:静态文件查看http_proxy:HTTP代理socks5:SOCKS5代理unix_domain_socket:Unix域套接字
安全注意事项
- 认证机制
- Token认证:必须配置强密码Token
- TLS加密:启用TLS加密通信
- IP白名单:限制可连接的客户端IP
- 权限控制
- 最小权限原则:只暴露必要的端口和服务
- 定期更新:及时更新FRP版本
- 日志监控:开启日志记录,定期检查异常连接
- 网络隔离
- 防火墙规则:在frps服务器上配置严格的防火墙
- 端口限制:只开放必要的端口
- 速率限制:防止DDoS攻击
两个核心组件:
- frps:公网中转站,部署在有公网IP的服务器上,负责接收外部请求并转发给内网
- frpc:内网连接器,部署在内网设备上,负责连接frps并将内网服务暴露出去
frps
FRP的服务端(Server)组件,运行在具有公网IP的服务器上,相当于中转站。
frps提供Web管理界面(默认端口7500),可查看连接状态、流量统计等。
主要功能
- 监听连接:监听特定端口(默认7000),等待来自内网的frpc连接请求
- 流量转发:一旦连接建立,将外部用户的请求通过隧道转发到内网中的目标服务
- 协议支持:支持TCP、UDP、HTTP、HTTPS等多种协议,提供灵活的连接方式
- 安全管理:提供Token认证、TLS加密等安全机制
- 端口复用:单个端口可代理多个服务,通过不同域名或URL路径区分
部署位置
- 必须有公网IP:云服务器(如阿里云、腾讯云、AWS等)
- 固定IP更佳:动态IP也可以,但需要配合DDNS
- 带宽充足:根据实际流量需求选择合适配置
典型配置示例frps.ini:
ini
[common]
bind_port = 7000 # 服务端监听端口
token = your_token_here # 认证token
vhost_http_port = 80 # HTTP虚拟主机端口
vhost_https_port = 443 # HTTPS虚拟主机端口
dashboard_port = 7500 # 监控面板端口
dashboard_user = admin # 面板用户名
dashboard_pwd = admin # 面板密码
frps支持将请求分发到多个frpc实例,实现负载均衡:
ini
# frps.ini
[common]
bind_port = 7000
# 定义代理组
[group_web]
type = tcp
bind_port = 80
group = web_group # 组名
group_key = group_password # 组密码
注意:客户端一侧,frpc1.ini和frpc2.ini需要配置相同的组名和密码
frpc
FRP的客户端组件,运行在内网中的设备上,相当于"代理客户端"或"连接器"。
主要功能
- 建立连接:主动向公网的frps服务器发起连接,建立加密隧道
- 服务代理:将内网中的服务(如Web服务、SSH、数据库等)通过隧道暴露出去
- 协议适配:支持多种协议,确保内网服务能够被外部访问
- 重连机制:支持断线自动重连,确保服务稳定性
- 心跳检测:保持连接活跃,防止被防火墙断开
部署位置
- 内网设备:家庭NAS、办公室电脑、开发测试服务器
- 无公网IP:处于NAT后面,无法直接从外网访问
- 需要暴露的服务:Web服务、SSH、远程桌面、数据库等
典型配置示例frpc.ini:
ini
[common]
server_addr = x.x.x.x # frps服务器的公网IP
server_port = 7000 # frps服务器的端口
token = your_token_here # 认证token,需与frps一致
[web] # 代理名称,可自定义
type = http # 代理类型
local_ip = 127.0.0.1 # 内网服务的IP
local_port = 8080 # 内网服务的端口
custom_domains = www.yourdomain.com # 自定义域名
# SSH代理
[ssh]
type = tcp
local_ip = 127.0.0.1
local_port = 22
remote_port = 6000 # 在frps上暴露的端口
单个端口可代理多个HTTP服务(即所谓的端口复用):
ini
# frpc.ini
[web1]
type = http
local_port = 8080
custom_domains = web1.yourdomain.com
[web2]
type = http
local_port = 8081
custom_domains = web2.yourdomain.com
P2P通信:流量不经过服务器中转,直接点对点通信,节省带宽:
ini
# frpc.ini
[p2p_ssh]
type = xtcp
sk = abcdefg # 安全密钥
local_ip = 127.0.0.1
local_port = 22
ngrok
官网,开源(GitHub,24.5K Star,4.3K Fork),可惜项目已于24年6月4日归档。
ZeroTier
官网,开源(GitHub,16.8K Star,1.9K Fork)项目,一款不需要公网IP实现内网穿透的工具,一个专门用来建立点对点虚拟专用网(P2P VPN)的工具,提供在线管理界面和全平台客户端,不需要复杂设置,只要安装客户端并加入到自己创建的网络即可。

官方搭建一个行星根服务器叫做地球Earth,唯一且免费,记录所有的路径信息,一般直接用这个即可。设备A能通过ZeroTier唯一地址标识找到需要连接的设备B,流程如下:
- A想要将数据包发送到B,但由于它没有直接路径,因此将其向上发送到R(root,行星根服务器)
- 如果R有直接链接到B,它会转发数据包给B。否则它会继续向上游发送数据包,直到达到行星根(planet)。行星根知道所有节点,如果B在线,最终数据包将到达B
- R还向A发送一个消息,包含有关它如何到达B的提示。同时,将消息发给B,通知B它如何到达A
- A和B获取它们的消息并尝试相互发送测试消息,可能会对NAT或状态防火墙进行穿透。如果这样可以建立直接链路,则不再需要中继
- 如果无法建立直接路径,则通信可以继续中继(速度慢)
此外,还有12个遍布全球的收费根服务器。Earth部署在国外,如果使用免费套餐,连接时的延迟可能会很高。能自己创建根服务器月球Moons,这样就能在大局域网中得到更好的体验。
rathole
基于Rust、安全稳定轻量级(单个可执行文件不到3MB)高性能的开源(GitHub,13.5K Star,755 Fork)内网穿透工具,可让NAT后的设备上的服务通过具有公网IP的服务器暴露在公网上。基准测试里,高并发场景下rathole的带宽比FRP还大,延迟更低。
特性:
- 高性能:具有更高的吞吐量,高并发下更稳定;
- 低资源消耗:内存占用远低于同类工具;
- 安全性:每个服务单独强制鉴权。Server和Client负责各自的配置。使用Noise Protocol可以简单地配置传输加密,而不需要自签证书,支持TLS;
- 热重载:支持配置文件热重载,动态修改端口转发服务;
- 配置:服务器端和客户端各一个TOML文件,写清楚端口映射就行。
支持TCP和UDP,HTTP、SSH、远程桌面全都能穿透。内置加密和认证。
支持热重载,改完配置文件,发个信号就行。
FRP功能更丰富,有Web面板、负载均衡。
frpc-desktop
官网,把FRP客户端管理做成开源(GitHub,6.7K Star,484 Fork)桌面可视化界面,而不是手动编辑frpc.toml文件。
能力:
- 支持多种代理类型和多版本FRP,覆盖常见场景;
- 导入导出配置、批量端口、快速分享等能力很实用;
- 跨平台桌面形态对运维协作友好,门槛低。
可视化工具能降低误操作概率,但网络层问题仍要按链路排查。服务端权限、端口占用、防火墙策略、域名解析这些环节不会自动消失。建议把"可视化配置+标准化排障脚本"一起用,效率会更稳。
Podux
官网,基于浏览器的开源(GitHub,51 Star,3 Fork)frpc可视化管理工具,目标是:一个地方集中管理您所有的客户端、代理和连接,无需再手动编辑配置文件。
特性:
- 多节点管理
- 实时数据大盘
- 网络监控
- 一键开机自启
- 高性能稳定
- 完美适配Docker
- 现代化UI设计
花生壳
ZeroNews
官网,中文名零讯,创新型内网穿透边缘云平台,旨在帮助用户快速解决内网与外网之间的安全、快速访问需求,通过自研高性能zeronews tunnel协议,通过ZeroNews便捷地访问内网应用及资源。
优势:
- 多平台支持:Windows、macOS、Linux、Openwrt、树莓派等x86和ARM系统及设备;
- 开箱即用:支持GUI/CLI配置模式,以简单一致的操作模式管理内网服务网络,无需任何额外开发和开销即可完成部署和接入;
- 访问安全可控:提供对流量的统一入口,内置IP黑白名单、鉴权认证、地址围栏、恶意拦截、TLS等多项安全策略,在网关层统一拦截恶意访问,内网服务无感知且不对公网暴露;
- 云原生治理/可观测性:对企业级内网服务提供如访问日志,监控告警,负载均衡,金丝雀发布,OIDC等云原生治理能力,帮助企业构建安全可靠的内网服务网络。