内网服务对外访问: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 - 博客园

相关推荐
CHANG_THE_WORLD4 小时前
TCP 三次握手彻底解析:SYN、ACK、SEQ、确认号与状态迁移
网络·网络协议·tcp/ip
DLYSB_5 小时前
基于 HTTP API 与 Modbus 协议的多源监控声光语音联动告警系统设计与实现
网络·网络协议·http·报警灯
Bobolink_6 小时前
手机端和电脑端的网络环境配置有什么不同?
网络·智能手机·电脑·网络环境
星恒讯工业路由器7 小时前
三大工业以太网协议选型对比
网络·物联网·ethercat·profinet·ethernet/ip·工业以太网协议
春卷同学7 小时前
HarmonyOS掌上记账APP开发实践第25篇:Image 组件高级用法 — 资源引用、网络图片与首字符占位方案
网络·华为·harmonyos
mounter6257 小时前
从内存隔离到运行时防线:透视 Linux 内核安全强化的博弈与演进
linux·网络·安全·linux kernel·kernel
Bug退散师9 小时前
多路IO复用[select版TCP服务器与poll版TCP服务器]与常用网络编程函数详解
linux·服务器·c语言·网络·驱动开发·tcp/ip
Acrellea10 小时前
固态变压器(SST)热管理破局:安科瑞交直流专属测温方案护航无人值守运维
运维·网络
振浩微433射频芯片11 小时前
5个IO控制20个LED?查理复用实战拆解
网络·单片机·物联网·学习·智能家居
rcms1527026921811 小时前
IS200TREAH2A 终端板
网络