frp 内网穿透
背景:公司测试环境服务器全属于192.168.130.0/24,为了方便测试人员请求域名访问内网中的测试环境,特用frp进行穿透。我们需要一台有公网IP的服务器。
FRP 采用 Go 语言开发,支持 Windows、Linux、MacOS、ARM等多平台部署。FRP
安装非常容易,只需下载对应系统平台的软件包,并解压就可用了。
目标: 访问 testxc.youpenglai.com,对应内网web的8080端口下的tomcat。
192.168.133.130 内网web
116.62.57.91 公网服务器IP
域名 testxc.youpenglai.com
准备环境:
(1)公网服务器1台
(2)内网服务器1台(我这里演示的是linux环境,win10上面vmware安装的centos7)
(3)公网服务器绑定域名1个(实现二1中(1)功能不需要公网服务器绑定域名,二1中(2)功能必须需要公网服务器绑定域名)
(4)内网服务器部署一个web服务,可以用tomcat模拟,这里就不演示了
安装frp:
1、公网服务器与内网服务器都需要下载frp进行安装
2、下载地址是https://github.com/fatedier/frp/releases,下载linux版本frp_0.21.0_linux_amd64.tar.gz
3、上传到两台服务/usr/local该目录下,解压tar -zxvf frp_0.21.0_linux_amd64.tar.gz
4、重命名frp_0.21.0_linux_amd64为 frp,这里主要关注4个文件,分别是frpc、frpc.ini和frps、frps.ini,前者两个文件是客户端所关注文件,后者两个文件是服务端所关注两个文件
5、配置服务端(公网服务器),首先删掉frpc、frpc.ini两个文件,然后再进行配置,vi ./frps.ini,
[common]
bind_addr = 0.0.0.0
bind_port = 7100 #与客户端绑定的进行通信的端口
#bind_udp_port = 7201
#kcp_bind_port = 7200
vhost_http_port = 80 #访问客户端web服务自定义的端口
vhost_https_port = 443 #访问客户端web服务自定义的端口
dashboard_addr = 0.0.0.0
dashboard_port = 7500
dashboard_user = admin
dashboard_pwd = AL1EVZoQ1pbRit1
log_file = ./frps.log
log_level = info
log_max_days = 3
token = JBKKdGKhIfeNrsW #给 FRP 服务端加上身份验证
max_pool_count = 5
max_ports_per_client = 0
authentication_timeout = 900 #配置超时时间
tcp_mux = true
FRP 服务端增加一个 Dashboard
通过 Dashboard 可以方便的查看 FRP 的状态以及代理统计信息展示,要使用这个功能首先需要在 FRP 服务端配置文件中指定 Dashboard 服务使用的端口,网页访问:http://116.62.57.91:7500/
默认情况下只要知道 FRP 服务端开放的端口,任意 FRP 客户端都可以随意在服务端上注册端口映射,这样对于在公网上的 FRP
服务来说显然不太安全。FRP 提供了身份验证机制来提高 FRP 服务端的安全性。要启用这一特性也很简单,只需在 FRP 服务端和 FRP
客户端的 common 配置中启用 token 参数就行。启用这一特性后,只有 FRP 服务端和 FRP 客户端的 common 配置中的 token 参数一致身份验证才会通过,FRP
客户端才能成功在 FRP 服务端注册端口映射。
保存然后启动服务./frps -c ./frps.ini,这是前台启动,后台启动命令为nohup ./frps -c ./frps.ini &
6、配置客户端(内网服务器),首先删掉frps、frps.ini两个文件,然后再进行配置,vi ./frpc.ini
[common]
server_addr = 116.62.57.91 #公网服务器ip
server_port = 7100 #与服务端bind_port一致
token = JBKKdGKhIfeNrsW
#公网访问内部web服务器以http方式
[httptestxc] #客户端通过服务器与用户之间的通道名,每个客户端必须不一样
type = http #访问协议
local_ip = 127.0.0.1
local_port = 8080 #内网web服务的端口号
remote_port = 80 #是服务器端对外提供本机服务的端口
use_encryption = false
use_compression = true
custom_domains = testxc.youpenglai.com #所绑定的公网服务器域名,一级、二级域名都可
注意:[httptestxc]是客户端通过服务器与用户之间的通道名,每个客户端必须不一样,remote_port是服务器端对外提供本机服务的端口号,即用户访问116.62.57.91:80,相当于连接127.0.0.1:8080。
保存然后执行./frpc -c ./frpc.ini启动,这是前台启动,后台启动命令为nohup ./frpc -c ./frpc.ini &
成功:
FRP 客户端热加载配置文件
当修改了 FRP 客户端中的配置文件,从 0.15 版本开始可以通过 frpc reload 命令来动态加载配置文件,通常会在 10 秒内完成代理的更新。
启用此功能需要在 FRP 客户端配置文件中启用 admin 端口,用于提供 API 服务。配置如下:
$ vim frpc.ini
[common]
admin_addr = 127.0.0.1
admin_port = 7400
重启 FRP 客户端
,以后就可通过热加载方式进行 FRP 客户端配置变更了。
补充后期遇到的问题!!!
注意:客户端的时钟不能和服务器端时钟相差太大!否则会出现认证超时的错误:authorization timeout
这个超时时间可以在配置文件中通过 authentication_timeout 这个参数来修改,单位为秒,默认值为 900,即 15 分钟。如果修改为 0,则 frps 将不对身份验证报文的时间戳进行超时校验。
使用命令:date 查看当前计算机时间
使用命令:date -s “YYYY-MM-DD HH-MM-SS” 设置时间
使用命令:hwclock -w 写入flash
参考:
https://www.hi-linux.com/posts/25686.html#frp-管理
http://www.senra.me/nat-traversal-series-frp-next-generation-high-performance-ngrok-alternative/
https://www.jianshu.com/p/00c79df1aaf0
http://www.cnblogs.com/sanduzxcvbnm/p/8508741.html