尧图网站建设 尧图网络
  • 首页
  • 关于我们
  • 服务项目
  • 案例展示
  • 建站流程
  • 资讯中心
  • 联系我们
首页/资讯中心/详情

【Linux网络·加餐】frp内网穿透

【Linux网络·加餐】frp内网穿透
📅 发布时间:2026/7/23 4:56:59


🎬 个人主页:艾莉丝努力练剑

❄专栏传送门:《C语言》《数据结构与算法》《C/C++干货分享&学习过程记录》
《Linux操作系统编程详解》《笔试/面试常见算法:从基础到进阶》《Python干货分享》
⭐️为天地立心,为生民立命,为往圣继绝学,为万世开太平

🎬 艾莉丝的简介:


文章目录

  • 1 ~> 整体实验拓扑
  • 2 ~> 模块 1:frp 基础预备工作
    • 2.1 内网穿透底层原理
      • 2.1.1 NAT 核心痛点
      • 2.1.2 frp 穿透逻辑
      • 2.1.3 拓扑分层定义
    • 2.2 实验硬件 & 软件环境清单
      • 2.2.1 硬件设备
      • 2.2.2 网络配置要求(审计修正:虚拟机网络模式最优解)
      • 2.2.3 frp 软件获取规范
      • 2.2.4 frp 压缩包目录文件说明
  • 3 ~> 模块 2:frp 部署环境搭建(完整实操流程)
    • 3.1 文件传输:Windows → Linux 两种方案
      • 3.1.1 方案 1:Xshell rz 上传(云服务器专用)
      • 3.1.2 方案 2:Windows CMD scp 直传虚拟机(文档重点方案)
    • 3.2 云服务器 frps 配置与启动
      • 3.2.1 frps.toml 最简配置
      • 3.2.2 frps 启动命令(强制 - c 指定配置文件,易错审计点)
      • 3.2.3 端口监听校验
    • 3.3 内网虚拟机 frpc 配置(多代理支持)
      • 3.3.1 frpc.toml 全局基础配置
      • 3.3.2 TCP 代理配置语法(`[[proxies]] `固定数组块,支持多服务叠加)
        • 代理 1:SSH 服务映射(本地 22 端口 → 云 8081 端口)
        • 代理 2:Nginx Web 服务映射(本地 80 端口 → 云 8082 端口)
      • 3.3.3 frpc 启动 & 后台守护命令
      • 3.3.4 虚拟机本地服务前置准备
  • 4 ~> 模块 3:两大服务远程穿透实测验证
    • 4.1 场景 1:外网 Xshell 远程 SSH 登录内网虚拟机
      • 4.1.1 访问参数
      • 4.1.2 验证现象
    • 4.2 场景 2:外网浏览器访问内网 Nginx 网页
      • 4.2.1 访问地址
      • 4.2.2 验证逻辑
  • 5 ~> 模块 4:纠错点总结
  • 6 ~> 模块 5:思维导图
  • 7 ~> 模块 6 实验总结核心结论
  • 结尾

1 ~> 整体实验拓扑

整体实验拓扑:公网云服务器 (frps 服务端) + 本地 Ubuntu 虚拟机 (frpc 客户端),实现 SSH、Nginx 两类 TCP 服务外网暴露。


2 ~> 模块 1:frp 基础预备工作

2.1 内网穿透底层原理

2.1.1 NAT 核心痛点

家庭 / 校园 / 办公设备处于局域网,运营商路由器做 NAT 地址转换,公网无法主动发起连接访问内网设备;内网设备可主动向外建立 TCP 长连接。

2.1.2 frp 穿透逻辑

  1. 内网 frpc 主动与公网云服务器 frps 建立永久 TCP 长连接;
  2. frps 接收外网访问流量,通过已建立的长连接转发至 frpc;
  3. frpc 将流量转发至本机本地服务端口(SSH 22 / Nginx 80);
  4. 服务响应沿原链路原路返回外网访问端。

