摘要
由于中国电信计划在2024年收回所有老用户的公网IPv4,导致无法继续远程访问公司NAS。为了解决这个问题,作者提出使用自建Frp内网穿透服务,通过云服务器实现与公网IPv4相似的访问体验。Frp是一款高性能的开源反向代理工具,支持多种协议,用户可以通过其公网IP访问内网服务。本文详细介绍了Frp的安装过程、配置方法及域名解析,最终实现稳定、安全的远程访问。通过自建Frp,用户能够提高网络控制权和使用体验。
前言
公网ipv4 被回收
今天公司NAS外网域名突然访问不了,排查一番,发现用了2年的公网ip被电信收回了,联系了1000电信客服,被告知:
- 2024年12月30之前,一律收回所有老用户的公网ip,并且新用户已经不提供公网ip了。感慨,以前一个电话就提供公网ipv4的日子,一去不复返了。
- 如果想继续使用公网ip,需要缴纳 100 元/月
(作为专业的群晖 NAS 垃圾佬,我肯定是不同意的)
接下来要面对的问题
- 没有公网ip,如何远程外网访问NAS?
- 使用群晖QC(QuickConnect)可以保证公司 50 个人的流畅使用体验吗?
- 用第三方的内网穿透工具(花生壳盒子、Zerotier、Starvpn、Tailscale、异地虚拟组网软件…)能保证跟公网ipv4的使用体验一样吗?要收费吗?
我的需求
实现跟ipv4直连的连接速度质量,并且要足够稳定
(毕竟用了这么多年的ipv4直连,如果因没了ipv4要降低我的NAS使用体验,我是 100 个不愿意)
研究一番得出解决方案
通过云服务器自建Frp内网穿透服务,如果购买的服务器上传速度足够优秀,速度和稳定性可以等同于公网 IPv4直连 NAS。
前期准备
1.腾讯云轻量服务器
(地区选择新加坡,优势是跟中国大陆的距离足够近,价格相对于香港的云服务器来讲,也足够便宜,另外1.5TB的月流量也足够使用)
2.域名
(本文假设你购买的域名是abc.com),域名的作用是为了能够通过域名访问,而不是ip
Frp内网穿透项目介绍
介绍
Frp是一款高性能的开源的内网穿透项目,旨在帮助人们可以通过外网,能随时随地访问家里的NAS 设备、路由器以及其它的自部署开源项目,其本质是一个反向代理工具。
Github项目地址:https://github.com/fatedier/frp
官网:https://gofrp.org/zh-cn/
工作原理
建立连接:用户的设备上的 FRPC 会连接到 FRPS,就像每个人都在排队等着进门。
发送请求:当用户想访问内网服务时,FRPC 会把这个请求送到 FRPS。FRPS 就像一个管理员,接收所有的请求。
转发请求:FRPS 收到请求后,会把它转发到相应的 FRPC,这样请求就到达了用户的内网服务。返回结果:内网服务处理完请求后,把结果通过 FRPC 发回 FRPS,最后再把结果送回给用户。
优势
灵活性:支持多种协议(TCP、HTTP),适应不同类型的服务需求。
内网穿透:允许用户在内网环境中运行服务,而不需要公网 IP。
简化访问:用户可以通过 FRPS 的公网 IP 轻松访问各自的内网服务。
开始安装搭建Frps 内网穿透服务
安装Frp 需要安装 2 个部分:Frps 服务端和Frpc 客户端,云服务器安装frps,NAS 安装Frpc
云服务器安装Frps服务端
购买云服务器后,安装 1panel 面板,以下教程将通过1panel 进行操作。
1.新建frp文件夹
2.开始搭建
进入projects
cd /root/frp
一键搭建脚本
wget https://raw.githubusercontent.com/mvscode/frps-onekey/master/install-frps.sh -O ./install-frps.sh
chmod 700 ./install-frps.sh
./install-frps.sh install
跟着安装脚本的流程,一路填写信息即可
安装成功后会得出以下信息
Congratulations, frps install completed!
================================================
You Server IP : 12.56.34.78
bind port : 32210
vhost http port : 13188
vhost https port : 10566
token : DLKSDowokkLLp
subdomain_host : 12.56.34.78
tcp mux : true
Max Pool count : 5
Log level : info
Log max days : 15
Log file : enable
transport protocol : enable
kcp bind port : 16333
quic bind port : 32222
================================================
frps Dashboard : http://12.56.34.78:32211/
Dashboard port : 32211
Dashboard user : pipufrp
Dashboard password : ODSIkkckckopas
================================================
说明
bind port:端口,FRP 服务器用于监听 FRPC 连接的端口
vhost http port:HTTP 穿透服务端口,用户通过这个端口访问内网的 HTTP 服务
vhost https port:HTTPS 穿透服务端口,用户通过这个端口访问内网的 HTTPS 服务
token:FRPS 和 FRPC 之间的连接令牌密钥,用于身份验证,确保只有授权的客户端可以连接
tcp mux:TCP 多路复用,允许在一个连接上同时处理多个请求,提高效率
Max Pool Count:允许的最大并发连接数,表示 FRPS 可以同时处理的 FRPC 连接的数量
Log Level:这是日志记录级别,info
表示记录普通信息,便于后续查看和调试
Log Max Days:这表示日志文件的最大保存天数,超过这个天数的日志会被删除
Log File:日志文件记录,方便后续查看
Transport Protocol:表示启用传输协议,通常是默认选项
KCP Bind Port:KCP 协议的绑定端口,KCP 是一种快速的传输协议,适用于高延迟的网络情况
QUIC Bind Port:QUIC 协议的绑定端口,QUIC 是一种新型传输协议,提供更快的连接和更低的延迟
FRPS Dashboard:FRP 服务器的管理面板地址,可以通过这个地址访问和管理 FRP 服务
Dashboard Port:访问管理面板的端口
Dashboard User:管理面板的用户名
Dashboard Password:管理面板的密码,用于登录
使用建议
配置调整:根据实际需要,可以调整 Max Pool Count 和其他参数,以优化性能
安装Frpc客户端
因为国内政策原因,Docker‘官方镜像仓库被墙了,在群晖NAS 的Container Manager中搜索docker 镜像时,会发生“查询注册表失败”,所以我将通过“我不是矿神”来安装Frpc 客户端。
在群晖(Synology)NAS的套件中心添加“我不是矿神”的源地址:https://spk7.imnks.com/(NAS 的DSM系统版本需 ≥ 7.1)
因为已经在云服务器安装了frps的服务端,所以在群晖NAS只安装Frpc客户端即可
安装完毕,打开Frpc客户端,正确填写信息
配置模版
[common]
server_addr = 你的服务器 IP
server_port = frp 通信通道端口号
token = 你的token
[任务名称,随便写,不能重名,如:NAS1]
type = tcp
local_ip = 局域网 IP
local_port = 本地端口号
remote_port = 对外端口号
[任务名称,随便写,不能重名,如:NAS2]
type = tcp
local_ip = 局域网 IP
local_port = 本地端口号
remote_port = 对外端口号
记得打开云服务器的端口哦!
此时可通过云服务器ip地址+端口,即可登录NAS的桌面了,根据以上信息,NAS 的外网访问地址是:http://12.56.34.78:13666
验证
测试连接是否正常,去访问Frps Dashboard(Frp控制面板):http://12.56.34.78:32211,可查看到内网的NAS 已经通过内网穿透,成功实现外网访问了!
域名解析
为了让 NAS 的访问更加优雅,我们将云服务器的ip地址与域名绑定在一起
此时,外网访问 NAS 地址是:https://nas.abc.com:13666
继续配置其他服务
如果 NAS 还部署了其他服务,可继续通过模版进行配置
实例
[common]
server_addr = 12.56.34.78
server_port = 32210
token = DLKSDowokkLLp
[Brothersbox-NAS]
type = tcp
local_ip = 192.168.22.90
local_port = 13222
remote_port = 13666
[Emby]
type = tcp
local_ip = 192.168.22.90
local_port = 8096
remote_port = 8096
[Navidrome]
type = tcp
local_ip = 192.168.22.90
local_port = 3000
remote_port = 21096
FAQ
通过frp 内网穿透,传输速度是多少?
计算从外面访问家中 NAS 的网速,主要考虑以下几个因素:
- 家里宽带上传速度:如1 Mbps。
- 云服务器下载速度:如5 Mbps。
- frp 的性能:通常影响不大,但会有一定的开销。
在这种情况下,访问速度会受到家上传速度的限制。从外部访问家中 NAS 的最大速度可以表示为:最大速度 = min(家里上传速度, 云服务器下载速度)
因此,计算如下:最大速度 = min(1 Mbps, 5 Mbps) = 1 Mbps
所以,从外部访问家中的 NAS 时,理论上的网速为 1 Mbps。实际速度可能会因为网络波动或其他因素而稍低于此值。
总结
以前用中国电信的公网ipv4 就像租房子,随时可能面临搬家的风险,而通过自建 FRP(Fast Reverse Proxy)内网穿透服务,就像是自己建了一个房子,拥有了更高的控制权和稳定性,减少了对外部网络环境的依赖。
这样速率确实下降只适合个人用,可能还是ipv6合适
速度确实有点慢,看来还是得上ipv6,只可惜目前有些硬件条件没达到,导致有些人没连上,我得想想办法。
试试cf穿透,不需要vps,纯免费
请问适合大陆和10-50人同时访问吗?我怕cf速度上不够稳定
FRP目前用着确实是很方便 但也需要一定的成本 不太经济实惠 哈哈
确实是你说的那样。
云服务器的入站流量好像都是百兆,但是出站流量国内限制太狠了,都是几兆,香港新坡基本上都是几十兆兆,算是一种不错的解决方法了。
是的,所以我选择了这个方式。
IPV6+DDNS,同运营商基本没啥问题,如果跨运营商可能会打洞失败
试过,但由于访问端也要有ipv6,所以没继续
手机流量又IPv6,现在光猫也都开启了IPv6,个人感觉ddns-go更方便些,主要是带宽够大
由于我这比较多人使用,使用场景不适合ipv6,个人使用的话,ipv6+ddns-go 很舒适
教程好详细
不过我用的是ddns-go
ddns-go 也不错,我也一直在用。
我用的开源vpn方案,p2p直连,更方便
https://github.com/EasyTier/EasyTier
好哦,我去看看。感谢推荐