frp反向代理应用的用法和配置

news/2025/2/12 3:40:58/

文章目录

    • Frp用法
    • TCP协议反向代理
    • HTTP协议反向代理
    • UDP协议反向代理
    • STCP协议反向代理
    • xtcp代理访问模式
    • 将Unix域套接字转为TCP协议
    • 将内网http服务暴露给外网
    • frp的控制台

Frp用法

Frp是一款基于Go语言的反向代理应用, 支持多种协议包括:TCP、UDP、HTTPS、HTTP、STCP、XTCP等, 通过使用Frp我们可以很轻松的实现内网穿透。
下面介绍一下这几种协议在Frp中的用法。

TCP协议反向代理

通过Frp将内网的ssh服务以tcp协议的形式暴露到互联网上, 这个框架的原理图如下所示:

 +-+-+-+-+       +-+-+-+-+      +-+-+-+-+-+-+-+|client |<----->|  frps |<---->|  frpc + ssh |   +-+-+-+-+       +-+-+-+-+      +-+-+-+-+-+-+-+

框架中frp服务端的配置如下:

# frps.ini
[common]
bind_port = 7000

frp客户端的配置如下:

# frpc.ini
[common]
server_addr = x.x.x.x
server_port = 7000[ssh]
type = tcp
local_ip = 127.0.0.1
local_port = 22
remote_port = 6000  

HTTP协议反向代理

通过frp将内网的webService以HTTP协议暴露给互联网,对应的原理如下图所示:

 +-+-+-+-+       +-+-+-+-+      +-+-+-+-+-+-+-+|client |<----->|  frps |<---->|  frpc + web |   +-+-+-+-+       +-+-+-+-+      +-+-+-+-+-+-+-+

服务端的配置如下:

# frps.ini
[common]
bind_port = 7000
vhost_http_port = 8080

客户端的配置如下:

# frpc.ini
[common]
server_addr = x.x.x.x
server_port = 7000[web]
type = http
local_port = 80
custom_domains = www.example.com

UDP协议反向代理

通过Frp将内网的DNS请求通过UDP协议暴露给互联网, 应的原理图如下图所示:

 +-+-+-+-+       +-+-+-+-+      +-+-+-+-+-+-+-+|client |<----->|  frps |<---->|  frpc + DNS |   +-+-+-+-+       +-+-+-+-+      +-+-+-+-+-+-+-+

服务端的配置如下所示:

# frps.ini
[common]
bind_port = 7000

客户端的配置如下所示:

# frpc.ini
[common]
server_addr = x.x.x.x
server_port = 7000[dns]
type = udp
local_ip = 8.8.8.8
local_port = 53
remote_port = 6000

STCP协议反向代理

为了降低将某些服务直接暴露到公共网络带来的安全风险, Frp提供了STCP(Secret-TCP)协议, 该协议需要使用预共享密钥来从其他客户端访问该服务,从而提高访问的安全性。
STCP协议的原理如下图所示:

 +-+-+-+-+-+-+-+-+-+       +-+-+-+-+-+      +-+-+-+-+-+-+-+-+-+|client + frpc(C) |<----->| frps(A) | <---->|  frpc + SSH(B) |   +-+-+-+-+-+-+-+-+-+       +-+-+-+-+-+      +-+-+-+-+-+-+-+-+-+

服务端的配置如下所示:

# frps.ini
[common]
bind_port = 7000

被访问端的配置如下所示:

# frpc-server.ini
## 被访问的一端(B)
[common]
server_addr = *.*.*.*
server_port = 7000
protocol = kcp
token = 12345678[secret_tcp]
type = stcp
sk = test
local_ip = 127.0.0.1
local_port = 36900

访问端的配置如下图所示:

# frpc-client.ini
## 访问端(C)
[common]
server_addr = *.*.*.*
server_port = 7000
protocol = kcp
token = 12345678[secret_tcp_visitor]
type = stcp
role = visitor
server_name = secret_tcp
sk = test
bind_addr = 127.0.0.1
bind_port = 36900

在这种模式下访问端和被访问端都需要安装frpc客户端, 且两边都需要配置好相同的秘钥。相较于TCP协议,它的优点如下:
1.Frps服务端只需要暴露一个端口就可以了,增强了安全性。
2.由于访问端和被访问端通过秘钥访问,且都需要安装frpc,提高了服务暴露的安全性。

xtcp代理访问模式

xtcp是frp新推出的一种协议,用来解决客户端之间直接传输大量数据的问题。由于协议还不完善, 这种传输方式并不适用于所有的NAT设备。
xtcp协议通信的原理如下图所示:

 +-+-+-+-+-+-+-+-+-+       +-+-+-+-+-+      +-+-+-+-+-+-+-+-+-+|client + frpc(C) |<----->| frps(A) | <---->|  frpc + SSH(B) |   +-+-+-+-+-+-+-+-+-+       +-+-+-+-+-+      +-+-+-+-+-+-+-+-+-+

frp服务端的配置如下所示:

# frps.ini
bind_udp_port = 7001
bind_port = 7000

frp被访问的客户端的配置如下:

# frpc.ini
# 被访问的SSH端(B)
[common]
server_addr = x.x.x.x
server_port = 7000[p2p_ssh]
type = xtcp
sk = abcdefg
local_ip = 127.0.0.1
local_port = 22

frp访问端的配置如下:

