menu 鲸落の小窝
Frp内网穿透及配置教程
79 浏览 | 2020-06-24 | 阅读时间: 约 3 分钟 | 分类: 树莓派,技术 | 标签: 树莓派,frp内网穿透,Linux知识

frp是什么

简单地说,frp就是一个反向代理软件,它体积轻量但功能很强大,可以使处于内网或防火墙后的设备对外界提供服务,它支持HTTP、TCP、UDP等众多协议。

官方参考文件:

frp官方GitHub文档:https://github.com/fatedier/frp
frp官方GitHub下载页面:https://github.com/fatedier/frp/releases
附:GitHub下载加速:https://gproxy.cn/

准备工作

1.有公网IP的实体机
2.访问目标设备
3.简单的Linux基础

!!注意!!

下载客户端和服务端是一定要看清自己系统的架构,Linux下查看系统版本的方法:

方法一:uname -a
方法二(推荐):lsb_release -a

以我的树莓派为举个栗子:

因为frp的原理是利用服务端(所准备的VPS)进行100%转发,因而VPS的速度直接决定了之后连接的质量,请根据自己的需要选择相应主机配置。

Frps 服务端配置

完整配置加注释版

#[common]是主要的字段
[common]
#绑定地址,默认0.0.0.0,不要用127.0.0.1,因为这样外部无法访问
bind_addr = 0.0.0.0
# 设置连接token
token = 12345678
#绑定服务端口
bind_port = 7000
#绑定udp端口
bind_udp_port = 7001
#用于kcp协议的udp端口,它可以与“绑定端口”相同,如果未设置,则在frps中禁用kcp
kcp_bind_port = 7000
#指定web服务端口
vhost_http_port = 80
vhost_https_port = 443
#设置frp仪表盘 地址 端口
dashboard_addr = 0.0.0.0
dashboard_port = 7500
# 仪表盘 账号 密码
dashboard_user = admin
dashboard_pwd = admin
# Frps日志存储
log_file = ./frps.log
# Frps日志级别
log_level = info
# 最大日志天数
log_max_days = 3
# 对客户端的心跳超时 0不限制 默认为90
heartbeat_timeout = 90
# 允许客户端绑定的端口 不设置则不限制
allow_ports = 2000-3000,3001,3003,4000-50000
# 最大池计数,不知道是什么东东
max_pool_count = 5
# 每个客户端可以使用最大端口数,默认值为0表示没有限制
max_ports_per_client = 0
# 对客户端的时间验证,为0则不验证
authentication_timeout = 0
# 穿透web服务时可以指定二级域名,前提是要把前一级域名泛解析到ip 二级前缀.主域名
subdomain_host = 绑定的主域名
#TCP多路复用,默认启用
tcp_mux = true

懒人复制版 (记得改参数)

[common]
bind_addr = 0.0.0.0
#连接token
token = 12345678
bind_port = 7000
bind_udp_port = 7001
kcp_bind_port = 7000
#web服务
vhost_http_port = 80
vhost_https_port = 443
dashboard_addr = 0.0.0.0
# 仪表盘
dashboard_port = 7500
dashboard_user = admin
dashboard_pwd = admin
log_file = ./frps.log
log_level = info
log_max_days = 3
heartbeat_timeout = 90
max_pool_count = 5
max_ports_per_client = 0
authentication_timeout = 0
# web二级域名
subdomain_host = 绑定的主域名
tcp_mux = true

Frpc 客户端配置

[common]
# 服务器ip 连接端口 token
server_addr = 0.0.0.0
server_port = 7000
token = 12345678
# 代理名字 用户名.隧道名
user = your_name
# 失败后不退出程序!!!重要
login_fail_exit = false
tcp_mux = true
protocol = tcp
dns_server = 114.114.114.114
#日志相关
log_file = ./frpc.log
log_level = info
log_max_days = 3
disable_log_color = false
# 隧道
[ssh]
type = tcp
#local_ip =
local_port = 22
remote_port = 2222
use_encryption = true
#加密
use_compression = true
#压缩
[web]
type = http
local_ip = 127.0.0.1
local_port = 80
use_encryption = false
use_compression = true
#http验证 可选
#http_user = admin
#http_pwd = admin
#二级域名
custom_domains = 

