大家好,我是Ai日记,一个专注于将人工智能应用于日常生活的半吊子程序猿,平时主要分享AI、NAS、Docker、搞机技巧等。
在数字化日益加深的今天,远程访问家庭内部网络资源的需求愈发迫切,目前有多种方案来实现这一需求,包括但不限于远程桌面、公网IP、端口转发、内网穿透等等。内网穿透有付费、免费、自建等方案可以选择,其中无论是付费和免费,都无法保证信息的安全。
本文主要介绍如何通过云服务器、群晖NAS,来实现自建内网穿透,让你在保障信息和数据安全的情况下远程访问内网的任意资源。当前,也不局限于群晖,其他任何能够运行Docker的设备都可以!
目录一、说明
二、Frp介绍
三、云服务器准备
四、Frp准备
五、在外网访问内网服务
六、高阶玩法
七、总结
八、关键词
一、说明本文主要用到的工具包含:云服务器、群晖NAS、Frp。
其中Frp代理为开源软件,可以在GayHub上找到,考虑到有些小伙伴网络条件不是很好,我将下载好的frp客户端Docker镜像放在公众号了,关键词可以在文末找到。
二、Frp介绍FRP(Fast Reverse Proxy)是一个开源的、高性能的反向代理应用,它主要用于实现内网穿透,使得远程用户可以安全、便捷地访问内网资源。以下是对FRP的详细介绍:
功能特点· 内网穿透:FRP的核心功能是实现内网穿透,使得远程用户可以访问到位于内网的各类服务(如Web服务器、FTP服务器等)。
· 负载均衡:FRP支持将多个内网服务器映射到同一个公网IP地址上,并根据配置的策略进行请求转发,实现负载均衡,提高系统的可用性和性能。
· 安全加固:FRP提供了多种认证方式(如HTTP Basic认证、Token认证等)和SSL/TLS加密传输数据的功能,确保数据传输过程中的安全性和隐私性。
· 易于配置:FRP的配置相对简单,用户可以通过配置文件灵活地定义代理规则和行为,无需复杂的网络配置
三、云服务器准备这里比较简单,选择腾讯云或者阿里云都可以,1核2G的服务器即可,一般99一年。注意本文中操作系统需要是Linux的,发行版选ubuntu或者centos都可以。
阿里云腾讯云四、Frp准备Frp分为客户端和服务端,在本文的流程中,客户端主要使用群晖NAS的Docker部署,服务端使用官方的服务包部署。
4.1 云服务器4.1.1 Frp服务端部署通过ssh登录到云服务器,执行下面命令下载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执行下面命令进入到frp目录:
cd frp_0.61.0_linux_amd64/执行下面的命令打开服务端配置文件,并进行编辑修改:
vim frps.toml下面是一个简单的配置:
· bindPort:frp绑定端口,这个需要记住,一会在frp客户端需要用到
· auth.method:认证方式,这里用的是token
· auth.token:认证的token,可以改个复杂的,一会在frp客户端需要用到
改完之后,先按esc退出编辑模式,然后按下面的命令保存退出:
:wq因为服务端需要一直保持运行,我们需要让frp服务端运行在后台,这里我的方法比较简单(无需添加开机启动什么的),执行下面命令开启一个tmux会话:
tmux new -s frp然后执行下面的命令启动服务端:
./frps -c ./frps.toml出现下面的提示表示启动成功:
4.1.2 在云面板上开启防火墙为了能够让客户端连接到我们的frp服务端,需要在云面板的防火墙上放行上面绑定的端口,比如这里是27000。
阿里云:
腾讯云:
配置完成之后,接下来我们配置Frp客户端。
4.2 群晖NAS安装Frp客户端4.2.1 创建配置文件在群晖NAS的任意目录创建一个文件,比如我这里是:/docker/frpc/frpc.toml
frpc.toml文件的内容如下:
其中前四行是服务端配置:
· serverAddr:云服务器公网IP地址
· serverPort:上面frp服务端绑定的端口
· auth.method:填token
· auth.token:填上面frp服务端配置的token
配置文件下面是需要转发的内网服务,比如我一共转发了3个服务,名字分别是「frp」、「calibre-web」、「qbittroent」,分别对应我想要在外网远程访问的服务。在每个服务中:
· name:服务名
· type:流量的类型,一般都是tcp
· localIP:内网服务的IP地址,如果是在群晖NAS上的话,直接填127.0.0.1就行
· localPort:内网服务的端口
· remotePort:远程云服务器绑定的端口,也就是你在外网访问服务时需要加的端口
4.2.2 下载Frp客户端Docker镜像在群晖NAS上安装Frp客户端可以直接使用Docker部署。
开发「Container Manager」->「注册表」,输入frpc,选择第一个:snowdreamtech/frpc。网络条件不好的伙伴可以在文末找到Docker镜像获取关键词,导入方法可以参考我之前的文章《群晖NAS用户必看!告别书签栏!手把手教你在NAS上安装高颜值导航站,好用、好看、方便!》。
下载latest镜像,之后便可以再「映像」中看到了。
4.2.3 启动Docker容器在「Container Manager」->「映像」中,右键刚才下载或导入的镜像,点击运行。
在弹出的窗口中,勾选「启用自动重新启动」,然后点击下一步
网络选择host
在「存储空间设置」中,选择「添加文件」,按照下图进行填写
确认没问题之后,点击「完成」启动容器
容器启动之后,可以看到服务端刷新了下面的日志
日志中表示服务器分别和48080、28083、21194建立了端口绑定,这种情况下:
· 公网IP+48080,等价于访问内网的127.0.0.1:8080
· 公网IP+28083,等价于访问内网的127.0.0.1:8083
· 公网IP+21194,等价于访问内网的1194
上面这些映射关系都是在前面frpc.toml配置文件中定义好的。
4.2.4 开启防火墙在4.2.3节中,我们分别将外网的48080、28083、21194和内网的8080、8083、1194建立了映射关系,防火墙不放行对应端口的话,云服务器会对这几个外网端口的流量进行拦截,因此我们还需要再次在防火墙中放行这些端口。下面是阿里云的放行的例子:
这样我们就可以在外网输入IP:Port访问内网的服务了。
五、在外网访问内网服务下面,我们可以尝试一下在外网访问内网服务,在浏览器输入服务器公网IP+对应端口,可以正常访问到我在内网的书库:
六、高阶玩法