【Linux网络·加餐】frp内网穿透
《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 穿透逻辑
- 内网 frpc 主动与公网云服务器 frps 建立永久 TCP 长连接;
- frps 接收外网访问流量,通过已建立的长连接转发至 frpc;
- frpc 将流量转发至本机本地服务端口(SSH 22 / Nginx 80);
- 服务响应沿原链路原路返回外网访问端。
2.1.3 拓扑分层定义
- 服务端(frps):部署公网云服务器,对外提供中转通信端口,映射内网服务暴露端口;
- 客户端(frpc):部署内网 Linux 设备,主动连接 frps,绑定本地服务;
- 访问端:任意外网设备(Xshell、浏览器),访问云服务器映射端口。
2.2 实验硬件 & 软件环境清单
2.2.1 硬件设备
- 公网云服务器(任意 Linux 发行版):运行 frps;
- Windows 宿主机 + 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 架构;
- 云服务器、Ubuntu 虚拟机均选用:
- 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_amd643.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/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/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 = 88883.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审计关键概念区分(文档易混淆点):
serverPort=8888:frpc 与 frps 通信通道端口,仅客户端连接使用,外网用户不访问;remotePort:外网用户访问端口,一个代理对应一个独立端口。
3.3.3 frpc 启动 & 后台守护命令
前台测试:
./frpc-c./frpc.toml后台常驻:
nohup./frpc-c./frpc.toml&>/dev/null&3.3.4 虚拟机本地服务前置准备
- SSH 服务 sshd(Ubuntu 默认预装)
# 校验22端口监听sudonetstat-nltp|grepsshd# 未安装则执行sudoaptinstallopenssh-server- Nginx 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:云服务器公网 IP
8.137.19.140 - 端口:
8081(frpc 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 命令识别失败,需重命名删除空格。
- 虚拟机网络模式选择桥接模式容易获取局域网冲突 IP,NAT 模式为实验最优,宿主机与虚拟机双向互通。
- 后台进程丢失问题直接前台运行 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们,本文的内容到这里就全部结束了,艾莉丝在这里再次感谢您的阅读!
|
结语:希望对学习Linux相关内容的uu有所帮助,不要忘记给博主“一键四连”哦!
往期回顾:
【Linux网络·加餐】frp内网穿透结构化 - 手写部署并测试内网穿透
🗡博主在这里放了一只小狗,大家看完了摸摸小狗放松一下吧!🗡 ૮₍ ˶ ˊ ᴥ ˋ˶₎ა
