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-%E7%AE%A1%E7%90%86
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

### 使用FRP实现内网穿透配置教程 #### 准备工作 为了成功部署并运行FRP以达成内网穿透的目的,需准备好两部分资源:服务端与客户端。服务端通常是指一台具有公网IP地址的机器,可以是云服务商提供的虚拟专用服务器;而客户端则是位于私有网络内部的目标设备,比如个人计算机或是像树莓派这样的小型计算平台[^4]。 #### 下载安装FRP软件包 对于Linux系统的用户来说,在官方GitHub仓库中能够找到适用于不同架构的操作系统版本下的二进制文件。下载完成后解压至指定目录下即可完成初步安装操作[^3]。 #### 配置服务端(`frps.ini`) 创建或编辑名为`frps.ini`的服务端配置文件,设置必要的参数如下所示: ```ini [common] bind_port = 7000 vhost_http_port = 80 token = your_token_here dashboard_port = 7500 allow_ports = 2000-3000,3001,3003,4000-50000 max_pool_count = 5 subdomain_host = frp.yourdomain.com ``` 上述配置项解释: - `bind_port`: 指定用于监听来自客户端连接请求的TCP端口号; - `vhost_http_port`: 当启用HTTP(S)协议转发功能时所使用的本地监听端口,默认为80; - `token`: 设置通信密钥保障安全性; - `dashboard_port`: Web管理界面开放给外部访问的端口; - `allow_ports`: 明确允许被映射出去的具体范围内的端口列表; - `max_pool_count`: 控制最大并发数限制; - `subdomain_host`: 自定义子域名前缀指向该实例所在主机名[^1]。 #### 启动服务端程序 通过命令行启动服务端进程,并将其设为后台常驻任务执行: ```bash nohup ./frps -c /path/to/frps.ini & ``` #### 编写客户端配置(`frpc.ini`) 同样地,在客户机上也需要建立相应的配置文档——即`frpc.ini`: ```ini [common] server_addr = x.x.x.x # 替换成实际VPS IP 地址 server_port = 7000 # 应同于服务端设定一致 token = your_token_here [ssh] type = tcp # 协议类型 local_ip = 127.0.0.1 # 要暴露出来的本机服务ip local_port = 22 # 对应的服务端口 remote_port = 6000 # 外部可访问到此服务的端口编号 ``` 这里特别注意的是要确保`server_addr`填写正确无误以及两端之间保持相同的认证令牌(token)[^2]。 #### 运行客户端应用程序 最后一步就是在终端里输入下面这条指令让客户端正式上线运作起来: ```bash ./frpc -c /path/to/frpc.ini ``` 此时理论上已经完成了整个过程中的所有步骤,可以通过测试验证是否真的实现了预期效果。如果一切正常的话,则意味着现在可以从互联网上的任何地方轻松触及原本处于防火墙之后的应用和服务了。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值