搭建飞牛nas稳定运行了一个多月,远程访问飞牛nas有很多方法,直接用飞牛自带的fn connect也是一个很不错的选择,不过今天想和大家聊聊一个在搭建nas或者远程访问nas时非常实用的技术——内网穿透,以及一个非常优秀的内网穿透工具——frp。

https://github.com/fatedier/frp/releases

为什么需要内网穿透?

随着互联网的发展,越来越多的朋友开始尝试自己搭建网站、服务器或是智能家居系统。但是,当你兴致勃勃地把服务器或者智能设备部署在家里后,很快就会遇到一个问题:如何让外网用户也能访问到这些服务?因为大多数家庭或小型办公室的网络环境都是通过路由器连接互联网的,而这些路由器通常会分配一个动态的公网IP地址,并且出于安全考虑,很多端口是默认关闭的。这意味着直接从外部网络访问内部的服务变得非常困难。这时候,内网穿透就派上了用场。

内网穿透技术允许我们将位于内网中的服务暴露给外网,使得外网用户能够像访问普通网站一样访问这些服务。这对于希望搭建个人博客、文件共享服务或是远程控制家里的智能设备的人来说,无疑是一个巨大的便利。

frp是什么?

frp(Fast Reverse Proxy)是一个高性能反向代理应用,支持TCP、UDP协议的转发,可以用于将内网服务暴露到公网。它使用简单,配置灵活,非常适合个人用户和小型团队使用。

frp的主要特点

- 易于安装和配置:无论是Windows、Linux还是MacOS,frp都提供了预编译的二进制文件,下载后几乎无需任何复杂的配置即可运行。

- 支持多种协议:除了基本的HTTP和HTTPS服务外,还支持SSH、RDP等协议,满足不同场景下的需求。

- 安全性高:提供身份验证机制,确保只有授权用户才能访问你的服务。

- 性能优秀:经过优化设计,即使在网络条件不佳的情况下也能保持良好的响应速度。

如何使用frp进行内网穿透?

使用frp进行内网穿透的基本步骤如下:

1. 准备一台具有固定公网IP的服务器:这台服务器将作为frp的服务端,用来接收来自外网的请求并转发给内网中的客户端。为了降低成本并快速部署,可以考虑使用云服务提供商提供的轻量级服务器。

https://curl.qcloud.com/CS0zkP5E

2. 下载并安装frp:分别在服务端和客户端下载对应的版本,并根据官方文档完成基本的配置。

https://pan.baidu.com/s/1CdraoDV383VIh96AeCq9-w?pwd=6666

提取码: 6666。解压之后的文件:frpc(客户端)  frpc.toml(客户端配置)  frps(服务端)  frps.toml(服务端配置)。

3. 配置frp:frp 由两个主要组件组成:frps(服务器端)和 frpc(客户端),在服务端配置文件中定义监听的端口和转发规则;在客户端配置文件中指定要暴露的服务及其端口号。

4. 启动服务:先启动服务端,再启动客户端,确保两者之间可以正常通信。

5. 测试访问:通过服务端的公网IP地址加上配置好的端口号,从外网访问内网中的服务。

配置说明

服务端配置(具有公网ip的云服务器)

frps.toml

