手把手教你自己搭建一套内网穿透服务,远程访问内网任意服务,隐私安全,保姆级!
在数字化日益加深的今天,远程访问家庭内部网络资源的需求愈发迫切,目前有多种方案来实现这一需求,包括但不限于远程桌面、公网 IP、端口转发、内网穿透等等。内网穿透有付费、免费、自建等方案可以选择,其中无论是付费和免费,都无法保证信息的安全。
本文主要介绍如何通过云服务器、群晖 NAS,来实现自建内网穿透,让你在保障信息和数据安全的情况下远程访问内网的任意资源。当前,也不局限于群晖,其他任何能够运行 Docker 的设备都可以!
一、说明
本文主要用到的工具包含:云服务器、群晖 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+对应端口,可以正常访问到我在内网的书库:
六、高阶玩法
在上面的例子中,我们依然是在外网通过 IP:Port 访问内网服务,很不方便。我们可以在服务器上安装「宝塔」面板,然后结合反向代理实现通过域名访问,类似的方法可以参考我往期的文章《使用个性化域名访问内网服务,支持 https 小绿锁!让你从 IP:Port 中脱离出来!》,操作可能不太一样,但原理类似,感兴趣的伙伴可以自行研究。
七、总结
本文主要介绍了如何通过云服务器、Frp 服务端、Frp 客户端、群晖 NAS 来自己搭建一个内网穿透服务,实现远程访问内网的任意服务,避免了信息泄露的风险。同时还给出了一种高阶玩法,在云服务器上安装宝塔面板,通过反向代理实现通过域名远程访问内网服务。大家对此感兴趣的话,欢迎 Mark,后续会持续更新~