frp服务是一个非常好用的内网穿透服务,如果自己有购买云服务器的话,可以使用该服务将树莓派上的域名穿透至广域网上面。
本文将介绍树莓派上frp服务的使用方法,并整理介绍几个常用但网上说得不清楚的frp功能,例如frp服务开机自启、后台运行等,以便于实际应用与个人参考
下载安装
从github上获取frp服务压缩包,我这里安装的是0.20.0版本,目前GitHub上提供的最新版本为0.35.1版本
https://github.com/fatedier/frp/releases
wget https://github.com/fatedier/frp/releases/download/v0.20.0/frp_0.20.0_linux_amd64.tar.gz
tar -zxvf frp_0.20.0_linux_amd64.tar.gz
这样你就可以在树莓派下载目录中找到frp_0.20.0_linux_amd64文件夹。我习惯将其放在/home/ubuntu(也就是默认文件夹下,可以根据自己的情况选择文件夹)
配置文件说明
我们会在文件夹中看到这几个文件
只需要修改frpc.ini和frps.ini即可,其中
frpc.ini是客户端配置文件(树莓派配置这个)
frps.ini是服务器配置文件(服务器配置这个)
客户端配置
修改frpc.ini文件
;此处使用分号“;”作为注释,使用时记得删除
[common]
server_addr = 这里写你的服务器IP地址
server_port = 7000 ;服务器上设置的端口,下文会说明,服务器和客户端设置相同即可
privilege_token = 自定义,与服务器一致即可
login_fail_exit = false ;登录失败是否退出
[ssh]
type = tcp
local_ip = 127.0.0.1
local_port = 24 ; 本地SSH端口
remote_port = 7979 ; 远程SSH端口
;=======以下是二级域名的设置,非必须==========
[door] ;方括号写二级域名名称
type = http
local_ip = 127.0.0.1
local_port = 8081 ; 本地访问端口
subdomain = door ; 二级域名名称,和方括号保持一致绝对没错
http_user=guest ;这里可以给访问者设置账户密码,此处设置用户名
http_pwd=12345678 ; 此处设置密码
每个参数及其意义我已经在注释中说明了
server_addr有一个技巧,此处可以填写域名代替IP地址(如果觉得IP地址记不住可以用这个方法)
服务器配置
修改frps.ini文件
[common]
bind_port = 7000 ;服务器占用的端口,和客户端server_port 保持一致
vhost_http_port = 8080 ;服务器访问端口,输入域名后必须加上这个端口号才能访问!
privilege_token = 自定义,与客户端一致即可
dashboard_port = 服务器控制台端口
dashboard_user = 控制台用户名
dashboard_pwd = 控制台密码
;以下是二级域名才会使用的配置
subdomain_host= 这里写你的服务器域名
;例如服务器为abc.com ,二级域名为dd,则需要访问dd.abc.com:端口号 才能访问
注意:无论是否为二级域名,服务器域名解析时,都解析到服务器自身的IP地址
到这里所有的配置完毕啦~
运行服务
运行服务的命令为(根据自己的安装路径调整)
服务器:
cd /home/ubuntu/frp_0.20.0_linux_amd64/
./frps -c ./frps.ini
客户端
cd /home/ubuntu/frp_0.20.0_linux_amd64/
./frpc -c ./frpc.ini
这里建议编写一个sh文件(例如frp.sh),这样每次运行只需输入
sh frp.sh
即可运行
服务后台运行以及开机自启动
在完成上述步骤后,frp服务就已经可以运行啦。不过你会发现一个非常棘手的问题,那就是每次运行都需要在服务器和树莓派上输入命令才能运行,这样丝毫没有实际应用价值,必须能够让服务自启动并后台运行才能应用于实际当中。
1、本文使用supervisor服务配置frp服务自启动与后台运行。frp服务的安装可以参见我的另一篇文章
Linux Ubuntu系统 supervisor服务安装方法(亲测可用)
2、在/etc/supervisor/conf.d目录下创建frp.conf文件,在supervisord.conf的include中加入
files = /etc/supervisor/conf.d/*.conf
3、写frp.conf文件如下:
[program:frp]
command = /home/ubuntu/frp_0.20.0_linux_amd64/frps -c /home/ubuntu/frp_0.20.0_linux_amd64/frps.ini
autostart = true
这里我使用sh文件进行控制,会方便很多
4、更新supervisor的配置
ubuntu@VM-16-12-ubuntu:~$ supervisorctl
supervisor> reload
Really restart the remote supervisord process y/N? y
Restarted supervisord
supervisor> status
frp RUNNING pid 31053, uptime 0:00:04
这样我们就可以看到,frp服务已经在运行啦!撒花~
服务器和客户端两边都配置好,就可以实现内网穿透了
摸索了这么久终于找到了完整的方法。限于本人水平问题,如果有什么错误之处还望评论指出~