bindPort = 22454
auth.token = "xxxx"
webServer.addr = "0.0.0.0"
webServer.port = 22456
webServer.user = "xxxx"
webServer.password = "xxxx"
参数说明
  • bindPort,bindPort是frps配置文件中的一个重要参数,它指定了frps服务端监听的端口号。客户端在连接服务端时,将会尝试连接到这个端口。通常,我们可以选择一个未被占用的端口号作为bindPort,以确保frp服务能够正常运行。在选择端口号时,需要注意避免使用系统保留的端口号,以免引发冲突或安全问题。注意:需要在服务器的防火墙开放端口,以腾讯云轻量云为例:Snipaste_2024-11-24_23-46-53.png

  • auth.token,auth.token是frp配置中的一个重要参数,用于在服务端和客户端之间进行身份验证。在配置frp时,需要在服务端配置文件中设置一个唯一的token值,并在客户端配置文件中提供相应的token值进行匹配,以确保只有授权客户端能够连接到服务端并访问服务。token值的设置可以增强frp的安全性,防止未经授权的访问和攻击。在设置token值时,建议使用随机字符串或复杂密码以增加安全性。

  • webServer相关配置,webServer相关的配置在frp中扮演着将内网Web服务暴露到公网的关键角色。通过配置webServer,用户可以轻松地启动一个Web服务,并实时监控每个服务的流量情况。在配置webServer时,需要指定监听的端口以及相关的用户认证信息,以确保只有授权的用户能够访问这些服务。 在frp的配置文件中,webServer相关的配置参数包括: - webServer.addr:指定frp服务端监听的IP地址,可以使用"0.0.0.0"来绑定所有可用接口。 - webServer.port:指定frp服务端监听的端口号,客户端将通过这个端口访问服务端暴露的Web服务。 - webServer.user和webServer.password:用于基本身份验证的用户名和密码,确保只有授权的用户能够访问Web服务。 在正常情况下,开启webServer后,无需在服务器端开启防火墙限制相关端口,因为frp已经提供了内置的安全机制。然而,为了确保安全,建议用户在配置webServer时,结合使用其他安全策略,如使用强密码、定期更新密码、限制访问IP等。

客户端配置(nas端)

frpc.toml 的配置

serverAddr = "你的云服务器的公网ip"
serverPort = 22454
auth.token = "xxxx"

[[proxies]]
name = "nas"
type = "tcp"
localIP = "127.0.0.1"
localPort = 8000
remotePort = 23432

[[proxies]]
name = "xxx"
type = "tcp"
localIP = "127.0.0.1"
localPort = 31000
remotePort = 23433
参数说明
  • serverAddr,serverAddr指定了服务端监听的地址,通常在云服务器上配置为公网IP地址,以便客户端能够通过该地址连接到服务端。

  • serverPort,serverPort是frp配置中指定服务端监听的端口号,用于客户端连接服务端时所使用的端口。在配置frp时,需要确保该端口号在服务器端已被开放,并且未被其他服务占用。和服务端的bindPort保持一致。

  • auth.token,auth.token是frp配置中的一个重要参数,用于在服务端和客户端之间进行身份验证。在配置frp时,需要在服务端和客户端都设置正确的auth.token值以确保连接的安全性。通过设置auth.token,可以保护你的frp服务免受未经授权的访问和攻击。建议在使用frp时,设置一个复杂且唯一的auth.token值,并定期更换密码以增加安全性。和服务端的 auth.token 保持一致。

  • 每一个`[[proxies]]`代表一个代理配置,用于指定需要暴露的本地服务以及对应的转发规则。通过配置`[[proxies]]`,用户可以将本地服务(如Web服务器、FTP服务器等)映射到公网IP地址上,从而实现远程访问。每个代理配置都包含一些关键参数,如`name`(代理名称)、`type`(代理类型,如tcp、udp、http等)、`localIP`(本地服务IP地址)、`localPort`(本地服务端口号)和`remotePort`(公网端口号)等。这些参数用于定义如何将本地服务映射到公网IP地址上,以及如何进行访问控制和身份验证等。同样,需要给remotePort开发安全组。

启动命令

客户端启动命令:

frpc -c frpc.toml

服务端启动命令:

frps -c frps.toml

拓展

在Linux中,可以通过使用systemd来设置命令或服务在开机时自动启动。如果服务器或者nas重启之后,可以自动运行frp服务,而不需要额外的操作。

https://www.lllyyb.com/reference/docs/systemd.html

以上是基本完成的内网穿透配置步骤介绍。在实际应用中,可能还需要根据具体情况进行一些额外的配置和优化,以达到更好的效果和安全性。希望这些内容能够帮助你顺利完成内网穿透,实现远程访问你的NAS服务。