2.1.3 拓扑分层定义

  • 服务端(frps):部署公网云服务器,对外提供中转通信端口,映射内网服务暴露端口;
  • 客户端(frpc):部署内网 Linux 设备,主动连接 frps,绑定本地服务;
  • 访问端:任意外网设备(Xshell、浏览器),访问云服务器映射端口。

2.2 实验硬件 & 软件环境清单

2.2.1 硬件设备

  1. 公网云服务器(任意 Linux 发行版):运行 frps;
  2. Windows 宿主机 + VMware Workstation 17 Player(免费版);
  3. 内网虚拟机:Ubuntu 22.04 AMD64(运行 frpc、sshd、nginx)。

2.2.2 网络配置要求(审计修正:虚拟机网络模式最优解)

  • 虚拟机网卡:NAT 模式,Windows 虚拟网卡充当小型路由器,宿主机与虚拟机双向互通、均可联网;
  • 连通校验命令:
# 虚拟机测试外网连通ping-c1www.baidu.com# Windows CMD ping虚拟机IPping192.168.204.128# 虚拟机ping Windows虚拟网关IPping192.168.100.18

2.2.3 frp 软件获取规范

  1. 版本:v0.58.1,官方 Release 地址:https://github.com/fatedier/frp/releases/tag/v0.58.1
  2. 安装包选择(重点易错点):
    1. 云服务器、Ubuntu 虚拟机均选用:frp_0.58.1_linux_amd64.tar.gz
    2. 禁止 arm 版本,区分 CPU 架构;
  3. Github 加速工具:Watt Toolkit,开启 Github 加速解决下载超时。

2.2.4 frp 压缩包目录文件说明

解压后固定二进制文件:

  • frps:服务端可执行程序(云服务器使用)
  • frps.toml:frps 配套配置文件
  • frpc:客户端可执行程序(内网虚拟机使用)
  • frpc.toml:frpc 配套配置文件
  • LICENSE:开源协议文件,无需修改

3 ~> 模块 2:frp 部署环境搭建(完整实操流程)

3.1 文件传输:Windows → Linux 两种方案

3.1.1 方案 1:Xshell rz 上传(云服务器专用)

# 云服务器创建frp目录mkdir~/frp&&cd~/frp# 唤起文件上传弹窗rz-E# 解压frp安装包tarxzf frp_0.58.1_linux_amd64.tar.gzcdfrp_0.58.1_linux_amd64

3.1.2 方案 2:Windows CMD scp 直传虚拟机(文档重点方案)

# Windows桌面目录执行,格式 scp 本地包 用户名@虚拟机IP:目标目录 scp frp_0.58.1_linux_amd64.tar.gz whb@192.168.204.128:/home/whb/frp

3.2 云服务器 frps 配置与启动

3.2.1 frps.toml 最简配置

# frps服务端监听端口:frpc客户端连接专用端口 bindPort = 8888

3.2.2 frps 启动命令(强制 - c 指定配置文件,易错审计点)

  1. 错误启动方式:./frps,会加载默认 7000 端口,忽略自定义 toml;
  2. 标准前台启动:
./frps-c./frps.toml
  1. 后台守护进程(生产推荐,无日志输出):
nohup./frps-c./frps.toml&>/dev/null&
  • nohup:脱离终端持续运行;
  • &> /dev/null:标准输出 + 错误输出全部丢弃(黑洞设备);
  • 末尾&:放入后台作业。

3.2.3 端口监听校验

# 查看frps监听端口,需sudo完整显示进程名sudonetstat-nltp

预期输出:tcp6 0 0 :::8888 LISTEN ./frps

3.3 内网虚拟机 frpc 配置(多代理支持)

3.3.1 frpc.toml 全局基础配置

# 公网云服务器公网IP serverAddr = "8.137.19.140" # frps服务端bindPort,必须和云服务器配置一致 serverPort = 8888

3.3.2 TCP 代理配置语法([[proxies]]固定数组块,支持多服务叠加)

