2022-06-11-玩转NAS系列01丨FRP内网穿透的设置

一.FRP介绍

frp是一个高性能的反向代理应用,可以轻松地进行内网穿透,对外网提供服务,支持tcp, udp,http, https等协议类型,并且web服务支持根据域名进行路由转发。

frp内网穿透主要用于没有公网IP的用户,实现远程桌面、远程控制路由器、搭建的WEB、FTP、SMB服务器被外网访问、远程查看摄像头、调试一些远程的API(比如微信公众号,企业号的开发)等。

二.前期准备

购买云服务器的目的,就是为了可以拥有公网IP,这样当我们在家外需要连接家里的nas的时候,就可以通过云服务器的公网IP访问家里的内网设备。

1.创建实例

创建实例的时候建议选择centos系统作为实例进行安装,我这里使用的是centos7.6。创建成功实例后就可以获取到公网IP。

20220612175422

2.在控制台创建秘钥对

腾讯云服务是需要证书认证的,所以需要创建新的秘钥对。

20220611160942

创建完成后,会下载私钥,私钥需要保存好,一会远程登录会用。

20220611161151

3.绑定秘钥到实例

点击 绑定/解绑实例 20220611163012

在跳转页面点击 绑定秘钥对

20220611163247

勾选该秘钥

20220611163336

点击下一步,然后确定。这里系统提示要关机。

20220611163422

这时已看到绑定成功

20220611163542

4.finalshell访问服务器的设置

认证方式选择公钥,用户名为root,私钥点击浏览,选择之前生成的文件。

20220612183425

可以看到连接成功了

20220612183923

三.云服务器的frp配置

1.下载frp package

finalshell登录远程服务器,下载frp

wget https://github.com/fatedier/frp/releases/download/v0.43.0/frp_0.43.0_linux_amd64.tar.gz

tar -zxvf frp_0.43.0_linux_amd64.tar.gz

mv frp_0.43.0_linux_amd64 frp

2.配置frps.ini文件

服务器端使用的是frps.ini文件,打开并添加token,内容可以随意命名

[common]
bind_port = 7000
token = password2020

输入命令,启动frp。

./frps -c frps.ini

3.防火墙开放端口访问

我们需要按配置文件开放7000端口,我这里开放了6000-8000所有的端口。

20220612185800

4.运行与设置开机自启

ctrl+c先停止服务,然后配置服务

vim /lib/systemd/system/frps.service

输入下面参数配置,需要注意的是ExecStart中的frp为实际解压文件名

[Unit]
Description=fraps service
After=network.target syslog.target
Wants=network.target

[Service]
Type=simple
ExecStart=/root/frp/frps -c /root/frp/frps.ini  

[Install]
WantedBy=multi-user.target

使配置开机自动生效

systemctl start frps

systemctl enable frps

重启后,使用 ps auxw 可以看到frps服务自启动成功。到这里服务器的设置就完成了。

20220612194501

四.nas上的frp设置(docker部署)

1.下载frp的docker版

20220612212427

2.配置frpc.ini

打开file station,在docker路径下建frp文件夹

20220612213112

配置frpc.ini,这里需要修改的是server_addr要填写你的公网IP,token要和frps.ini填写的一致。

配置完成后上传到docker/frp目录下。ssh的配置可以使云服务器使用6000端口访问到内网中的群晖。

# frpc.ini
[common]
server_addr = 43.100.32.44
server_port = 7000
token = password2020

[ssh]
type = tcp
local_ip = 127.0.0.1
local_port = 22
remote_port = 6000

3.配置docker frp

镜像中点击高级设置,环境中把frps改为frpc,这是因为我们要配置的是客户端。

20220612212716

存储空间选项把docker的路径映射到本地路径

20220612221335

网络选项勾选使用与Docker host相同的网络,这样就不用额外配置端口了。参数都配置完成后就可以点击应用了。

20220612221536

当container运行起来后就可以查看日志,出现start proxy success说明配置是成功的。

20220612222548

4.配置群晖的访问主页

我们要把[ssh]的配置复制一下,这里改为[DSM],可以自定义。

群晖主页使用的是5000端口,所以指定端口为local_port = 5000

云服务器开启的端口是6000-8000,可以在其中任意指定,只要不重复即可,这里指定的是remote_port=6001,目的是可以通过公网IP+映射端口的方式http://43.100.32.44:6001访问群晖主页面,相当于群晖本地访问的127.0.0.1:5000

修改完成后保存frpc.ini并上传到群晖的docker/frp/路径下,要覆盖之前的配置文件。

# frpc.ini
[common]
server_addr = 43.100.32.44
server_port = 7000
token = password2020

[ssh]
type = tcp
local_ip = 127.0.0.1
local_port = 22
remote_port = 6000

[DSM]
type = tcp
local_ip = 127.0.0.1
local_port = 5000
remote_port = 6001

这时frp的内网穿透就配置成功了。

20220612224109

5.同路由器下的其他设备的访问

如果我们想远程访问同一个路由器下的其他设备,比如我的软路由r2s,只需填写其内网IP,并且指定映射端口即可。

# frpc.ini
[common]
server_addr = 43.100.32.44
server_port = 7000
token = password2020

[ssh]
type = tcp
local_ip = 127.0.0.1
local_port = 22
remote_port = 6000

[DSM]
type = tcp
local_ip = 127.0.0.1
local_port = 5000
remote_port = 6001

[r2s]
type = tcp
local_ip = 192.168.2.1
local_port = 80
remote_port = 6002

使用效果:

20220612225336

参考:

doc:https://gofrp.org/docs/

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

docker_frp:https://registry.hub.docker.com/r/chenhw2/frp/