Frp协议编译构建和基本使用

Frp概述

Frp项目是一个基于Go语言开发的反向代理项目。它允许用户将位于NAT内网和防火墙里的本地服务暴露给互联网,目前支持的的通信协议包括:TCP、UDP、HTTP、HTTPS。使用Frp协议我们可以将请求通过域名转发到内部服务。 frp现在还支持P2P连接模式。

编译Frp

下载Frp项目源码

下载地址:
https://github.com/fatedier/frp

搭建go开发环境

# Go官方网站https://golang.org/dl/
tar -C /usr/local -xzf go1.17.linux-amd64.tar.gz #解压缩代码包到系统目录
vim ~/.bashrc #打开环境变量目录
export PATH=$PATH:/usr/local/go/bin  ##添加Go的环境变量
source ~/.bashrc  #使环境变量生效
go version   #查看go的版本信息

编译Frp项目

#下载frp项目
git clone https://github.com/fatedier/frp.git 
cd frp

#编译Frp项目
make 

问题处理

编译过程中出现如下错误:
509: certificate is valid for *.onedns.net, onedns.net, not proxy.golang.org报错

这个错误是由于SSL证书验证不通过导致的。错误信息表明证书是针对 *.onedns.net 和 onedns.net 进行验证的,而不是针对 proxy.golang.org。这种情况通常出现在使用代理服务器时,代理服务器可能会替换或篡改 SSL 证书,导致验证失败。在使用 Go 语言的 go get 命令下载依赖包时,可能会遇到这个问题。解决这个问题的方法是配置 Go 语言的环境变量 GOPROXY,将代理服务器地址设置为正确的值。可以使用以下命令设置环境变量:

export GOPROXY=https://goproxy.cn,direct  

另外,如果你使用的是 Go 1.13 及以上版本,还可以使用 go env -w 命令进行全局配置:

go env -w GOPROXY=https://goproxy.cn,direct

报错frpc login to server failed: i/o deadline reached
可以在客户端的配置文件frpc.ini中加入一条配置tls_enable = true,tls是一种加密协议,可以避免信息被过滤掉。

Frp协议的原理

Frp协议的基本原理是采用“反向代理”技术,将公网上的请求转发到内网计算机上,从而实现内网穿透目的。其基本流程如下:
1.在公网上配置一个Frp服务器,该服务器具有公网IP地址和一个开放的端口。
2.在内网计算机中配置一个Frp客户端,该客户端连接到Frp服务器,并注册需要进行穿透的服务信息(IP地址、端口号等)。
3.当Frp客户端需要被外部应用访问时,它会向Frp服务器发送请求,请求Frp服务器将该请求转发给目标内网服务。
4.Frp服务器通过与Frp客户端之间建立的连接,将请求转发到Frp客户端中连接的目标内网服务。
5.目标内网服务响应请求并将结果返回给Frp客户端,Frp客户端将结果转发给Frp服务器,最终返回给请求方。

需要注意的是,Frp协议并不能真正地穿透内网,它只是通过合理的端口映射和数据传输技术,将内网中的服务展现在公网上。同时,Frp客户端和Frp服务器之间的通信采用了安全协议,并通过密码进行认证,确保通信的安全性和可靠性。Frp协议是一种基于反向代理的TCP/UDP穿透技术,它利用公网服务器将内网中的服务映射到公网上,从而实现内网穿透、跨防火墙访问等功能。

Frp协议的作用

Frp是一款TCP/UDP反向代理工具,它可以将内网计算机映射到公网上,从而实现远程访问、穿透NAT和防火墙、内网穿透等功能。
具体来说,Frp主要有以下三个作用:
1.穿透内网:Frp可以将内网服务通过一个外网服务器进行转发,从而实现内网穿透。
2.穿透防火墙:Frp可以绕过防火墙限制,将内网服务发布到公网上。在一些特殊情况下,例如公共场所网络,防火墙通常会限制对特定端口的访问,这些限制可以通过Frp来绕过。
3.给内网计算机提供公网访问:企业中,一些内网服务器可能需要被外部访问,例如Web服务器、FTP服务器等。这种场景下,Frp可以作为一个反向代理服务器,将来自Internet的请求转发到内网服务器上。
由于Frp开源,支持跨平台,使用方便,并且具有较高的稳定性和安全性,成为一种比较受欢迎的内网穿透工具。在实际应用中,Frp可以方便远程工作、文件共享、视频监控等多种用途。

配置Frp项目

公网服务器部署FRP服务端frps

#frps.ini  
[common]
bind_port = 7000  #用于和FRP客户端通信
kcp_bind_port = 7000 #加速TCP访问
token = 1234 #核实身份用, 加了更安全
#启动服务端
 ./frps -c ./frps.ini

内网设备部署FRP客户端frpc

#frpc.ini  
[common]
server_addr = x.x.x.x    #公网服务器IP
server_port = 7000       #服务器端口
protocol = kcp           #开启加速
token = 12345            #与服务端一致
login_fail_exit = false  #无网络时一直等待不退出

[vnc]
type = tcp
local_ip = x.x.x.x
local_port = 5900
remote_port = 5900
use_encryption = true
use_compression = true

[ssh]
type = tcp
local_ip = x.x.x.x
local_port = 22
remote_port = 6000
use_encryption = true
use_compression = true
#启动客户端
 ./frpc -c ./frpc.ini 
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
Frp(Fast Reverse Proxy)是一个基于Go语言开发的高性能反向代理工具,它的基本原理如下: 1. 客户端与服务器建立连接:Frp客户端会与Frp服务器建立连接,这个连接是客户端与服务器之间的通道。 2. 客户端注册服务:Frp客户端会向Frp服务器注册需要暴露的服务。客户端会提供服务的类型(如TCP、UDP)、本地监听地址和端口,以及目标地址和端口。 3. 服务器接收注册信息:Frp服务器接收到来自客户端的注册信息,并将其保存在内存中以便后续使用。 4. 客户端与目标主机建立连接:当有外部用户请求访问Frp服务器上的某个服务时,Frp服务器会将请求转发给相应的客户端。 5. 客户端接收请求:Frp客户端接收到来自Frp服务器的转发请求后,会根据注册信息,建立与目标主机的连接。 6. 目标主机返回响应:客户端与目标主机之间建立连接后,所有来自目标主机的响应都会通过这个连接返回给Frp客户端。 7. 客户端将响应转发给服务器:Frp客户端将目标主机的响应转发给Frp服务器。 8. 服务器将响应返回给请求方:最后,Frp服务器将目标主机的响应返回给请求方,完成整个请求-响应的过程。 通过这种方式,Frp实现了将位于内网的服务暴露给外部网络,实现了内网穿透的功能。同时,Frp还支持多种协议和自定义配置,可以满足不同场景下的需求。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

码农飞飞

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值