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

相关推荐
不像程序员的程序媛1 小时前
检测网络的命令mtr详解
网络
天启HTTP1 小时前
爬虫防封核心原理:IP轮换机制与风控规避逻辑
linux·服务器·网络·爬虫·tcp/ip
运维行者_1 小时前
网络性能监控怎么做?从自动发现到根因分析的4个环节
运维·服务器·网络·人工智能·支持向量机
hz567894 小时前
涉密视频会议设备配置指南:终端、音视频采集与配套设施选型
服务器·网络·数据库·安全·实时音视频·信息与通信·智能硬件
优橙教育4 小时前
零基础学AI应用开发要多久?3个月能到什么水平
服务器·开发语言·网络·php
AIgorithmGEEK4 小时前
[Linux]从手写报头到内核套路:序列化、反序列化与自定义协议全链路
linux·运维·服务器·网络·序列化·反序列化
物联网软硬件开发-轨物科技8 小时前
【轨物洞见】什么是产品碳足迹(PCF)?ISO 14067 计算方法与应用场景深度解读
大数据·网络·人工智能
姜鱼问生11 小时前
docker exec 排查容器问题:从日志到进程
运维·网络·数据库·docker·容器
qq_5434478211 小时前
DNS解析怎么排查?故障处理与运维实用手册
运维·服务器·网络·php