frp 一個高性能的反向代理服務

文章目錄

  • 項目概述
    • 核心特性
    • 系統架構
  • 快速開始
    • 1. 下載安裝
    • 2. 服務端快速配置
    • 3. 客戶端快速配置
    • 4. 驗證連接
    • 配置文件說明
  • 代理類型
    • TCP/UDP 代理
    • HTTP/HTTPS 代理
    • 安全代理 (STCP/SUDP)
    • P2P 代理 (XTCP)
  • 插件系統
    • 靜態文件服務
    • HTTP/SOCKS5 代理
    • 協議轉換
  • 使用場景
    • 遠程辦公
    • Web 服務發布
    • 游戲服務器
    • 開發環境共享
  • 監控運維
    • Prometheus 監控
    • Grafana 儀表板
    • 日志管理
    • Web 管理界面
  • 安全配置
    • 認證加強
    • 防火墻配置
    • 訪問控制
    • fail2ban 防護
  • 項目地址


項目概述

frp(Fast Reverse Proxy)是一個高性能的反向代理服務,專注于內網穿透解決方案。它允許您將位于 NAT 或防火墻后的本地服務器暴露到互聯網,支持多種協議和高級功能。

核心特性

  • 多協議支持:TCP、UDP、HTTP、HTTPS、KCP、QUIC、WebSocket
  • 安全認證:Token、OIDC、TLS 加密傳輸
  • 高性能:TCP 流復用、連接池、壓縮傳輸
  • 易于配置:TOML/YAML/JSON 配置格式
  • 監控支持:Prometheus 指標、Web 管理界面
  • 插件擴展:靜態文件、HTTP 代理、SOCKS5 等

系統架構

內網環境
公網環境
frpc Client
本地服務
frps Server
外部客戶端

快速開始

1. 下載安裝

# 下載最新版本
wget https://github.com/fatedier/frp/releases/download/v0.53.2/frp_0.53.2_linux_amd64.tar.gz
tar -xzf frp_0.53.2_linux_amd64.tar.gz
cd frp_0.53.2_linux_amd64

2. 服務端快速配置

# 使用簡化配置啟動服務端
cat > frps.toml << EOF
bindPort = 7000
vhostHTTPPort = 80[auth]
token = "your_token_here"[webServer]
addr = "0.0.0.0"
port = 7500
user = "admin"
password = "admin"
EOF# 啟動服務端
./frps -c frps.toml

3. 客戶端快速配置

# 配置客戶端
cat > frpc.toml << EOF
serverAddr = "your.server.com"
serverPort = 7000[auth]
token = "your_token_here"[[proxies]]
name = "ssh"
type = "tcp"
localIP = "127.0.0.1"
localPort = 22
remotePort = 6000
EOF# 啟動客戶端
./frpc -c frpc.toml

4. 驗證連接

# 通過代理連接 SSH
ssh -p 6000 username@your.server.com# 訪問管理界面
curl http://your.server.com:7500

配置文件說明

# 基礎連接配置
serverAddr = "your.server.com"
serverPort = 7000# 認證配置
[auth]
method = "token"
token = "your_secure_token"# 傳輸層配置
[transport]
protocol = "tcp"
tls.enable = true
tcpMux = true
poolCount = 5# 代理配置示例
[[proxies]]
name = "web"
type = "http"
localIP = "127.0.0.1"
localPort = 80
customDomains = ["www.example.com"]

代理類型

TCP/UDP 代理

適用于任何基于 TCP/UDP 的服務:

# SSH 代理
[[proxies]]
name = "ssh"
type = "tcp"
localIP = "127.0.0.1"
localPort = 22
remotePort = 6000# DNS 代理
[[proxies]]
name = "dns"
type = "udp"
localIP = "127.0.0.1"
localPort = 53
remotePort = 6053

HTTP/HTTPS 代理

支持域名綁定和路徑路由:

# Web 應用代理
[[proxies]]
name = "web"
type = "http"
localIP = "127.0.0.1"
localPort = 8080
customDomains = ["www.example.com"]
locations = ["/api", "/admin"]# HTTPS 代理
[[proxies]]
name = "secure_web"
type = "https"
localIP = "127.0.0.1"
localPort = 443
customDomains = ["secure.example.com"]

安全代理 (STCP/SUDP)

需要密鑰認證的安全代理:

# 服務端配置
[[proxies]]
name = "secret_ssh"
type = "stcp"
secretKey = "abcdefg123456"
localIP = "127.0.0.1"
localPort = 22# 訪問端配置
[[visitors]]
name = "secret_ssh_visitor"
type = "stcp"
serverName = "secret_ssh"
secretKey = "abcdefg123456"
bindIP = "127.0.0.1"
bindPort = 9000

