一、frp简述
frp 是一个高性能的反向代理应用,可以帮助您轻松地进行内网穿透,对外网提供服务,支持 tcp, http, https 等协议类型,并且 web 服务支持根据域名进行路由转发。就是nat地址转换
二、frp说明
一个frp文件包里面包括frpc、frps以及相应的配置文件。内部的配置文件,如下图所示:
[root@localhost frp_0.38.0_linux_amd64]# ls
frpc frpc_full.ini frpc.ini frps frps_full.ini frps.ini frps.log LICENSE nohup.out systemd
frpc:是指 frp客户端(client)
frpc.ini:客户端配置文件
frps:是指 frp服务端(server)
frps.ini:服务端配置文件
三、frp安装
1、工具
一台有公网IP的服务器(下文称外网主机)
一台需要实现内网穿透的机器(下文称内网主机)
一个SSH工具(xshell、Mobaxterm或putty)
一个域名(如果只是建立SSH反向代理则不需要域名)。
2、获取
windows环境中,推荐下载 frp_0.20.0_windows_amd64.zip
linux环境中,推荐下载 frp_0.20.0_linux_amd64.tar.gz
具体还是看情况而定,可以自己选取版本、看操作系统选择32位或64位的。
下载地址传送门: https://github.com/fatedier/frp/releases
3、安装
3.1 服务端安装,自行搭建服务端配置参考(必须有公网ip)
外网主机(带有公网ip的服务器)需要安装服务端的frp
(1)解压
[root@localhost net]# tar -xf frp_0.38.0_linux_amd64.tar.gz
[root@localhost net]# ls
frp_0.38.0_linux_amd64 frp_0.38.0_linux_amd64.tar.gz
(2)修改配置文件
修改服务器配置文件,frps.ini文件。使用vi指令对目标文件进行编辑。
[root@localhost frp_0.38.0_linux_amd64]# cat frps.ini
[common]
bind_port = 7000
vhost_http_port = 8080
[common]部分是必须有的配置,其中bind_port是自己设定的frp服务端端口,vhost_http_port是自己设定的http访问端口。
以下配置适合0.10.0~0.16.1版本
frp客户端与服务端0.9.3及以下版本兼容,0.10.0~0.16.1版本兼容,使用时需要注意
0.18.0以上版本把配置中的“privilege_”字段去掉即可
[common]
bind_addr = 0.0.0.0
#服务器IP,0.0.0.0为服务器全局所有IP可用,假如你的服务器有多个IP则可以这样做,或者填写为指定其中的一个服务器IP,支持IPV6
bind_port = 7000
#通讯端口,用于和客户端内网穿透传输数据的端口,可自定义
bind_udp_port = 7001
#UDP通讯端口,用于点对点内网穿透
kcp_bind_port = 7000
#用于KCP协议UDP通讯端口,在弱网环境下传输效率提升明显,但是会有一些额外的流量消耗。设置后frpc客户端须设置protocol = kcp
vhost_http_port = 80
#http监听端口,注意可能和服务器上其他服务用的80冲突,比如centos有些默认有Apache,可自定义
vhost_https_port = 443
#https监听端口,可自定义
dashboard_port = 7500
#通过浏览器查看 frp 的状态以及代理统计信息展示端口,可自定义
dashboard_user = admin
#信息展示面板用户名
dashboard_pwd = admin
#信息展示面板密码
log_max_days = 7
#最多保存多少天日志
privilege_token = frp888
#特权模式认证密钥
privilege_allow_ports = 1-65535
#端口白名单,为了防止端口被滥用,可以手动指定允许哪些端口被使用
max_pool_count = 100
#每个内网穿透服务限制最大连接池上限,避免大量资源占用,可自定义
authentication_timeout = 0
#frpc 所在机器和 frps 所在机器的时间相差不能超过 15 分钟,因为时间戳会被用于加密验证中,防止报文被劫持后被其他人利用,单位为秒,默认值为 900,即 15 分钟。如果修改为 0,则 frps 将不对身份验证报文的时间戳进行超时校验。国外服务器由于时区的不同,时间会相差非常大,这里需要注意同步时间或者设置此值为0
log_file = frps.log
log_level = info
(3)启动
启动frp服务端,命令如下:
[root@localhost frp_0.38.0_linux_amd64]# ./frps -c ./frps.ini
3.2客户端安装
(1)解压
使用tar指令解压tar.gz文件 一样通3.1
(2)修改配置文件
使用vi命令,修改frpc.ini
[root@localhost frp_0.38.0_linux_amd64]# cat frpc.ini
[common]
server_addr = 172.16.10.1
server_port = 7000
[ssh]
type = tcp
local_ip = 172.16.10.1
local_port = 22
remote_port = 6000
[mysql]
type = tcp
local_port = 3306
remote_port = 3306
#use_encryption = true
#use_compression = true
[tomcat]
type = http
local_port = 8083
#custom_domains = tomcat.xxxx1.com
#remote_port =8083
[web]
type = http
local_port = 80
custom_domains = www.xxx.com
[common]中的server_addr填frp服务端的ip(也就是外网主机的IP),server_port填frp服务端的bind_prot。
[ssh]中的local_port填本机开放的ssh端口,一般ssh端口默认为22。
[mysql]中的 type对应服务端配置,local_port填服务端mysql端口。
[tomcat]中的 type对应服务端配置,local_port填服务端toncat端口。
[web]中的type对应服务端配置。local_port填f服务器的web端口。
以下配置适合0.10.0~0.16.1版本
frp客户端与服务端0.9.3及以下版本兼容,0.10.0~0.16.1版本兼容,使用时需要注意
0.18.0以上版本把配置中的“privilege_”字段去掉即可
[common]
server_addr = www.yourdomain.com
#frps服务端地址
server_port = 7000
#frps服务端通讯端口,客户端连接到服务端内网穿透传输数据的端口
privilege_token = frp888
#特权模式密钥,客户端连接到FRPS服务端的验证密钥
log_file = frpc.log
#日志存放路径
log_level = info
#日志记录类别,可选:trace, debug, info, warn, error
log_max_days = 7
#日志保存天数
login_fail_exit = false
#设置为false,frpc连接frps失败后重连,默认为true不重连
protocol = kcp
#KCP协议在弱网环境下传输效率提升明显,但是对frps会有一些额外的流量消耗。服务端须先设置kcp_bind_port = 7000,www.yourdomain.com服务端已设置支持
[http_dsm]
#穿透服务名称,不能和其他已建立的相同,使用公共服务器的建议修改成复杂一点的名称,避免与其他人冲突,很多路由器内置frpc的默认服务名称为[web],很容易很其他人冲突
type = http
#穿透协议类型,可选:tcp,udp,http,https,stcp,xtcp,这个设置之前必须自行搞清楚应该是什么
local_ip = 192.168.1.2
#本地监听IP,可以是本机IP,也可以是本地的局域网内某IP,例如你的局域网是互通的,你可以在路由器上安装frpc,然后local_ip填的内网其他机器ip,这样也可以把内网其他机器穿透出去
local_port = 5000
#本地监听端口,通常有ssh端口22,远程桌面3389等等
use_compression = true
#对传输内容进行压缩,可以有效减小 frpc 与 frps 之间的网络流量,加快流量转发速度,但是会额外消耗一些 cpu 资源
use_encryption = true
#将 frpc 与 frps 之间的通信内容加密传输
custom_domains = dsm.yourdomain.com
#自定义域名访问穿透服务,一般域名设置了二级域名泛解析以后,这里填*.yourdomain.com即可,*自定义,如果不想用域名或者自行搭建frps没有域名,则穿透协议类型选择tcp,见以下tcp部分详解
#通过app访问的注意,DS file,DS video,DS audio,DS finder里地址栏默认都是5000端口,穿透后地址栏须填写为【穿透域名:80】,DS photo由于本地local_port为80,穿透后也为80的话直接写域名地址即可
[https_dsm]
type = https
local_ip = 192.168.1.2
local_port = 5001
use_compression = true
use_encryption = true
custom_domains = dsm.yourdomain.com
#以上https配置同http,注意开启https(默认5001端口),证书配置在客户端,无证书的注意浏览器访问时添加信任
[http_transmission]
type = http
local_ip = 192.168.1.2
local_port = 9091
use_compression = true
use_encryption = true
custom_domains = tr.yourdomain.com
#transmission下载客户端
[http_rutorrent]
type = http
local_ip = 192.168.1.2
local_port = 80
use_compression = true
use_encryption = true
custom_domains = rt.yourdomain.com
#rutorrent下载客户端,用Download Station的类似,注意端口
[http_blog]
type = http
local_ip = 192.168.1.2
local_port = 80
use_compression = true
use_encryption = true
custom_domains = blog.yourdomain.com
[http_plex]
type = http
local_ip = 192.168.1.2
local_port = 32400
use_compression = true
use_encryption = true
custom_domains = plex.yourdomain.com
#plex视频服务器
[https_feixun]
privilege_mode = true
type = http
local_ip = 192.168.1.1
#路由器ip
local_port = 80
use_compression = true
use_encryption = true
authentication_timeout = 0
custom_domains = feixun.yourdomain.com
#穿透路由器
[tcp_ssh]
#ssh连接
type = tcp
local_ip = 192.168.1.2
local_port = 22
use_compression = true
use_encryption = true
remote_port = 3463
#远程端口,一般tcp和udp需要设置,不需要设置custom_domain,访问时为【frps服务器地址+远程端口】,没有域名的用这种方式通过【frps服务器地址+远程端口】即可实现访问
[udp]
type = udp
local_ip = 192.168.1.2
local_port = 53
use_compression = true
use_encryption = true
remote_port = 3453
访问时为【frps服务器地址+远程端口】
(3)运行
运行frp客户端,命令如下:
./frpc -c ./frpc.ini
(若要在后台运行,需要使用其他命令,后面详述)
若在服务端会看到"start proxy sucess"字样,即连接成功。
四、使用
SSH连接:
通过客户端IP:6000和服务器端建立SSH连接。
[root@localhost v3]# ssh 172.16.10.1 -p 6000
root@172.16.10.1's password:
Last login: Thu Dec 30 10:19:31 2021 from 192.168.0.213
五、后台运行
现阶段只是让frp暂时运行,功能也已经实现,但是只要关闭ssh连接,frp也会自动停止。若想要frp一直保持运行状态怎么办???
两个办法
一个是screen命令,
一个是nohup命令,
一个是tmux命令,
1、screen命令
先使用screen命令创建一个会话。
screen -dmS frp
然后进入这个会话。
screen -r frp
最后使用运行frp的指令,在后面加上" &" (一定是要在frp目录下使用该命令)
./frps -c ./frps.ini &
2、nohup命令
nohup指令的使用方法相对简单,只需要在nohup后面加上frp的运行指令即可。下面示范的指令是运行frp客户端。(同样,如果之前断开了SSH连接,记得用cd指令进入frp的目录先。)
nohup ./frpc -c ./frpc.ini &
这样就成功让frp在后台运行了。
3、关闭
有了后台启动,自然就有相应的关闭之法。关闭frp,直接杀进程就可以啦!
ps -aux|grep frp| grep -v grep
kill -9 进程号
例如:
[root@localhost ~]# ps -aux|grep frp| grep -v grep
[root@localhost ~]# root 3600 0.1 0.1 110188 9484 pts/0 Sl 15:04 0:00 ./frpc -c ./frpc.ini
[root@localhost ~]#kill -9 3600
-
一、北京阿里云frp线路1:v0.35.1版本
连接地址为:vip.frp.wlphp.com:7000
状态查询:http://vip.frp.wlphp.com:7500
查询帐号和密码为:admin 905507
默认http端口为88
默认https端口为99
端口开放:5000-6000
token(免费获取):https://ad.wlphp.com/ad_frps.php
提供四级域名*.vip.frp.wlphp.com(*自定义)
本服务器长期服务
FRP客户端与服务端通用脚本(Windows系统)
Windows系统:双击 start_c.bat或者start_s.bat