内网穿透:理论及工具FRP、ngrok、ZeroTier、rathole、frpc-desktop、Podux、ZeroNews

概述

本文来补一补计算机网络基础知识。

内网穿透: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域套接字

安全注意事项

  1. 认证机制
  • Token认证:必须配置强密码Token
  • TLS加密:启用TLS加密通信
  • IP白名单:限制可连接的客户端IP
  1. 权限控制
  • 最小权限原则:只暴露必要的端口和服务
  • 定期更新:及时更新FRP版本
  • 日志监控:开启日志记录,定期检查异常连接
  1. 网络隔离
  • 防火墙规则:在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.inifrpc2.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等云原生治理能力,帮助企业构建安全可靠的内网服务网络。
相关推荐
Irissgwe7 小时前
10、NAT、代理服务、内网穿透
网络·frp·内网穿透·nat·代理服务器·反向代理·正向代理
Dovis(誓平步青云)1 天前
《指标中转站:Pushgateway 如何把监控覆盖到这些原本看不见的角落》
数据库·生成对抗网络·oracle·内网穿透·飞牛nas
袁煦丞 cpolar内网穿透实验室3 天前
MailHog邮件沙盒,本地邮件测试!cpolar内网穿透实验室第797个成功挑战
人工智能·远程工作·内网穿透·cpolar·邮件·安全内网连接·邮件沙盒
袁煦丞 cpolar内网穿透实验室9 天前
不用上传部署,网站即时展示0成本
网站建设·远程工作·内网穿透·cpolar·安全内网连接·即时展示
袁煦丞 cpolar内网穿透实验室10 天前
Remotion让视频创作告别剪按钮——AI生成视频+像素级精准控制!cpolar内网穿透实验室第700个成功挑战
人工智能·音视频·远程工作·内网穿透·cpolar·安全内网连接
王码码20351 个月前
NAS 部署 TDuck 开源问卷系统:从一键搭建到公网访问全教程
开源·内网穿透·nas·问卷系统·tduck
闻道且行之1 个月前
frp+Nginx 内网穿透详细配置教程
运维·网络·nginx·frp·内网穿透
Asurplus2 个月前
【Ngrok】Linux运行内网穿透工具Ngrok
linux·运维·服务器·内网穿透·ngrok
平凡的阳阳2 个月前
千里通Linux盒子搭建FRP全教程:低成本实现内网穿透+代理服务器
linux·frp·内网穿透·代理·socks5·远程ssh