如果路由器没有公网IP,最实用的办法是用一台有公网IP的云服务器做中转,通过FRP内网穿透工具把路由器硬盘的访问端口映射到云服务器上,这样在外网就能直接访问家里的硬盘数据。
无公网ip怎么映射路由器的硬盘到云服务器先搞懂原理
很多人在家里用路由器挂了一块硬盘,平时局域网内访问挺方便,一出门就傻眼了没有公网IP,连不上,这里说的无公网IP,指的是运营商分配给你的是大内网地址(比如100.64开头的CGNAT网段),路由器WAN口拿到的不是真正的公网IPv4地址,这种情况下,传统的端口映射、DDNS基本失效,因为压根没有公网入口。
核心思路:让云服务器主动去找你家路由器建立一条通道,也就是“反向连接”,你家路由器上的FRP客户端主动连上云服务器的FRP服务端,然后云服务器上某个端口收到的请求,就会顺着这条已经建立的隧道转发到路由器硬盘的Samba或FTP端口上,整个过程不需要公网IP,只需要路由器能访问外网就行。
这个方案有个前提:你的路由器要能运行FRP客户端,目前大部分刷了OpenWrt、梅林、Padavan固件的路由器都支持,小米、TP-LINK原厂固件如果没提供插件,就得考虑刷机或者用旁路由设备。
路由器硬盘映射到云服务器,主流方案怎么选
FRP内网穿透方案
FRP是目前使用最广泛的工具,Go语言写的,单文件部署,OpenWrt软件源里直接有,它的工作模式是客户端主动建连,云服务器端只负责等待连接,穿透能力强,几乎不存在连不上的情况。
ZeroTier或Tailscale组网方案
这类工具把路由器和你手机、电脑组进一个虚拟局域网,效果像是大家都在一个内网里,好处是不需要自己维护服务器,但它依赖官方的协调服务器,在某些网络环境下UDP被限制时,连接质量会明显下降,如果你还要考虑多个设备互访,组网方案更合适;如果只是单纯访问硬盘,FRP更直接。
反向代理工具方案
比如Nginx的stream模块也可以做四层转发,但需要配合frp或其他隧道工具才能实现内网穿透,单独用它无法解决无公网IP的问题。
| 方案 | 是否需要云服务器 | 是否需要公网IP | 适合场景 | 维护难度 |
|---|---|---|---|---|
| FRP内网穿透 | 必须 | 云服务器需要 | 单端口转发,访问硬盘、Web服务 | 低 |
| ZeroTier组网 | 不需要 | 不需要 | 多设备互访、虚拟局域网 | 中 |
| Tailscale组网 | 不需要 | 不需要 | 基于WireGuard,跨平台 | 低 |
行业共识认为,如果你已经有一台云服务器,FRP是性价比最高的选择,因为服务器只承担了流量转发的工作,还能顺带干别的事,如果你的云服务器本身就带公网IP,那FRP可以在这台服务器上直接跑服务端,不用额外买带宽或机器。
实操:把路由器硬盘映射到云服务器的完整步骤
第一步:准备云服务器
买一台轻量应用服务器或者ECS,地域选离你近的,带宽建议选3Mbps以上,因为访问硬盘主要吃带宽,系统装Ubuntu 22.04或Debian 12都行,CentOS已经停止维护,不建议再用。
安全组里放行需要用到的端口,比如服务端监听端口7000,还有给硬盘访问预留的映射端口(比如4450、5001),来源IP建议限定成你自己的出口IP,如果嫌麻烦就先放行0.0.0.0/0,后面再收紧。
登录服务器,下载FRP:
wget https://github.com/fatedier/frp/releases/download/v0.61.0/frp_0.61.0_linux_amd64.tar.gz tar -zxvf frp_0.61.0_linux_amd64.tar.gz cd frp_0.61.0_linux_amd64
第二步:配置FRP服务端
编辑frps.toml文件:
bindPort = 7000 auth.method = "token" auth.token = "换成你自己的强密码"
后台启动:
nohup ./frps -c frps.toml > frps.log 2>&1 &
用ss -lntp | grep 7000确认监听正常。
第三步:在路由器上配置FRP客户端
以OpenWrt为例,先安装:
opkg update opkg install frpc
然后编辑/etc/frp/frpc.toml:
serverAddr = "你的云服务器IP" serverPort = 7000 auth.method = "token" auth.token = "和服务器端保持一致" [[proxies]] name = "samba" type = "tcp" localIP = "192.168.1.1" localPort = 445 remotePort = 4450
如果你的硬盘是通过USB挂载在路由器上,Samba服务监听的就是路由器的内网IP和445端口,remotePort改成4450是为了避免和云服务器自身端口冲突,同时规避运营商封锁445端口的问题。
重启frpc服务:
/etc/init.d/frpc restart
在云服务器上验证:
ss -lntp | grep 4450
如果有监听,说明隧道已经通了。
第四步:从外网访问
手机或者电脑上,文件管理器里输入:
smb://云服务器IP:4450
Windows资源管理器地址栏输入:
\云服务器IP4450
弹出的认证窗口里输入你路由器Samba设置的用户名密码,就能像在内网一样访问硬盘里的文件了,上传下载速度取决于你云服务器带宽和家庭上行带宽之间的较小值。
如果不想记IP,可以配一个域名解析到云服务器,然后用域名加端口访问,像smb://nas.example.com:4450这样的格式,可以在路由器或服务器上设置好,外网访问时输入域名即可,不用记IP。
无公网ip远程访问家里路由器硬盘,这几个坑要避开
运营商封锁端口
国内运营商对80、443、445等常见端口管控比较严格,尤其是445端口,历史上被勒索病毒利用过,所以映射端口别用445、139这些SMB老端口,换成高位端口比如4450、14450,能有效降低被扫描的概率。
云服务器流量费用
按流量计费的云服务器,跑硬盘内容时流量消耗很快,看一部电影可能产生几GB流量,选固定带宽计费模式会更可控,3Mbps带宽虽然看1080P会卡,但看文档、传照片、下载文件完全够用,如果预算充足,5Mbps体验会好很多。
用SMB3.0及以上版本协议
SMB1.0有严重安全漏洞,Windows和主流NAS系统默认都已经禁用,路由器上的Samba服务也要确认启用的协议版本至少是SMB2.0,最好开启SMB3.0加密,连接加密后,数据在隧道里不会被明文窃听。
断线重连问题
家庭宽带的IP地址每隔一段时间会变,FRP客户端会因为网络波动掉线,建议在路由器上设置定时任务,比如每天凌晨重启一次frpc服务:
0 4 /etc/init.d/frpc restart
这样可以保证掉线后能自动恢复。
公网IP经常变怎么办,会不会影响连接
公网IP变化只影响你从外网访问云服务器的入口,不影响FRP隧道本身,因为隧道是路由器主动发起的,路由器会持续重连,你需要做的只是把域名解析到云服务器的公网IP上,这个IP是固定分配的,路由器端公网IP是动态的,对隧道稳定性和访问体验的影响可以忽略。
有没有更省事的办法,不用云服务器也能实现
如果你的需求只是偶尔访问,不追求稳定性和速度,可以用现成的内网穿透服务商,比如花生壳、神卓互联这类产品,它们提供了免费或低价的穿透服务,不需要自己维护服务器,但免费版通常有流量限制和带宽限制,速度不太稳定,而且某些服务商需要安装特定客户端,不一定支持路由器固件。
自己买一台云服务器,按最便宜的轻量应用服务器算,一年成本大概几十到一百多元,一次性配置好之后长期使用,比按月付费的穿透服务划算不少,这个场景下有六年以上云服务器使用经验的用户,普遍会选择自建方案。
常见问题
无公网ip怎么把路由器硬盘挂载到云服务器上访问?
路由器上运行FRP客户端,云服务器上运行FRP服务端,把路由器硬盘的Samba端口通过隧道映射到云服务器的某个高位端口,云服务器上不需要真正“挂载”硬盘,它只负责流量转发,外界访问云服务器的映射端口时,数据通过隧道到达路由器,路由器再把请求交给硬盘的Samba服务处理。
内网穿透云服务器买哪家便宜够用?
主流云厂商的新用户轻量应用服务器活动价都在一年一百元以内,1核2G配置、3Mbps带宽足够支撑FRP转发,重点不是选哪家,而是选带宽计费方式和地域位置,地域选离你近的城市,延迟能控制在20ms以内;带宽要固定计费,不要按流量计费,否则访问硬盘内容流量费用会失控,简米云、酷番云、华为云这三家的轻量服务器都可以,买之前先看上行的并发限制。
手机在外面怎么访问映射后的路由器硬盘?
手机用支持SMB协议的客户端软件,比如ES文件浏览器、Fileball这类工具,新建连接时填云服务器IP加映射端口,协议选SMB,用户名密码填路由器上的Samba账号就能访问,iOS的“文件”App支持SMB连接,在“连接服务器”里输入smb://云服务器IP:4450即可,不需要装额外App,传输速度取决于手机所处的4G/5G网络和云服务器带宽,一般看照片、听音乐没问题。
首发原创文章,作者:王坚,如若转载,请注明出处:https://idctop.com/article/681344.html