代理 1:SSH 服务映射(本地 22 端口 → 云 8081 端口)
[[proxies]] name = "ssh-service" # 代理唯一标识,自定义 type = "tcp" # 流量类型:TCP转发 localIP = "127.0.0.1" # 本地服务监听地址 localPort = 22 # 内网sshd端口 remotePort = 8081 # 云服务器对外暴露访问端口
代理 2:Nginx Web 服务映射(本地 80 端口 → 云 8082 端口)
[[proxies]] name = "http-service" type = "tcp" localIP = "127.0.0.1" localPort = 80 remotePort = 8082

审计关键概念区分(文档易混淆点):

  1. serverPort=8888:frpc 与 frps 通信通道端口,仅客户端连接使用,外网用户不访问;
  2. remotePort:外网用户访问端口,一个代理对应一个独立端口。

3.3.3 frpc 启动 & 后台守护命令

前台测试:

./frpc-c./frpc.toml

后台常驻:

nohup./frpc-c./frpc.toml&>/dev/null&

3.3.4 虚拟机本地服务前置准备

  1. SSH 服务 sshd(Ubuntu 默认预装)
# 校验22端口监听sudonetstat-nltp|grepsshd# 未安装则执行sudoaptinstallopenssh-server
  1. Nginx Web 服务部署
# 安装nginxsudoaptinstall-ynginx# 启动服务sudonginx# 校验80端口sudonetstat-nltp|grepnginx# 修改默认首页(验证穿透效果)sudovim/var/www/html/index.nginx-debian.html

4 ~> 模块 3:两大服务远程穿透实测验证

4.1 场景 1:外网 Xshell 远程 SSH 登录内网虚拟机

4.1.1 访问参数

  • 主机 IP:云服务器公网 IP8.137.19.140
  • 端口:8081(frpc ssh 代理 remotePort)
  • 登录账号:虚拟机本地用户名 whb + 虚拟机密码

4.1.2 验证现象

  1. 登录成功后执行ls ~/Desktop,在远端可查看、创建、删除虚拟机桌面文件;
  2. 虚拟机本地桌面同步生成文件,证明流量完整穿透至内网。

4.2 场景 2:外网浏览器访问内网 Nginx 网页

4.2.1 访问地址

http://8.137.19.140:8082

4.2.2 验证逻辑

  1. 修改虚拟机本地 nginx 首页 HTML,添加自定义文本;
  2. 外网浏览器刷新页面,展示修改后的内容;
  3. 关闭虚拟机 frpc 进程,网页直接无法访问,链路断开验证。

5 ~> 模块 4:纠错点总结

  1. 配置文件启动参数错误
    1. 错误:./frps/./frpc,不携带-c,加载默认配置;
    2. 标准:必须-c ./xxx.toml指定自定义配置文件。
  2. 端口概念混淆(文档核心模糊点)
    1. serverPort (8888):客户端与服务端通信隧道端口;
    2. remotePort (8081/8082):外网用户访问业务端口,二者无关联。
  3. 文件传输文件名空格故障Windows 桌面安装包名称含空格时,scp 命令识别失败,需重命名删除空格。
  4. 虚拟机网络模式选择桥接模式容易获取局域网冲突 IP,NAT 模式为实验最优,宿主机与虚拟机双向互通。
  5. 后台进程丢失问题直接前台运行 frp,关闭终端会终止进程;生产必须搭配nohup + &后台常驻。
  6. 云服务器防火墙放行实验遗漏关键前置:云服务器安全组 / 防火墙需放行 8888、8081、8082 全部端口,否则外网无法连通。

6 ~> 模块 5:思维导图

外网访问端(Xshell/浏览器)↓ TCP请求 云IP:remotePort(8081/8082)公网云服务器 frps(监听8888+业务remotePort)↓ 预建立长连接隧道(8888通道) 内网虚拟机 frpc(持续保活连接) ↓ 本地端口转发 虚拟机本地服务 ├─ sshd:22端口 └─ nginx:80端口 服务响应原路反向回传至外网访问端

