一.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