P2P 代理 (XTCP)

客戶端間直連,減少服務器帶寬:

# P2P 文件傳輸
[[proxies]]
name = "p2p_transfer"
type = "xtcp"
secretKey = "p2p_secret"
localIP = "127.0.0.1"
localPort = 8080[[visitors]]
name = "p2p_transfer_visitor"
type = "xtcp"
serverName = "p2p_transfer"
secretKey = "p2p_secret"
bindIP = "127.0.0.1"
bindPort = 8081

插件系統

frp 支持多種客戶端插件,擴展功能:

靜態文件服務

[[proxies]]
name = "static_files"
type = "http"
customDomains = ["files.example.com"][proxies.plugin]
type = "static_file"
localPath = "/var/www/html"
stripPrefix = "files"
httpUser = "admin"
httpPassword = "password"

HTTP/SOCKS5 代理

# HTTP 代理
[[proxies]]
name = "http_proxy"
type = "tcp"
remotePort = 8080[proxies.plugin]
type = "http_proxy"
httpUser = "proxy_user"
httpPassword = "proxy_pass"# SOCKS5 代理
[[proxies]]
name = "socks5_proxy"
type = "tcp"
remotePort = 1080[proxies.plugin]
type = "socks5"
username = "socks_user"
password = "socks_pass"

協議轉換

# HTTP 轉 HTTPS
[[proxies]]
name = "http_to_https"
type = "http"
customDomains = ["convert.example.com"][proxies.plugin]
type = "http2https"
localAddr = "127.0.0.1:443"
hostHeaderRewrite = "internal.example.com"

使用場景

遠程辦公

# 企業內網訪問
[[proxies]]
name = "office_rdp"
type = "tcp"
localIP = "192.168.1.100"
localPort = 3389
remotePort = 3389[[proxies]]
name = "office_ssh"
type = "tcp"
localIP = "192.168.1.101"
localPort = 22
remotePort = 2222

Web 服務發布

# 個人博客
[[proxies]]
name = "blog"
type = "http"
localIP = "127.0.0.1"
localPort = 4000
customDomains = ["myblog.com"]# API 服務
[[proxies]]
name = "api"
type = "http"
localIP = "127.0.0.1"
localPort = 8080
subDomain = "api"

游戲服務器

# Minecraft 服務器
[[proxies]]
name = "minecraft"
type = "tcp"
localIP = "127.0.0.1"
localPort = 25565
remotePort = 25565[proxies.transport]
bandwidthLimit = "1GB"
useCompression = false

開發環境共享

# 前端開發服務器
[[proxies]]
name = "frontend"
type = "http"
localIP = "127.0.0.1"
localPort = 3000
subDomain = "dev"# 數據庫訪問
[[proxies]]
name = "database"
type = "tcp"
localIP = "127.0.0.1"
localPort = 5432
remotePort = 5432

監控運維

Prometheus 監控

# prometheus.yml
scrape_configs:- job_name: 'frps'static_configs:- targets: ['localhost:7500']metrics_path: '/metrics'- job_name: 'frpc'static_configs:- targets: ['localhost:7400']

Grafana 儀表板

  • 連接數監控
  • 流量統計
  • 代理狀態
  • 性能指標

日志管理