7 ~> 模块 6 实验总结核心结论

  1. frp 依靠内网设备主动建立长连接,突破 NAT 单向访问限制,实现内网服务公网暴露;
  2. 单 frpc 客户端支持多组[[proxies]]配置,同时转发 SSH、Web 等多个 TCP 服务;
  3. 区分隧道通信端口 (serverPort) 与业务暴露端口 (remotePort) 是配置不报错的核心;
  4. nohup &方案实现 frp 服务后台守护,脱离终端长期运行;
  5. 所有访问流量中转节点为云服务器,实际业务运行在内网本地设备。

结尾

uu们,本文的内容到这里就全部结束了,艾莉丝在这里再次感谢您的阅读!

艾莉丝努力练剑

C/C++ & Linux 底层探索者 | 一个正在努力练剑的技术博主

👀【关注】跟随我一起深耕技术领域,见证每一次成长。
❤️【点赞】让优质内容被更多人看见,让知识传递更有力量。
⭐【收藏】把核心知识点存好,在需要时随时查、随时用。
💬【评论】分享你的经验或疑问,评论区一起交流避坑!

不要忘记给博主“一键四连”哦!

“今日练剑达成!”

“技术之路难免有困惑,但同行的人会让前进更有方向。”

结语:希望对学习Linux相关内容的uu有所帮助,不要忘记给博主“一键四连”哦!

往期回顾:

【Linux网络·加餐】frp内网穿透结构化 - 手写部署并测试内网穿透

🗡博主在这里放了一只小狗,大家看完了摸摸小狗放松一下吧!🗡
૮₍ ˶ ˊ ᴥ ˋ˶₎ა

相关新闻

  • 还在为论文头秃?这5个AI论文写作工具让你效率翻倍!
  • Tiva TM4C123x ROM API实战:CRC、Flash与FPU模块深度解析与应用
  • 深入解析Tiva™ TM4C1294 GPIO寄存器:从底层原理到高级应用

最新新闻

  • 金融级C++低延迟解码:从缓存优化到硬件榨取的实战指南
  • 权威通告:卡地亚广州2026年7月最新服务网点地址与热线电话,售后无忧 - 卡地亚服务中心
  • 建站免费SEO工具推荐:外贸独立站零预算,3款谷歌查词神器
  • DSP算法优化实战:四种前景背景检测方法在TMS320C64x+上的性能对比与实现
  • C++ weak_ptr深度解析:从观测模式到实战应用
  • 企业电话不显示公司名:从号码材料到终端证据的五层排障链

日新闻

  • 亨得利盐城维修点在哪里?手表维修保养地址指南**公示(2026年7月最新) - 亨得利官方
  • 提升.NET API安全性:Boxed.AspNetCore.Swagger认证授权最佳实践
  • 帝舵佛山**网点地址更新:2026年7月售后热线电话与服务客户指南 - 帝舵中国官方服务中心

周新闻

  • SaaS软件行业GEO实践:AI搜索时代的品牌可见性与获客新路径
  • 什么是PCTFE?医药高端包装的“防潮王牌“材料
  • 【JVM调优实战】16-可视化利器-JConsole-VisualVM-JMC

月新闻

  • 2026年6月公司网站搭建最新热门渠道测评:四大低成本/零代码平台对比+避坑
  • 【Linux】Linux arm 编译QT程序,出现expected “}“报错
  • 【MATLAB例程】四基站二维AOA定位与距离辅助增强对比仿真。基于角度观测和测距修正的固定目标平面定位精度分析

关于尧图

  • 公司简介
  • 团队介绍
  • 企业文化
  • 荣誉资质

服务项目

  • 定制开发
  • 电商建站
  • UI 设计
  • 运维服务

快速链接

  • 案例展示
  • 建站流程
  • 常见问题
  • 资讯中心

联系方式

  • 📍北京市朝阳区互联网产业园 A 座 10 层
  • 📞400-888-8888
  • ✉️contact@rkmt.cn
  • 🕐周一至周日 9:00-21:00

© 2024 北京尧图网络科技有限公司 版权所有 | 京 ICP 备 XXXXXXXX 号