首页 > 其他分享 >frp(fast reverse proxy)是一款高性能的反向代理应用

frp(fast reverse proxy)是一款高性能的反向代理应用

时间:2024-09-10 15:47:10浏览次数:10  
标签:reverse frps fast token frp toml 远程桌面 frpc

frp是什么

frp(fast reverse proxy)是一款高性能的反向代理应用,专注于内网穿透。它支持多种协议,包括 TCP、UDP、KCP、HTTP、HTTPS 等,并且具备 P2P 通信功能。使用 frp,您可以安全、便捷地将内网服务暴露到公网,通过拥有公网 IP 的节点进行中转。

内网穿透使用场景

  1. 远程桌面或者是访问内网服务

个人觉得这个需求应该是最强烈的,有时需要远程桌面连接公司自己的电脑处理问题或者自己家里连着宽带的电脑,没有 frp 以前只能找类似花生壳提供的解决方案。

2. webhook 接收

接收类似 Github 或者第三方提供 Webhook 的场景。

3. 反向代理

有些国外 vps 被 gfw 墙了不能 ssh 连接,也可以通过frp 进行访问

工作原理

frp 主要由两个组件组成:客户端(frpc) 和 服务端(frps)。通常情况下,服务端部署在具有公网 IP 地址的机器上,而客户端部署在需要穿透的内网服务所在的机器上。

由于内网服务缺乏公网 IP 地址或者某些原因用户不能直接访问,用户通过访问服务端的 frps,frp 负责根据请求的端口或其他信息将请求路由到相应的内网机器,从而实现通信。实际流量会变成 client->frps->frpc

frp 架构图

环境准备

我们需要有一台公网 ip 的服务器作为 frps 服务端,这里我使用自己购买的阿里云服务器,一台实现内网穿透的windows pc作为 frpc 客户端。下表是实验环境:

#OSfrps/frpc监听端口内网穿透服务和监听端口
frps centos8 17000 N/A
frpc win10 60002 远程桌面/3389

frps 和 frpc 服务配置完成后,用户可以使用frps_ip:60002 地址远程桌面连接到内网 win10 pc。

win10 pc 开启远程桌面和检查防火墙规则

右击我的电脑->属性->远程桌面->启用远程桌面

 

另外还需要检查 win10防火墙的入站规则有没远程桌面策略或者选择关闭防火墙,还可以在跟 win10 相同的内网其他机器测试网络连通性。

 

frps server 检查 selinux 和防火墙

frps server 如果是在公有云,还要在公有云上防火墙放行相关策略

 

frps server上的centos 需要检查 selinux 和防火墙iptables 或者 firewalld

注:在国内公有云上如果使用域名,请确认域名有备案,要不然还是建议使用 ip 连接,要不然会有意想不到的连接错误。

安装部署 frp

frp 采用 Go 语言编写,只需下载对应平台的二进制文件即可执行

frps安装

下载linux frp 对应二进制包到 frps server,解压到对应目录上

# 下载 frp 二进制压缩包
wget https://github.com/fatedier/frp/releases/download/v0.57.0/frp_0.57.0_linux_amd64.tar.gz

# 解压
tar xf frp_0.57.0_linux_amd64.tar.gz -C /usr/local/
cd /usr/local/frp_0.57.0_linux_amd64/
frp程序目录

frps server的配置文件是frps.toml,frpc client的配置文件是frpc.toml,下面配置frps.toml

# 可以参考官方配置frps_full_example.toml,里面有详细配置说明
# https://github.com/fatedier/frp/blob/405969085fb6b5c8058c88ca250e930ba6092153/conf/frps_full_example.toml

#frps监听端口
bindPort = 17000

# 配置 frp dashboard
webServer.addr = "127.0.0.1"
webServer.port = 7500
webServer.user = "admin"
webServer.password = "*******"

# 配置 token 认证,frpc 客户端也需指定一样的token
auth.method = "token"
auth.token = "abc123jki"

# 只允许frpc绑定指定ports. 
allowPorts = [
  { start = 60000, end = 60500 }
]

使用 systemd 来管理 frps 服务,并设置开机自启,创建frps.service文件

vim /etc/systemd/system/frps.service

写入frps.service内容如下:

[Unit]
Description=FRP Server
After=network.target

[Service]
# 启动frps的命令,需修改为您的frps的安装路径
ExecStart=/usr/local/frp_0.57.0_linux_amd64/frps -c /usr/local/frp_0.57.0_linux_amd64/frps.toml
Type=simple

[Install]
WantedBy=multi-user.target

设置frps开机启动,并启动 frps

# 设置frps开机启动
systemctl enable frps
# 启动frps
systemctl start frps
# 查看frps服务状态
systemctl status frps

frpc安装

下载windows frp 对应二进制包到 frpc client,解压到对应目录上,下载地址https://github.com/fatedier/frp/releases/download/v0.57.0/frp_0.57.0_windows_amd64.zip

frpc client的配置文件是frpc.toml,编辑frpc.toml

# 可以参考官方配置frpc_full_example.toml,里面有详细配置说明
# https://github.com/fatedier/frp/blob/405969085fb6b5c8058c88ca250e930ba6092153/conf/frpc_full_example.toml

# 填写你的frps server的ip 和 port
serverAddr = "1.1.1.1"
serverPort = 17000

# 配置 token 认证,frpc 客户端需指定frps一样的token
auth.method = "token"
auth.token = "abc123jki"

