什么是frp?
我有一台内网服务器(树莓派),以上装了一些服务,比如私有云盘,项目等,但是只能局域网访问.
此时如果我们需要外网访问这些服务呢?
又需要外网登录树莓派呢?
这时frp可以实现内网穿透web容器,以及反向代理ssh实现外网访问树莓派.
使用场景
1.可以实现内网穿透(类似付费花生壳,小蚂蚁)
2.可以实现反向代理
以前也写过一篇反向代理实现内网穿透的文章,https://app.sanii.cn/?p=264
比ssh,autossh速度更快更稳定.
准备工作
1.一台公网服务器
2.一台内网服务器
3.备案域名(可选,如需域名绑定功能)
安装
源码地址
https://github.com/fatedier/frp/releases
下载注意事项
1.服务端(公网服务器)和客户端(内网服务器)使用的版本要保证一致
2.源码架构要与服务器一致.
正常云服务器都是AMD架构,但是树莓派是ARM架构!!!!不同架构是无法运行程序的!!!!
配置
1.配置服务端
解压后进入,修改配置文件frps.ini(s代表server)
bind_port = 7000
#与客户端绑定的进行通信的端口
vhost_http_port = 3333
#访问客户端web服务自定义的端口号
2.配置客户端
解压后进入,修改配置文件frpc.ini(c代表clien)
[common]
server_addr = 112.112.112.112(示例)
#公网服务器ip
server_port = 7000
#与服务端bind_port一致
#公网通过ssh访问内部服务器
[ssh]
type = tcp
#连接协议
local_ip = 127.0.0.1
#内网服务器ip
local_port = 22
#ssh默认端口号
remote_port = 2222
#自定义的访问内部ssh端口号
#公网访问内部web服务器以http方式
[web01]
type = http
local_ip = 127.0.0.1
#访问协议
local_port = 8000
#内网web服务的端口号
custom_domains = xx1.sanii.cn
#所绑定的公网服务器域名,一级、二级域名都可以
#公网访问内部web服务器以http方式 如果多web的话保证web名字不重名即可
[web02]
type = http
local_ip = 127.0.0.1
#访问协议
local_port = 8080
#内网web服务的端口号
custom_domains = xx2.sanii.cn
#所绑定的公网服务器域名,一级、二级域名都可以
启动
先启动服务端
./frps -c ./frps.ini
再启动客户端
./frpc -c ./frpc.ini
访问
ssh访问:112.112.112.112:2222
访问web1:xx1.sanii.cn:3333
访问web2:xx2.sanii.cn:3333
HTTPS
frp使用Nginx接入SSL,https让服务更安全。
server {
listen 443 ssl; #443端口为https
ssl_certificate /usr/nginx/conf/1_xx.sanii.cn_bundle.crt; #证书,路径自行修改
ssl_certificate_key /usr/nginx/conf/2_xx.sanii.cn.key; #证书,路径自行修改
server_name xx.sanii.cn;#域名
location / {
proxy_pass http://xx.sanii.cn:3333;#原地址
}
}
配置完毕重启nginx服务
service restart nginx
访问:https://xx.sanii.cn 是不是高大上了许多?
开机自启
注意事项,frp只能通过systemd方式自启
我尝试过rc.local加入自启脚本均无效,搞了很久尝试systemd才成功.
进入/etc/systemd/system目录,创建一个frp.service文件
[Unit]
Description=frpc
Wants=network-online.target
After=network.target network-online.target
Requires=network-online.target
[Service]
ExecStart=/home/pi/github/frp_0.33.0_linux_arm/frpc -c /home/pi/github/frp_0.33.0_linux_arm/frpc.ini
#ExecStart=/home/pi/github/frp_0.33.0_linux_arm/run.sh
ExecStop=/bin/kill $MAINPID
Restart=always
RestartSec=5
StartLimitInterval=0
[Install]
WantedBy=multi-user.target
相关命令
#重新加载配置文件
sudo systemctl daemon-reload #service文件改动后要重新reload一下(类似刷新到缓存里)
sudo systemctl enable frp.service #设置开机启动
sudo systemctl status frp.service #查询自启状态
注意两点:
Wants=network-online.target
After=network.target network-online.target
Requires=network-online.target
在网络加载完毕才执行脚本,不配置将在网络配置完成之前执行,导致报错connect: Network is unreachable.
ExecStart=/home/pi/github/frp_0.33.0_linux_arm/frpc -c /home/pi/github/frp_0.33.0_linux_arm/frpc.ini
该脚本格式为
frpc -c frpc.ini
坑
要保证frpc和frpc.ini为绝对路径,我尝试过ExecStart=/home/pi/github/frp_0.33.0_linux_arm/run.sh
run.sh为启动脚本,实测也无法启动.
参考资料
https://www.mmuaa.com/post/537d04e936b78620.html
https://blog.csdn.net/u013144287/article/details/78589643/
本文由 SAn 创作,采用 知识共享署名4.0 国际许可协议进行许可
本站文章除注明转载/出处外,均为本站原创或翻译,转载前请务必署名
最后编辑时间为:
2020/10/16 16:21
中通 申通 圆通 顺丰 百世快递单号查询、购买单号网www.kuaid100.cn
很好用赞了
测试11111