【优化篇】利用FRP内网穿透从公网访问家里NAS场景实践

admin 2026年6月2日10:09:21评论80 views字数 2591阅读8分38秒阅读模式

本文介绍了利用FRP内网穿透从公网访问家中NAS的优化实践。原TCP代理导致NAS看到的所有访问IP均为内网地址,引发自动封锁误封问题。通过改用HTTP类型代理并配置custom_domains,使NAS能获取真实公网源IP,解决了误封问题。

【优化篇】利用FRP内网穿透从公网访问家里NAS场景实践

1、先说frp工作原理

frp主要由两个组件组成:客户端(frpc) 和 服务端(frps)。通常情况下,服务端部署在具有公网 IP 地址的机器上,而客户端部署在需要穿透的内网服务所在的机器上。

由于内网服务缺乏公网 IP 地址,因此无法直接被非局域网内的用户访问。用户通过访问服务端的 frps,frp 负责根据请求的端口或其他信息将请求路由到相应的内网机器,从而实现通信。

代理

在 frp 中,一个代理对应一个需要公开访问的内网服务。一个客户端可以同时配置多个代理,以满足不同的需求。

代理类型

frp 支持多种代理类型,以适应不同的使用场景。以下是一些常见的代理类型:

  • TCP:提供纯粹的 TCP 端口映射,使服务端能够根据不同的端口将请求路由到不同的内网服务。
  • UDP:提供纯粹的 UDP 端口映射,与 TCP 代理类似,但用于 UDP 流量。
  • HTTP:专为 HTTP 应用设计,支持修改 Host Header 和增加鉴权等额外功能。
  • HTTPS:类似于 HTTP 代理,但专门用于处理 HTTPS 流量。
  • STCP:提供安全的 TCP 内网代理,要求在被访问者和访问者的机器上都部署 frpc,不需要在服务端暴露端口。
  • SUDP:提供安全的 UDP 内网代理,与 STCP 类似,需要在被访问者和访问者的机器上都部署 frpc,不需要在服务端暴露端口。
  • XTCP:点对点内网穿透代理,与 STCP 类似,但流量不需要经过服务器中转。
  • TCPMUX:支持服务端 TCP 端口的多路复用,允许通过同一端口访问不同的内网服务。

每种代理类型适用于不同的使用情境,您可以根据需求选择合适的代理类型来配置 frp。

2、背景

根据之前的文章 WebDAV+frp内网穿透工具实现像访问本地硬盘一样访问远程NAS

公网服务器上面安装frps服务端

[common]bind_address = 0.0.0.0bind_port = FRPS的监听端口authentication_method = tokenauthenticate_heartbeats = falseauthenticate_new_work_conns = falsetoken = FRPS服务TOKENlog_file =  /usr/local/frp/logs/frps.loglog_level = infolog_max_days = 30

家中内网服务器安装frpc

[common]server_addr = 云服务器公网IPserver_port = FRPS的监听端口authentication_method = tokenauthenticate_heartbeats = falsetoken = FRPS服务TOKENlog_file =  /usr/local/frp/logs/frpc.loglog_level = infolog_max_days = 30[918_synologyds220_http]type = tcplocal_ip = 192.168.31.200local_port = 5000remote_port = 5000

这样可以从公网IP访问家里的NAS 

【优化篇】利用FRP内网穿透从公网访问家里NAS场景实践

3、问题

但是带来这样一个问题,由于通过frp内网穿透NAS完全暴露公网 ,NAS上面看到公网访问过来的IP都是本机IP 192.168.31.200

如果有暴力破解攻击,然后NAS又开启了自动封锁,这时就会出现问题,封锁了192.168.31.200这个IP导致正常从公网访问的其他用户无法正常登录了

【优化篇】利用FRP内网穿透从公网访问家里NAS场景实践

4、解决思路及探索过程

通过内网穿透外部访问NAS的看到的IP要为真实的源公网IP frpc 中type为tcp类型这种方式就不可行

找到frp的官方文档中这篇实践示例找到的解决方案

https://gofrp.org/zh-cn/docs/examples/vhost-http/

HTTP 类型的代理非常适合将内网的 Web 服务通过自定义域名提供给外部用户。 相比于 TCP 类型代理,HTTP 代理不仅可以复用端口,还提供了基于 HTTP 协议的许多功能 简单配置 HTTP 类型的代理,您可以让用户通过自定义域名访问内网的 Web 服务

5、改造的具体步骤

1、修改frps.ini 添加

指定 HTTP 请求的监听端口为 5000cat /usr/local/frp/frps.ini [common]bind_address = 0.0.0.0bind_port = 8111vhost_http_port = 5000authentication_method = tokenauthenticate_heartbeats = falseauthenticate_new_work_conns = falsetoken = XXXXXXXXXXlog_file =  /usr/local/frp/logs/frps.loglog_level = infolog_max_days = 30重新启动frps服务
【优化篇】利用FRP内网穿透从公网访问家里NAS场景实践

2、修改frpc上的配置

[common]`server_addr = 47.1XX.9X.2X7server_port = 8111authentication_method = tokenauthenticate_heartbeats = falseauthenticate_new_work_conns = falsetoken = XXXXXXXXXXlog_file =  /usr/local/frp/logs/frpc.loglog_level = infolog_max_days = 30[Synology_DSM5000_domain]type = httplocal_ip = 192.168.31.200local_port = 5000custom_domains =  47.1XX.9X.2X7`
【优化篇】利用FRP内网穿透从公网访问家里NAS场景实践

然后重新启动frpc服务

3、验证问题解决

这时再从公网访问NAS这时看到连接过来的用户IP就是公网真实源IP 

【优化篇】利用FRP内网穿透从公网访问家里NAS场景实践

4、Tips

custom_domains这里当然你可以用域名,前提你做了ICP备案,域名解析指到FRPS服务器的公网IP,否则你懂的

原文始发于微信公众号(Linux运维实践派):【优化篇】利用FRP内网穿透从公网访问家里NAS场景实践

免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉。
  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2026年6月2日10:09:21
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   【优化篇】利用FRP内网穿透从公网访问家里NAS场景实践http://cn-sec.com/archives/5262991.html
                  免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉.

发表评论

匿名网友 填写信息