# 在 frp 中,一个代理对应一个需要公开访问的内网服务。
# 一个客户端可以同时配置多个代理,以满足不同的需求。
# 下面配置的是将 win10 远程桌面暴露到 frps_ip 60002端口上
[[proxies]]
name = "windows remote desktop"
type = "tcp"
localIP = "127.0.0.1"
localPort = 3389
remotePort = 60002

使用NSSM - the Non-Sucking Service Manager将frpc注册成windows服务并设置开机启动

在nssm 官网下载 nssm 程序,地址 https://nssm.cc/release/nssm-2.24.zip,解压压缩包,win64下面会有 nssm 程序,程序可以放在任何位置都可以。

以管理员权限运行cmd,切换到 nssm 程序目录,执行下面命令

nssm install frpc

命令执行后,它会以 GUI显示服务安装窗口,填写 frpc 程序的路径和启动参数,点击 Install service 即可

 

在上面打开的管理员cmd 窗口,启动 frpc 服务

nssm start frpc # 或者可以使用 net start frpc

可以看到frpc 进程已经启动

 

这时候可以在frps dashboard(这里可以配置nginx反向代理访问)查看frpc客户端是否注册上,注册上 status 会显示 online

 

验证内网穿透

client通过frps_ip:60002 远程桌面到 frpc win10 pc 上

 

结束

以上是本次关于 frp 内网穿透的介绍和搭建使用,希望对大家有所帮助。如果你还有任何疑问,欢迎留言讨论。

标签:reverse,frps,fast,token,frp,toml,远程桌面,frpc
From: https://www.cnblogs.com/cinemaparadiso/p/18406520

相关文章

  • Fastadmin 在列表页window.top.open打开新页面操作表单后保持表单验证回调操作
    //列表页click事件$(document).on('click','#add_customer',function(){varurl="ap/controller/add";vardata={area:["1050px","588px"],......
  • FastAPI 进阶:使用 BackgroundTasks 处理长时间运行的任务
    在FastAPI中,BackgroundTasks是一个功能,它允许你在发送响应给客户端之后执行后台任务。这些任务对于不需要客户端等待的操作非常有用,比如发送电子邮件通知或处理数据。然而,当服务器重启时,由于BackgroundTasks是与单个应用实例的生命周期相关联的,它们不会自动恢复执行。Backgrou......
  • FastAPI 深度指南:使用依赖注入处理分页和过滤逻辑
    在FastAPI框架中,Depends是一个关键的功能,它允许开发者通过依赖注入来管理和重用代码。这在处理API的分页和过滤逻辑时尤其有用,因为它可以将这些逻辑抽象化,从而减少冗余代码并提高效率。通过Depends,我们可以定义一个函数,该函数负责获取和验证分页参数(如skip和limit)以及过滤参数(如基......
  • FastGPT 正式接入 Flux,准备好迎接 AI 绘画的狂风了么?
    Flux大家最近都听说了吧?它是一款新推出的AI绘画模型,拳打StableDiffusion3,脚踢Midjourney,整个AI绘画界都沸腾了。Flux的主创团队来自由StableDiffusion原班人马打造的黑森林实验室(BlackForestLabs),2024年8月1日才正式宣布成立。Flux在图像质量、文本提示理解、细......
  • frp 内网穿透
     用的frp0.36_2版本#[common]isintegralsection[common]#AliteraladdressorhostnameforIPv6mustbeenclosed#insquarebrackets,asin"[::1]:80","[ipv6-host]:http"or"[ipv6-host%zone]:80"#Forsingle"bind_a......
  • FastAPI模块化:为复杂应用程序提供清晰的结构
    开题描述:在现代软件开发中,随着应用程序规模的扩大和功能的增加,传统的单体架构逐渐暴露出其局限性。FastAPI,作为一款高性能的现代Web框架,通过其模块化设计提供了一种解决方案。本文将探讨FastAPI模块化如何为构建复杂应用程序提供清晰的结构,从而提高代码的可维护性、可扩展性和团队......
  • 构建模块化的FastAPI应用: 从用户认证到角色控制
    实现了用户身份验证及角色授权的基本功能。具体来说,当用户尝试访问某些资源时,系统会首先验证用户的身份,然后根据用户的角色来决定是否允许访问特定资源。例如,普通用户只能访问自己的信息,而管理员可以访问额外的管理界面。这种机制保证了系统的安全性,并且可以根据需要灵活地扩展不同......
  • A Fast and High Quality Multilevel Scheme for Partitioning Irregular Graphs
    目录概METISCoarseningPartitioningphaseUncoarseningphaseKarypisG.andKumarV.Afastandhighqualitymultilevelschemeforpartitioningirregulargraphs.SIAM,1998.概本文提出了一种multilevelgraphpartitioning方法.METISMETIS的思想比较简单:......
  • 深入FastAPI:掌握使用多个关联模型的高级用法
    在构建RESTfulAPI时,经常需要处理复杂的数据关系。FastAPI通过支持多个关联模型,使得定义这些关系变得简单直观。这种方法不仅提高了代码的可维护性,还增强了API的灵活性。通过使用Pydantic库,我们可以轻松定义数据模型及其关联,从而在FastAPI应用中实现强大的数据处理逻辑。无论是一对......
  • fastapi middleware中间件
    一、介绍FastAPI中的中间件(Middleware)是一个非常重要的概念,它允许开发者在请求被处理之前和响应被发送之前执行自定义逻辑。中间件在Web应用程序中扮演着桥梁的角色,连接着客户端的请求和服务器端的响应处理过程。以下是FastAPI中间件概念的详细解释:1.中间件的定义在FastAPI中,......