# 日志輪轉配置
/var/log/frp/*.log {dailyrotate 30compresscopytruncate
}

Web 管理界面

  • 服務端:http://your.server.com:7500
  • 客戶端:http://127.0.0.1:7400

安全配置

認證加強

[auth]
method = "token"
token = "$(openssl rand -base64 32)"
additionalScopes = ["HeartBeats", "NewWorkConns"]# TLS 強制加密
[transport.tls]
force = true
certFile = "/etc/frp/ssl/server.crt"
keyFile = "/etc/frp/ssl/server.key"

防火墻配置

# 基礎防火墻規則
ufw allow 7000/tcp  # frp 服務端口
ufw allow 7500/tcp  # 管理界面
ufw allow 80/tcp    # HTTP 代理
ufw allow 443/tcp   # HTTPS 代理

訪問控制

# 端口限制
allowPorts = [{ start = 2000, end = 3000 },{ single = 3389 }
]# 客戶端限制
maxPortsPerClient = 5
userConnTimeout = 10

fail2ban 防護

[frp-auth]
enabled = true
filter = frp-auth
logpath = /var/log/frp/frps.log
maxretry = 3
bantime = 3600

項目地址

  • GitHub 倉庫
  • 官方文檔
  • Release 頁面

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/bicheng/95016.shtml
繁體地址,請注明出處:http://hk.pswp.cn/bicheng/95016.shtml
英文地址,請注明出處:http://en.pswp.cn/bicheng/95016.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Android -第二十一次技術總結

一、activity與Fragment的通信有哪些&#xff1f;使用接口進行通信的邏輯與代碼示例使用接口通信的核心是解耦&#xff0c;通過定義一個接口作為通信契約&#xff0c;讓 Fragment 不依賴于具體的 Activity 類型。1. 定義通信接口&#xff08;在 Fragment 內&#xff09;首先&am…

【算法】78.子集--通俗講解

通俗易懂講解“子集”算法題目 一、題目是啥?一句話說清 給你一個不含重復元素的整數數組,返回所有可能的子集(包括空集和它本身)。 示例: 輸入:nums = [1,2,3] 輸出:[[], [1], [2], [1,2], [3], [1,3], [2,3], [1,2,3]] 二、解題核心 使用回溯法(遞歸)或位運算來…

Cherrystudio的搭建和使用

1、下載和安裝 Cherry Studio 官方網站 - 全能的 AI 助手 2、配置LLM 3、聊天助手 3.1 添加和編輯助手 3.2 選擇LLM 3.3 對話聊天 4、配置MCP 4.1 安裝MCP執行插件 4.2 安裝 node和npm Node.js — Download Node.js npm -v 10.9.3 node -v v22…

基于Matlab結合膚色檢測與卷積神經網絡的人臉識別方法研究

近年來&#xff0c;隨著人工智能與計算機視覺技術的發展&#xff0c;人臉識別在人機交互、安防監控、身份認證等領域得到了廣泛應用。本文提出了一種基于 MATLAB 平臺&#xff0c;結合 膚色檢測與卷積神經網絡&#xff08;CNN&#xff09; 的人臉識別方法。該方法首先利用膚色模…

在八月點燃AI智慧之火:CSDN創作之星挑戰賽開啟靈感盛宴

在八月點燃AI智慧之火&#xff1a;CSDN創作之星挑戰賽開啟靈感盛宴八月驕陽似火&#xff0c;智能時代的技術熱情同樣熾熱。在這個充滿創新活力的季節&#xff0c;「AIcoding八月創作之星挑戰賽」正式拉開帷幕&#xff0c;為CSDN的創作者們打造一個展示才華、碰撞靈感的專業舞臺…

解密 Vue 3 shallowRef:淺層響應式 vs 深度響應式的性能對決

&#x1f4d6; 概述 shallowRef() 是 Vue 3 中的一個組合式 API 函數&#xff0c;用于創建淺層響應式引用。與 ref() 不同&#xff0c;shallowRef() 只在其 .value 被直接替換時觸發響應式更新&#xff0c;不會深度監聽對象內部屬性的變化。 &#x1f3af; 基本概念 什么是 sh…

Linux進程間通信(IPC)深入解析

Linux進程間通信&#xff08;IPC&#xff09;深入解析 1 概述 Linux 進程間通信 (Inter-Process Communication, IPC) 是不同進程之間交換數據與同步操作的機制。現代 Linux 內核提供了多種 IPC 方式&#xff0c;從傳統的管道和 System V IPC 到現代的套接字和 D-Bus&#xff0…

TensorFlow-GPU版本安裝

前言&#xff1a; &#xff08;1&#xff09;因項目需求&#xff0c;需要安裝TensorFlow-GPU版本&#xff0c;故本文在此記錄安裝過程。 &#xff08;2&#xff09;有注釋&#xff0c;優先看注釋 &#xff08;3&#xff09;本文所使用的GPU為NVIDIA GeForce RTX 5080 Laptop GP…

Elasticsearch 索引字段刪除,除了 Reindex 重建索引還有沒有別的解決方案?

unsetunset1、問題來源unsetunset在生產環境維護 Elasticsearch 集群的過程中&#xff0c;經常會遇到這樣的場景&#xff1a;業務需求變更導致某些字段不再使用&#xff0c;或者早期設計時添加了一些冗余字段&#xff0c;現在需要清理掉。最近球友在公司的一個項目中就遇到了這…

Ubuntu虛擬機磁盤空間擴展指南

這是一份詳細且易于理解的 Ubuntu 虛擬機磁盤空間擴展指南。本指南涵蓋了兩種主流虛擬機軟件&#xff08;VirtualBox 和 VMware&#xff09;的操作步驟&#xff0c;并分為 “擴展虛擬磁盤” 和 “在 Ubuntu 內部分配新空間” 兩大部分。重要提示&#xff1a;在進行任何磁盤操作…

教程1:用vscode->ptvsd-創建和調試一個UI(python)-轉載官方翻譯(有修正)

vscode用python開發maya聯動調試設置 3dsMax Python開發環境搭建 3文聯動之debugpy調試max‘python. 3文聯動之socket插槽注入max‘python 本教程是max主動接收創建代碼的方式&#xff08;預先運行界面&#xff0c;通過按鈕主動讀取py腳本&#xff0c;執行斷點&#xff09;&…

龍迅#LT7621GX適用于兩路HDMI2.1/DP1.4A轉HDMI2.1混切應用,分辨率高達8K60HZ!

1. 描述LT7621GX是一款高性能兩路HDMI2.1/DP1.4轉HDMI2.1混合開關芯片&#xff0c;用于顯示應用。 HDCP RX作為HDCP中繼器的上游&#xff0c;可以與其他芯片的HDCP TX配合&#xff0c;實現中繼器功能。 對于HDMI2.1輸入&#xff0c;LT7621GX可以配置為3/4通道。自適應均衡使其適…

【Ruoyi 解密 - 12. JDK17的新特性】------ 從Java 8 到 Java 17:向Scala看齊的“簡潔革命”,同宗JVM下的效率狂飆

從Java 8到Java 17&#xff1a;抄作業Scala&#xff1f;JVM同宗下的Ruoyi開發效率狂飆&#xff01; 上一篇我們聊到JDK 17對Python的柔性借鑒&#xff0c;可深入用下來才發現——這哪夠&#xff01;對Ruoyi開發者來說&#xff0c;JDK 17真正的“王炸”&#xff0c;是把同根JVM的…

大模型 “輕量化” 之戰:從千億參數到端側部署,AI 如何走進消費電子?

一、大模型 “輕量化” 的行業背景在 AI 技術蓬勃發展的當下&#xff0c;大模型已然成為行業焦點。從 GPT-4 突破萬億級參數量&#xff0c;到 DeepSeek-R1 邁向千億參數規模&#xff0c;大模型的參數擴張趨勢顯著。然而&#xff0c;這種規模的增長也帶來了諸多挑戰。以 GPT-4 為…

香港電訊與Microsoft香港推出新世代“Teams Phone” 解決方案

香港電訊成為香港首家提供 “Microsoft Operator Connect”的本地電訊營運商1 香港電訊&#xff08;股份代號&#xff1a;6823&#xff09;【香港 ? 2025年2月11日】 – 香港電訊宣布與 Microsoft 香港合作推出 “Operator Connect”&#xff0c;成為全港首家為企業客戶提供全…

PlantUML描述《分析模式》第3章觀察和測量(2)

lantUML描述《分析模式》第2章“當責”&#xff08;1&#xff09; PlantUML描述《分析模式》第2章“當責”&#xff08;2&#xff09; PlantUML描述《分析模式》第3章觀察和測量&#xff08;1&#xff09; 原圖3.8 EA繪制 圖3.8 遞歸關系用于記錄證據和評估。 PlantUML sta…

輪廓周長,面積,外界圓,外界矩形近似輪廓和模板匹配和argparse模塊實現代碼參數的動態配置

目錄 一.輪廓操作 1.輪廓特征的引入與篩選 2.輪廓排序和精準定位 3.外接圓與外接矩形的計算與繪制 二.輪廓近似 1.輪廓近似的基本概念 2.輪廓近似的實現方法和核心步驟 3. 近似精度參數的設定邏輯 4.輪廓定位方法 三.模板匹配 1.模板匹配技術原理與實現流程 2.技術要…

【第三方網站測評:會話管理漏洞的測試與加固】

會話管理是Web應用安全的用于在無狀態的HTTP協議上維持用戶狀態。漏洞主要源于會話令牌(Session Token)的生成、傳輸、驗證和銷毀過程中的缺陷。攻擊者利用這些缺陷可劫持用戶會話,未經授權訪問敏感數據或執行特權操作,屬于OWASP TOP 10中身份驗證失效的高頻風險。 會話管…

理想汽車智駕方案介紹專題 3 MoE+Sparse Attention 高效結構解析

一、前言 【理想汽車智駕方案介紹專題 -1】端到端VLM 方案介紹 【理想汽車智駕方案介紹專題 -2】MindVLA 方案詳解 在上述兩篇系列帖子中&#xff0c;筆者已對理想汽車 VLM 和 VLA 方案的框架進行了全面介紹&#xff0c;但對于其中的前沿技術僅做了初步探討&#xff0c;未進…

如何將yolo訓練圖像數據庫的某個分類的圖像取出來

COCO 數據集 - Ultralytics YOLO 文檔 比如我只想從數據集中取手機的圖像&#xff0c;來用于我的訓練&#xff0c;懶得自己一張一張標注&#xff0c;方法如下 # -*- coding: utf-8 -*- import json import os import shutil from pathlib import Path from tqdm import tqdm i…