内网服务对外访问:frp 内网穿透完整教程

写在前面:

你在内网部署了一个服务(如 Dify),想给外部用户调用:

内网服务地址:http://你的内网IP:8080/v1

你想把这个地址发给外部用户,但对方无法访问

本文介绍以上场景的解决方案。

一、问题说明

1、问题原因

原因 说明
私有 IP 地址 172.27.x.x (你的IP)属于私有内网,仅局域网内部互通,公网外部网络无法直接寻址连接
NAT 网络隔离 内网设备通过 NAT 网络地址转换访问外网,路由单向通行,外网无法主动逆向访问内网主机
防火墙阻隔 即便拥有公网 IP,服务器系统防火墙、云平台安全组若未放行对应端口,仍会阻断外部访问请求

2、IP地址分类

类型 范围 说明
A 类私有 IP 10.0.0.0 ~ 10.255.255.255 适用于大型企业、园区内网
B 类私有 IP 172.16.0.0 ~ 172.31.255.255 适用于中型内网,172.27.x.x 归属此类
C 类私有 IP 192.168.0.0 ~ 192.168.255.255 家庭、小型路由最常用内网网段
公网 IP 除上述私有网段外的其余 IP 全球唯一路由可达,外网可直接访问

3、解决方案对比

方案 适用场景 优点 缺点
端口映射 / NAT 拥有路由器管理权限、具备公网 IP 配置简单、零额外成本、速度稳定 必须运营商分配公网 IP,部分宽带无法获取
云服务器部署 项目正式上线、生产环境使用 稳定性强、带宽可控、运维方便 需要迁移本地服务到云端,有服务器费用成本
frp 内网穿透 开发调试、临时对外提供服务 部署灵活、无需改动本地服务架构 需要自备一台带公网 IP 的服务器做中转
ngrok 本地快速临时测试、演示 开箱即用,无需自备公网服务器 免费版带宽有限、链接随机、稳定性一般
Cloudflare Tunnel 已有域名、长期稳定穿透 完全免费、高稳定性、自带 CDN 需要域名配合配置,新手有一定配置门槛

4、本教程方案:frp 内网穿透

原理图:

工作流程:

  • frps(服务端)在公网服务器监听 7000 端口

  • frpc(客户端)在内网机器连接 frps,建立隧道

  • 外部请求 → 公网服务器 8080 端口 → frp 隧道 → 内网服务 8080 端口

5、环境准备

本教程环境如下图所示:

资源 要求 示例
公网服务器 拥有公网 IP 地址,可被外网直接访问 Ubuntu 22.04
内网机器 本地运行需要对外暴露的业务服务 Windows 内网主机,服务地址:172.27.XX.XX:8080

端口规划:(业务端口根据实际需求修改,本文为8080)

端口 用途 开放位置
7000 frp 服务端与客户端通信端口,用于建立隧道 公网服务器防火墙 / 安全组
8080 业务端口(Dify API),供外部用户访问 公网服务器防火墙 / 安全组

二、公网服务器操作步骤

注意:本教程以 Ubuntu 22.04为例,其他 Linux 发行版类似。

1、安装并启动frps

(1)下载frp

复制代码
cd /opt/software

sudo wget https://github.com/fatedier/frp/releases/download/v0.52.3/frp_0.52.3_linux_amd64.tar.gz

如下图所示为下载进度,使用sudo能够防止权限不足。

复制代码
tar -xzf frp_0.52.3_linux_amd64.tar.gz

cd frp_0.52.3_linux_amd64

(2)创建配置

修改目录所有权:

复制代码
sudo chown -R $USER:$USER /opt/software/frp_0.52.3_linux_amd64

然后创建文件:

复制代码
cat > frps.toml << 'EOF'
bindPort = 7000
EOF

(3)启动frps

输入以下指令启动frps(后台运行):

复制代码
nohup ./frps -c frps.toml > frps.log 2>&1 &

查看是否启动成功:

复制代码
ps aux | grep frps
tail -f frps.log

成功日志显示:I service.go:XXX frps tcp listen on 0.0.0.0:7000

2、开放防火墙端口

检查ufw状态:

复制代码
sudo ufw status

当前不活动 → 端口默认开放,frp 可以直接用。

开放端口:

公网服务器需开放 7000(frp通信端口)和 8080(业务端口)

复制代码
sudo ufw allow 7000/tcp
sudo ufw allow 8080/tcp

3、获取公网IP

复制代码
curl ifconfig.me

记下这个 IP,例如:"123.45.67.89"。

注意:若没有返回,则证明该服务器没有公网IP,frp内网穿透的方法不适用。

三、内网Windows机器操作

1、下载frpc

下载地址:https://github.com/fatedier/frp/releases/download/v0.52.3/frp_0.52.3_windows_amd64.zip

解压到某个目录,例如:E:\frp

文件说明:

文件 说明
frps 服务端程序,仅在公网服务器上运行,负责接收外网请求并转发
frps.toml 服务端配置文件,用于设置通信端口、认证信息等参数
frpc 客户端程序,仅在内网机器上运行,负责连接公网服务器并打通隧道
frpc.toml 客户端配置文件,指定公网服务器地址、端口及本地服务转发规则

2、创建配置文件frpc.toml

注意:是frpc不是frps!!!

复制代码
serverAddr = "服务器公网IP"
serverPort = 7000

[[proxies]]
name = "dify-api"
type = "tcp"
localIP = "Windows系统的IP"
localPort = 8080
remotePort = 8080

3、启动frpc

进入frp目录,在命令行中启动:

复制代码
frpc.exe -c frpc.toml

4、验证测试

(1)公网服务器本地测试

复制代码
curl http://localhost:8080/v1

(2)外部访问测试

任何外部及其都可以测试:

复制代码
curl http://公网服务器IP:8080/v1

或在浏览器输入访问:http://公网服务器IP:8080/v1

欢迎交流!!🌹🌹


参考内容:

Frp内网穿透搭建教学 - Micky233 - 博客园

相关推荐
DianSan_ERP几秒前
WMS接入电商平台自动化履约实战:一张订单从平台到出库的接口时序设计
java·前端·网络·数据库·安全·架构·自动化
数据知道4 分钟前
漏洞挖掘方法论:从 Fuzz 到 0day 的思维框架
网络·安全·web安全·网络安全
智购科技自动售货机工厂22 分钟前
2026自动售货机语音支付模块集成:从声纹识别到支付闭环的工程实践~YH
大数据·服务器·网络·数据库·人工智能
zcmodeltech2 小时前
煤化工沙盘模型控制系统设计与实现:多工段协同联动方案
网络·人工智能·stm32·嵌入式硬件·制造·多分类
qq_401700412 小时前
TCP 粘包问题深度解析:嵌入式网络开发的常见坑与解决方案
服务器·网络·qt·网络协议·tcp/ip
zhao3266857512 小时前
长效静态IP与短效动态IP怎么选?两种适用场景有何区别
大数据·网络·tcp/ip
2601_949499944 小时前
芯瑞科技 DT‑1414完全兼容HFBR‑1414TZ光模块国产化优选方案深度解析(工程师视角)
运维·网络·人工智能·科技·光模块
XUEYUAN52124 小时前
代理日志分析与监控:代理池健康状态巡检与分级告警体系搭建(运维实战)
运维·网络·网络协议·tcp/ip·算法·架构
Fcy6484 小时前
Linux下 Socket编程 —— UDP网络编程
linux·网络·udp
酒神dnspup4 小时前
服务器端口检测怎么做?用 DNSPup 核对开放端口、监听服务与暴露风险
网络·网络协议·http·ssl证书·http状态码·服务器端口