# frpc.ini
# ssh访问端(C)
[common]
server_addr = x.x.x.x
server_port = 7000[p2p_ssh_visitor]
type = xtcp
role = visitor
server_name = p2p_ssh
sk = abcdefg
bind_addr = 127.0.0.1
bind_port = 6000

访问方式如下:

ssh -oPort=6000 127.0.0.1  

将Unix域套接字转为TCP协议

服务端只需要开放对应的端口就行了, 客户端对应的配置如下:

# frpc.ini
[common]
server_addr = x.x.x.x
server_port = 7000[unix_domain_socket]
type = tcp
remote_port = 6000
plugin = unix_domain_socket
plugin_unix_path = /var/run/docker.sock

将内网http服务暴露给外网

服务端的配置如下所示:

# frps.ini
[common]
bind_port = 7000

客户端的配置如下所示:

# frpc.ini
[common]
server_addr = x.x.x.x
server_port = 7000[test_static_file]
type = tcp
remote_port = 6000
plugin = static_file
plugin_local_path = /tmp/files
plugin_strip_prefix = static
plugin_http_user = abc
plugin_http_passwd = abc

通过http://x.x.x.x:6000/static/ 访问frpc所在机器上的文件

frp的控制台

frp的服务端frps提供了对应的web端控制台,通过该控制台, 我们可以监控frps的统计情况, 启动服务端控制台的配置如下所示:

http访问控制的配置如下:

[common]
# 控制台的端口号
dashboard_port = 7500
# 控制台账号和密码
dashboard_user = admin # 账号
dashboard_pwd = admin  # 密码
# 访问地址
# http://[server_addr]:7500访问

https访问控制台的配置如下所示:

[common]
# 控制台的端口号
dashboard_port = 7500# 控制的账号密码和证书
dashboard_user = admin
dashboard_pwd = admin
dashboard_tls_mode = true
dashboard_tls_cert_file = server.crt
dashboard_tls_key_file = server.key# https控制的访问地址
# https://[server_addr]:7500

frpc客户端配置控制台访问

[common]
admin_addr = 127.0.0.1
admin_port = 7400
admin_user = admin
admin_pwd = admin
# http://127.0.0.1:7400

http://www.ppmy.cn/news/953883.html

相关文章

你认为chatgpt会取代哪些工作

ChatGPT 和其他的自然语言处理技术可能会取代一些简单的文本处理工作&#xff0c;例如数据录入、信息提取和简单的客服机器人。然而&#xff0c;它不太可能取代需要专业知识和判断力的工作&#xff0c;例如医生、律师和金融分析师等。总体而言&#xff0c;ChatGPT 可以与人类合…

未来哪些职业会被chatGPT取代

目前&#xff0c;有些简单的客服工作、数据录入、信息检索等工作有可能会被聊天机器人技术所取代。不过&#xff0c;人类的创造力和想象力仍然是无法被替代的&#xff0c;因此需要人类从事的职业&#xff0c;例如艺术、医疗、法律、教育等&#xff0c;应该不会被机器人所完全取…

小智AI ChatGPT的未来:机器人是否将取代人类?

ChatGPT是一种强大的自然语言处理技术&#xff0c;它可以生成自然的语言&#xff0c;并与人类进行交互。虽然ChatGPT有着广泛的应用前景&#xff0c;但它不可能完全取代人类。 首先&#xff0c;ChatGPT是基于机器学习和深度学习技术的&#xff0c;它只能根据其训练数据中的模式…

chatgpt是否能取代程序员

ChatGPT及相关的人工智能技术在软件开发方面可以自动生成或辅助生成代码&#xff0c;实现一些简单或重复性很高的任务。但它目前仍不具备像人类程序员那样的创造力、洞察力和设计思维等高水平的技能。 尽管人工智能技术在某些方面能够取代程序员执行一些简单的任务&#xff0c…

最近爆火的ChatGPT是什么,ChatGPT对人类未来有哪些影响?

什么是ChatGPT&#xff1f; ChatGPT是一款由OpenAI人工智能研究实验室于2022年11月30日发布的全新聊天机器人模型&#xff0c;它是一种基于人工智能技术的自然语言处理工具。该模型通过学习和理解人类语言&#xff0c;能够进行智能对话&#xff0c;并根据聊天上下文进行互动&am…

ChatGPT 最可能取代的 10 种工作

ChatGPT的横空出世&#xff0c;在业界掀起了惊涛骇浪。专家表示&#xff0c;ChatGPT和相关人工智能技术可能会威胁到一些工作岗位&#xff0c;尤其是白领工作。 自去年11月发布以来&#xff0c;新型聊天机器人模型ChatGPT已经被用于各种各样的工作&#xff1a;撰写求职信、编写…

ChatGPT会取代律师这份职业吗?

如今&#xff0c;一种新型的人工智能威胁再次来袭&#xff0c;律师们可能会感到似曾相识的感觉。有人警告称&#xff0c;类似于ChatGPT的软件&#xff0c;因为具有类似于人类的语言流畅性&#xff0c;可能会取代大部分法律工作。 人工智能​的进步曾让人们预测&#xff0c;法律…

ChatGPT能完全取代软件开发吗,看看它怎么回答?

最近网上一直疯传&#xff0c;ChatGPT 最可能取代的 10 种工作。具体包括 ①、技术类工作&#xff1a;程序员、软件工程师、数据分析师 ②、媒体类工作&#xff1a;广告、内容创作、技术写作、新闻 ③、法律类工作&#xff1a;法律或律师助理 ④、市场研究分析师 ⑤、教师 ⑥、…