个人主页艾莉丝努力练剑❄专栏传送门《C语言》《数据结构与算法》《C/C干货分享学习过程记录》《Linux操作系统编程详解》《笔试/面试常见算法从基础到进阶》《Python干货分享》⭐️为天地立心为生民立命为往圣继绝学为万世开太平 艾莉丝的简介文章目录1 ~ 整体实验拓扑2 ~ 模块 1frp 基础预备工作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 ~ 模块 2frp 部署环境搭建完整实操流程3.1 文件传输Windows → Linux 两种方案3.1.1 方案 1Xshell rz 上传云服务器专用3.1.2 方案 2Windows 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]] 固定数组块支持多服务叠加代理 1SSH 服务映射本地 22 端口 → 云 8081 端口代理 2Nginx 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 ~ 模块 1frp 基础预备工作2.1 内网穿透底层原理2.1.1 NAT 核心痛点家庭 / 校园 / 办公设备处于局域网运营商路由器做 NAT 地址转换公网无法主动发起连接访问内网设备内网设备可主动向外建立 TCP 长连接。2.1.2 frp 穿透逻辑内网 frpc 主动与公网云服务器 frps 建立永久 TCP 长连接frps 接收外网访问流量通过已建立的长连接转发至 frpcfrpc 将流量转发至本机本地服务端口SSH 22 / Nginx 80服务响应沿原链路原路返回外网访问端。2.1.3 拓扑分层定义服务端frps部署公网云服务器对外提供中转通信端口映射内网服务暴露端口客户端frpc部署内网 Linux 设备主动连接 frps绑定本地服务访问端任意外网设备Xshell、浏览器访问云服务器映射端口。2.2 实验硬件 软件环境清单2.2.1 硬件设备公网云服务器任意 Linux 发行版运行 frpsWindows 宿主机 VMware Workstation 17 Player免费版内网虚拟机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.182.2.3 frp 软件获取规范版本v0.58.1官方 Release 地址https://github.com/fatedier/frp/releases/tag/v0.58.1安装包选择重点易错点云服务器、Ubuntu 虚拟机均选用frp_0.58.1_linux_amd64.tar.gz禁止 arm 版本区分 CPU 架构Github 加速工具Watt Toolkit开启 Github 加速解决下载超时。2.2.4 frp 压缩包目录文件说明解压后固定二进制文件frps服务端可执行程序云服务器使用frps.tomlfrps 配套配置文件frpc客户端可执行程序内网虚拟机使用frpc.tomlfrpc 配套配置文件LICENSE开源协议文件无需修改3 ~ 模块 2frp 部署环境搭建完整实操流程3.1 文件传输Windows → Linux 两种方案3.1.1 方案 1Xshell rz 上传云服务器专用# 云服务器创建frp目录mkdir~/frpcd~/frp# 唤起文件上传弹窗rz-E# 解压frp安装包tarxzf frp_0.58.1_linux_amd64.tar.gzcdfrp_0.58.1_linux_amd643.1.2 方案 2Windows CMD scp 直传虚拟机文档重点方案# Windows桌面目录执行格式 scp 本地包 用户名虚拟机IP:目标目录 scp frp_0.58.1_linux_amd64.tar.gz whb192.168.204.128:/home/whb/frp3.2 云服务器 frps 配置与启动3.2.1 frps.toml 最简配置# frps服务端监听端口frpc客户端连接专用端口 bindPort 88883.2.2 frps 启动命令强制 - c 指定配置文件易错审计点错误启动方式./frps会加载默认 7000 端口忽略自定义 toml标准前台启动./frps-c./frps.toml后台守护进程生产推荐无日志输出nohup./frps-c./frps.toml/dev/nullnohup脱离终端持续运行 /dev/null标准输出 错误输出全部丢弃黑洞设备末尾放入后台作业。3.2.3 端口监听校验# 查看frps监听端口需sudo完整显示进程名sudonetstat-nltp预期输出tcp6 0 0 :::8888 LISTEN ./frps3.3 内网虚拟机 frpc 配置多代理支持3.3.1 frpc.toml 全局基础配置# 公网云服务器公网IP serverAddr 8.137.19.140 # frps服务端bindPort必须和云服务器配置一致 serverPort 88883.3.2 TCP 代理配置语法[[proxies]]固定数组块支持多服务叠加代理 1SSH 服务映射本地 22 端口 → 云 8081 端口[[proxies]] name ssh-service # 代理唯一标识自定义 type tcp # 流量类型TCP转发 localIP 127.0.0.1 # 本地服务监听地址 localPort 22 # 内网sshd端口 remotePort 8081 # 云服务器对外暴露访问端口代理 2Nginx Web 服务映射本地 80 端口 → 云 8082 端口[[proxies]] name http-service type tcp localIP 127.0.0.1 localPort 80 remotePort 8082审计关键概念区分文档易混淆点serverPort8888frpc 与 frps 通信通道端口仅客户端连接使用外网用户不访问remotePort外网用户访问端口一个代理对应一个独立端口。3.3.3 frpc 启动 后台守护命令前台测试./frpc-c./frpc.toml后台常驻nohup./frpc-c./frpc.toml/dev/null3.3.4 虚拟机本地服务前置准备SSH 服务 sshdUbuntu 默认预装# 校验22端口监听sudonetstat-nltp|grepsshd# 未安装则执行sudoaptinstallopenssh-serverNginx Web 服务部署# 安装nginxsudoaptinstall-ynginx# 启动服务sudonginx# 校验80端口sudonetstat-nltp|grepnginx# 修改默认首页验证穿透效果sudovim/var/www/html/index.nginx-debian.html4 ~ 模块 3两大服务远程穿透实测验证4.1 场景 1外网 Xshell 远程 SSH 登录内网虚拟机4.1.1 访问参数主机 IP云服务器公网 IP8.137.19.140端口8081frpc ssh 代理 remotePort登录账号虚拟机本地用户名 whb 虚拟机密码4.1.2 验证现象登录成功后执行ls ~/Desktop在远端可查看、创建、删除虚拟机桌面文件虚拟机本地桌面同步生成文件证明流量完整穿透至内网。4.2 场景 2外网浏览器访问内网 Nginx 网页4.2.1 访问地址http://8.137.19.140:80824.2.2 验证逻辑修改虚拟机本地 nginx 首页 HTML添加自定义文本外网浏览器刷新页面展示修改后的内容关闭虚拟机 frpc 进程网页直接无法访问链路断开验证。5 ~ 模块 4纠错点总结配置文件启动参数错误错误./frps/./frpc不携带-c加载默认配置标准必须-c ./xxx.toml指定自定义配置文件。端口概念混淆文档核心模糊点serverPort (8888)客户端与服务端通信隧道端口remotePort (8081/8082)外网用户访问业务端口二者无关联。文件传输文件名空格故障Windows 桌面安装包名称含空格时scp 命令识别失败需重命名删除空格。虚拟机网络模式选择桥接模式容易获取局域网冲突 IPNAT 模式为实验最优宿主机与虚拟机双向互通。后台进程丢失问题直接前台运行 frp关闭终端会终止进程生产必须搭配nohup 后台常驻。云服务器防火墙放行实验遗漏关键前置云服务器安全组 / 防火墙需放行 8888、8081、8082 全部端口否则外网无法连通。6 ~ 模块 5思维导图外网访问端(Xshell/浏览器)↓ TCP请求 云IP:remotePort(8081/8082)公网云服务器 frps(监听8888业务remotePort)↓ 预建立长连接隧道8888通道 内网虚拟机 frpc持续保活连接 ↓ 本地端口转发 虚拟机本地服务 ├─ sshd:22端口 └─ nginx:80端口 服务响应原路反向回传至外网访问端7 ~ 模块 6 实验总结核心结论frp 依靠内网设备主动建立长连接突破 NAT 单向访问限制实现内网服务公网暴露单 frpc 客户端支持多组[[proxies]]配置同时转发 SSH、Web 等多个 TCP 服务区分隧道通信端口 (serverPort) 与业务暴露端口 (remotePort) 是配置不报错的核心nohup 方案实现 frp 服务后台守护脱离终端长期运行所有访问流量中转节点为云服务器实际业务运行在内网本地设备。结尾uu们本文的内容到这里就全部结束了艾莉丝在这里再次感谢您的阅读艾莉丝努力练剑C/C Linux 底层探索者 | 一个正在努力练剑的技术博主【关注】跟随我一起深耕技术领域见证每一次成长。❤️【点赞】让优质内容被更多人看见让知识传递更有力量。⭐【收藏】把核心知识点存好在需要时随时查、随时用。【评论】分享你的经验或疑问评论区一起交流避坑不要忘记给博主“一键四连”哦“今日练剑达成”“技术之路难免有困惑但同行的人会让前进更有方向。”结语希望对学习Linux相关内容的uu有所帮助不要忘记给博主“一键四连”哦往期回顾【Linux网络·加餐】frp内网穿透结构化 - 手写部署并测试内网穿透博主在这里放了一只小狗大家看完了摸摸小狗放松一下吧૮₍ ˶ ˊ ᴥ ˋ˶₎ა