Frp服务在Linux下的自启动

这里介绍两种方法,我们将在服务端和客户端分别使用。

方法一:Systemctl(适用于单个frp进程)

在/lib/systemd/system/下新建一个名为frp.service的文件。

sudo nano /lib/systemd/system/frp.service

写入以下内容:

[Unit]
Description=frpc service
#控制frpc依赖网络在线后启动
After=network.target syslog.target network-online.target
Wants=network.target
Requires=network-online.target

[Service]
Type=simple
#启动服务的命令(此处写你的frps(frpc)的实际安装目录)
ExecStart=/usr/local/frp/frpc -c /usr/local/frp/frpc.ini

[Install]
WantedBy=multi-user.target

保存并退出,然后启动frp服务并设置开机自启动:

sudo systemctl start frp
sudo systemctl enable frp

其他systemctl命令

sudo systemctl restart frps #重启 
sudo systemctl stop frps #停止
sudo systemctl status frps #查看应用日志 

方法二Supervisor

因为如果用Systemctl来给树莓派设置开机自启的话,树莓派很大概率会出现unreachable错误,unreachable就是路由表里没这个项,路由表里没这个项是因为没联网,没联网是因为联网服务还没起它就起了。为了避免这个错误,我们使用Supervisor来进行开机自启,因为Supervisor支持自动重启,这样就可以解决错误发生。

首先我们需要安装Supervisor:

sudo apt install supervisor

然后我们在/etc/supervisor/conf.d下创建配置文件 frpc.conf:

注释版

[program:frpc] # 进程项目名称
command= /usr/bin/frpc -c /etc/frp/frpc.ini ; 程序启动命令,用绝对路径
autostart=true      ; 在supervisord启动的时候也自动启动
startsecs=5         ; 启动5秒后没有异常退出,就表示进程正常启动了,默认为1秒
autorestart=true    ; 程序退出后自动重启,可选值:[unexpected,true,false],默认为unexpected,表示进程意外杀死后才重启
startretries=5       ; 启动失败自动重试次数,默认是3
user=root            ; 用哪个用户启动进程,默认是root
priority=999         ; 进程启动优先级,默认999,值小的优先启动
stopasgroup=false     ;默认为false,进程被杀死时,是否向这个进程组发送stop信号,包括子进程
killasgroup=false     ;默认为false,向进程组发送kill信号,包括子进程

复制版

[program:frpc]
command= /usr/bin/frpc -c /etc/frp/frpc.ini
autostart=true
startsecs=5
autorestart=true
startretries=5
user=root
priority=999
stopasgroup=false
killasgroup=false

重要:写完后,要重新加载一下Supervisor

root用户进入Supervisor命令行模式

输入:supervisorctl
更新列表:update
停止进程:stop XXX
开始进程:start XXX
重启进程:restart XXX
查看运行状态:status

Frp服务在windowns10下的自启动

根据版本选择架构

cmd到当前目录运行命令:

frpc -c frpc.ini

在当前目录新建一个frp.bat文件

frp.bat

@echo off
if "%1" == "h" goto begin
mshta vbscript:createobject("wscript.shell").run("""%~nx0"" h",0)(window.close)&&exit
:begin
REM
# 改成你的目录
cd C:\Users\Administrator\Desktop\frp_0.33.0 win版
frpc -c frpc.ini
exit

把frp.bat添加到计划启动就可了

有什么意见可以在下方评论区吐槽呐~,邮箱填QQ邮箱,昵称为必填项,网站选填

发表评论

email
web

全部评论 (暂无评论)

info 还没有任何评论,你来说两句呐!