一.FRP介绍
frp是一个高性能的反向代理应用,可以轻松地进行内网穿透,对外网提供服务,支持tcp, udp,http, https等协议类型,并且web服务支持根据域名进行路由转发。
frp内网穿透主要用于没有公网IP的用户,实现远程桌面、远程控制路由器、搭建的WEB、FTP、SMB服务器被外网访问、远程查看摄像头、调试一些远程的API(比如微信公众号,企业号的开发)等。
二.前期准备
购买云服务器的目的,就是为了可以拥有公网IP,这样当我们在家外需要连接家里的nas的时候,就可以通过云服务器的公网IP访问家里的内网设备。
1.创建实例
创建实例的时候建议选择centos系统作为实例进行安装,我这里使用的是centos7.6。创建成功实例后就可以获取到公网IP。

2.在控制台创建秘钥对
腾讯云服务是需要证书认证的,所以需要创建新的秘钥对。

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

3.绑定秘钥到实例
点击 绑定/解绑实例

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

勾选该秘钥

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

这时已看到绑定成功

4.finalshell访问服务器的设置
认证方式选择公钥,用户名为root,私钥点击浏览,选择之前生成的文件。

可以看到连接成功了

三.云服务器的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所有的端口。

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服务自启动成功。到这里服务器的设置就完成了。

四.nas上的frp设置(docker部署)
1.下载frp的docker版

2.配置frpc.ini
打开file station,在docker路径下建frp文件夹

配置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,这是因为我们要配置的是客户端。

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

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

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

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的内网穿透就配置成功了。

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
使用效果:

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