news 2026/5/5 6:41:58

不只是远程桌面:用frp把家里电脑的Web服务、SSH都暴露到公网(Windows实战)

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
不只是远程桌面:用frp把家里电脑的Web服务、SSH都暴露到公网(Windows实战)

Windows下frp内网穿透实战:多服务统一暴露方案

家里那台24小时开机的Windows主机,早就不再是简单的文件存储工具了。从Jellyfin媒体服务器到MySQL测试环境,从Nextcloud私有云到开发用的SSH终端,这些服务长期被困在内网里,每次出门想用都得先连回家里的VPN——直到我发现了frp这个神器。与市面上那些只能映射远程桌面的方案不同,frp能像瑞士军刀一样,把各种协议的服务整齐地暴露到公网。下面就来分享我的实战经验,如何用一份配置文件打通所有家庭服务。

1. 为什么选择frp作为家庭实验室的桥梁

每次在咖啡馆想调取家里的开发环境时,传统的远程桌面方案总让我感到束手束脚——它只能解决图形界面访问,对那些运行在后台的Web服务、数据库和命令行工具毫无办法。直到尝试了frp,才发现内网穿透原来可以如此优雅。

frp的核心优势在于它的协议无关性。不同于专为RDP优化的方案,它能同时处理HTTP、HTTPS、TCP、UDP等多种协议。我的家庭服务器上跑着至少六种不同类型的服务:

  • Web类:Jellyfin媒体中心(8096端口)、Home Assistant智能家居控制台(8123端口)
  • 数据库类:MySQL测试环境(3306端口)、Redis缓存服务(6379端口)
  • 开发工具类:SSH终端(22端口)、VS Code Server(8000端口)

使用frp前,我不得不在路由器上为每个服务单独配置端口转发,既麻烦又危险。现在只需要一个轻量级的frp客户端,所有服务都能通过云服务器安全地暴露出去。更妙的是,frp的流量加密功能让传输过程比裸奔的端口转发安全得多。

2. 基础环境搭建:从零开始配置frp服务端

2.1 云服务器准备

我选择了一台最基础的阿里云ECS(1核2G配置,带宽按量付费),月成本不到50元。关键步骤:

# 在云服务器上创建专用用户 sudo useradd -m frpuser sudo passwd frpuser # 下载最新版frp(以v0.51.3为例) wget https://github.com/fatedier/frp/releases/download/v0.51.3/frp_0.51.3_linux_amd64.tar.gz tar -zxvf frp_0.51.3_linux_amd64.tar.gz

服务端配置文件frps.ini的黄金组合:

[common] bind_port = 7000 vhost_http_port = 7080 vhost_https_port = 7443 dashboard_port = 7500 dashboard_user = admin dashboard_pwd = YourSecurePassword token = YourSuperSecretToken

这个配置实现了:

  • 7000端口:客户端连接通道
  • 7080/7443端口:分别处理HTTP/HTTPS流量
  • 7500端口:内置监控面板

安全提示:务必修改默认的dashboard凭证和token,我见过太多人因为使用admin/admin被入侵的案例

2.2 防火墙与安全组配置

云服务商的安全组需要放行以下端口:

端口协议用途建议访问控制
7000TCP客户端连接仅限家庭IP
7080TCPHTTP服务全网开放
7443TCPHTTPS服务全网开放
7500TCP监控面板仅管理IP

Windows客户端的防火墙也需要相应调整:

New-NetFirewallRule -DisplayName "FRP Client" -Direction Inbound -Program "C:\frp\frpc.exe" -Action Allow

3. 多服务配置实战:一个客户端搞定所有

3.1 基础客户端配置模板

frpc.ini的基础结构应该像乐高积木一样模块化:

[common] server_addr = your.server.ip server_port = 7000 token = YourSuperSecretToken # 以下是各个服务的独立配置块 [service_ssh] type = tcp local_ip = 127.0.0.1 local_port = 22 remote_port = 7022 [service_jellyfin] type = http local_port = 8096 custom_domains = media.yourdomain.com [service_mysql] type = tcp local_port = 3306 remote_port = 7330

3.2 不同类型服务的配置技巧

Web服务优化方案

对于Jellyfin这类媒体服务,我推荐使用子域名+HTTPS:

[service_jellyfin_https] type = https local_port = 8096 custom_domains = media.yourdomain.com # 配合Nginx反代实现SSL卸载 proxy_protocol_version = v2

然后在云服务器上用Nginx做反向代理:

server { listen 443 ssl; server_name media.yourdomain.com; ssl_certificate /path/to/cert.pem; ssl_certificate_key /path/to/key.pem; location / { proxy_pass http://127.0.0.1:7080; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; } }
数据库服务的特殊处理

暴露MySQL到公网是高风险操作,我的安全方案:

  1. 修改默认端口(示例中使用7330)
  2. 限制访问IP:
    [service_mysql_restricted] type = stcp sk = YourSecretKey local_port = 3306
  3. 访问端需要配套配置:
    [service_mysql_visitor] role = visitor type = stcp server_name = service_mysql_restricted sk = YourSecretKey bind_addr = 127.0.0.1 bind_port = 63306

3.3 性能调优参数

当同时暴露多个服务时,这些参数能显著提升稳定性:

[common] tcp_mux = true pool_count = 5 health_check_type = tcp health_check_timeout_s = 3 health_check_max_failed = 3 health_check_interval_s = 10

4. 高级应用场景与故障排查

4.1 负载均衡与高可用方案

我的家庭实验室有两台服务器,通过frp实现了服务冗余:

# 主服务器配置 [service_ha_primary] type = tcp local_port = 8080 remote_port = 8080 group = web_services group_key = YourGroupPassword # 备用服务器配置 [service_ha_secondary] type = tcp local_port = 8080 remote_port = 8080 group = web_services group_key = YourGroupPassword

4.2 常见问题解决手册

症状:客户端频繁断开连接

  • 检查服务端的bind_port是否被占用
  • 增加heartbeat_timeout = 60参数
  • 确认云厂商没有会话超时限制

症状:HTTPS证书错误

  • 确保Nginx配置了正确的proxy_protocol_version
  • 检查frpc的type = https而非http
  • 验证证书链完整性

症状:部分服务无法访问

  • 使用telnet your.server.ip 端口测试连通性
  • 检查Windows防火墙的入站规则
  • 确认本地服务在127.0.0.1能正常访问

4.3 监控与日志分析

建议在客户端配置详细日志:

[common] log_file = C:\frp\frpc.log log_level = info log_max_days = 7

配合这个PowerShell脚本实现日志轮转:

# 每日凌晨压缩旧日志 $Trigger = New-JobTrigger -Daily -At "00:00" $Action = { $LogPath = "C:\frp\frpc.log" if (Test-Path $LogPath) { $ArchiveName = "frpc_$(Get-Date -Format 'yyyyMMdd').zip" Compress-Archive -Path $LogPath -DestinationPath "C:\frp\archive\$ArchiveName" Clear-Content $LogPath } } Register-ScheduledJob -Name "FRP Log Rotation" -Trigger $Trigger -ScriptBlock $Action

5. 安全加固与自动化部署

5.1 最小权限原则实施

为frp创建专用Windows用户:

  1. 计算机管理 → 本地用户和组 → 新建用户frpuser
  2. 服务管理 → 找到frpc服务 → 登录身份改为frpuser
  3. 分配精确的文件权限:
    icacls "C:\frp" /grant frpuser:(OI)(CI)RX

5.2 自动化部署脚本

这个PowerShell脚本可以完成全套部署:

# 下载并解压frp $frpVersion = "0.51.3" $downloadUrl = "https://github.com/fatedier/frp/releases/download/v$frpVersion/frp_${frpVersion}_windows_amd64.zip" Invoke-WebRequest -Uri $downloadUrl -OutFile "C:\Temp\frp.zip" Expand-Archive -Path "C:\Temp\frp.zip" -DestinationPath "C:\frp" # 安装为系统服务 New-Service -Name "FRP Client" -BinaryPathName "C:\frp\frpc.exe -c C:\frp\frpc.ini" -DisplayName "FRP Client" -StartupType Automatic # 配置防火墙 New-NetFirewallRule -DisplayName "FRP Client" -Direction Inbound -Program "C:\frp\frpc.exe" -Action Allow

5.3 网络隔离方案

对于特别敏感的服务,我使用虚拟网卡隔离:

  1. 创建虚拟网卡:
    New-VMSwitch -Name "FRPNetwork" -SwitchType Internal $adapter = Get-NetAdapter | Where-Object { $_.Name -like "*FRPNetwork*" } New-NetIPAddress -IPAddress 192.168.100.1 -PrefixLength 24 -InterfaceIndex $adapter.ifIndex
  2. 服务绑定虚拟IP:
    [secure_service] type = tcp local_ip = 192.168.100.100 local_port = 5432 remote_port = 7543

这套方案运行半年多来,最让我惊喜的是它的稳定性——即使同时暴露七八个服务,内存占用也始终保持在50MB以下。现在无论是出差时调试代码,还是朋友访问我的媒体库,都能获得原生应用般的体验。最近还给家里的智能家居系统加了地理围栏功能,当手机离开特定区域时,自动通过frp隧道关闭所有设备,这种无缝衔接的体验才是家庭实验室的终极形态。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/5/5 6:39:09

Windows打印驱动自动化部署:通用驱动与PowerShell脚本实战

1. 项目概述:一个Windows打印问题的“救火”方案 如果你是一名Windows系统管理员,或者经常需要处理办公室的共享打印问题,那么“FueTsui/windows-printing”这个项目,很可能就是你一直在寻找的“瑞士军刀”。乍一看这个标题&#…

作者头像 李华
网站建设 2026/5/5 6:33:26

第22篇:Vibe Coding时代:LangGraph + pytest 自动测试修复实战,解决 Agent 只会写代码不会验证的问题

第22篇:Vibe Coding时代:LangGraph + pytest 自动测试修复实战,解决 Agent 只会写代码不会验证的问题 一、问题场景:Agent 生成代码看起来没问题,一跑测试全是错 很多 AI Coding 工具最容易给人一种错觉: 代码写得很完整 注释也很多 结构看起来不错但是只要真实运行: …

作者头像 李华
网站建设 2026/5/5 6:33:25

深入PX4源码:手把手教你用uORB消息机制调试PID控制流程

深入PX4源码:手把手教你用uORB消息机制调试PID控制流程 在无人机飞控开发领域,PX4作为开源飞控的标杆,其核心控制逻辑的实现一直是开发者关注的焦点。许多工程师虽然能够通过QGC地面站调整PID参数,但对参数调整背后的数据流动机制…

作者头像 李华
网站建设 2026/5/5 6:27:30

UWB通信技术:原理、优势与应用实践

1. UWB通信系统概述:从理论到实践的全面解析超宽带(Ultra Wideband, UWB)通信技术自2002年获得FCC批准商用以来,已成为无线通信领域最具革命性的技术之一。与传统的窄带通信系统不同,UWB通过纳秒级的极短脉冲或GHz量级…

作者头像 李华