From af444e68a93cf0b7e566a8979daef952abd16487 Mon Sep 17 00:00:00 2001 From: Dich Date: Thu, 8 May 2025 12:33:51 +0800 Subject: [PATCH] add:frp --- content/about-frp.md | 463 +++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 463 insertions(+) create mode 100644 content/about-frp.md diff --git a/content/about-frp.md b/content/about-frp.md new file mode 100644 index 0000000..159a826 --- /dev/null +++ b/content/about-frp.md @@ -0,0 +1,463 @@ ++++ +title = "乱七八糟:FRP使用指南" +date = 2025-03-01 + +[taxonomies] +tags = ["乱七八糟"] ++++ + +前言 FRP (Fast Reverse Proxy) 是一个用Go语言开发的高性能反向代理应用,可以帮助您轻松地进行内网穿透,对外提供服务. + + + +## 简介 + +FRP (Fast Reverse Proxy) 主要功能包括: + +- 支持TCP、UDP、HTTP、HTTPS等多种协议 +- 支持Web服务、远程桌面、SSH、游戏服务器等多种应用场景 +- 提供加密和压缩功能,保证数据安全性 +- 支持多个客户端连接服务端,适用于复杂网络环境 + +FRP分为客户端(frpc)和服务端(frps)两部分: +- **服务端(frps)**: 部署在有公网IP的服务器上 +- **客户端(frpc)**: 部署在内网机器上,负责将内网服务映射到公网 + +## 安装 + +### 服务端安装 + +服务端需要部署在具有公网IP的服务器上。 + +1. 下载最新版本的FRP发行包: + +```bash +wget https://github.com/fatedier/frp/releases/download/v0.51.3/frp_0.51.3_linux_amd64.tar.gz +``` + +2. 解压文件: + +```bash +tar -xzvf frp_0.51.3_linux_amd64.tar.gz +cd frp_0.51.3_linux_amd64 +``` + +3. 现在您可以看到以下文件: + - frps: 服务端可执行文件 + - frps.ini: 服务端配置文件 + - frpc: 客户端可执行文件 + - frpc.ini: 客户端配置文件 + + +### 客户端安装 + +客户端需要安装在您的内网设备上,例如需要提供服务的电脑、服务器或IoT设备上。 + +- Linux/macOS + +与服务端安装步骤相同,只需使用frpc程序和frpc.ini配置文件。 + +- Windows + +同样下载Windows版本,解压后使用frpc.exe和frpc.ini。 + +## 配置 + +### 服务端配置 + +服务端配置文件为frps.ini,基本配置如下: + +```ini +[common] +# 服务端监听端口,用于与客户端建立连接 +bind_port = 7000 + +# 用于身份验证的token +token = yourSecureToken + +# 后台管理页面端口(可选) +dashboard_port = 7500 +dashboard_user = admin +dashboard_pwd = admin + +# 日志配置 +log_file = /var/log/frps.log +log_level = info +log_max_days = 3 +``` + +### 客户端配置 + +客户端配置文件为frpc.ini,基本配置如下: + +```ini +[common] +# 服务端的IP地址或域名 +server_addr = x.x.x.x +# 服务端的端口 +server_port = 7000 +# 认证token,需要与服务端匹配 +token = yourSecureToken + +# 示例:SSH服务代理 +[ssh] +type = tcp +local_ip = 127.0.0.1 +local_port = 22 +remote_port = 6000 + +# 示例:HTTP服务代理 +[web] +type = http +local_ip = 127.0.0.1 +local_port = 80 +custom_domains = www.yourdomain.com +``` + +### 常用配置示例 + +#### 1. 代理SSH服务 + +```ini +# frpc.ini +[common] +server_addr = x.x.x.x +server_port = 7000 +token = yourSecureToken + +[ssh] +type = tcp +local_ip = 127.0.0.1 +local_port = 22 +remote_port = 6000 +``` + +使用方法:`ssh -p 6000 username@服务端IP` + +#### 2. 代理HTTP网站 + +```ini +# frpc.ini +[common] +server_addr = x.x.x.x +server_port = 7000 +token = yourSecureToken + +[web] +type = http +local_ip = 127.0.0.1 +local_port = 80 +custom_domains = www.yourdomain.com +``` + +在服务端需要将域名解析到服务端IP。 + +#### 3. 代理HTTPS网站 + +```ini +# frpc.ini +[common] +server_addr = x.x.x.x +server_port = 7000 +token = yourSecureToken + +[web-https] +type = https +local_ip = 127.0.0.1 +local_port = 443 +custom_domains = www.yourdomain.com +``` + +#### 4. 代理远程桌面(RDP) + +```ini +# frpc.ini +[common] +server_addr = x.x.x.x +server_port = 7000 +token = yourSecureToken + +[rdp] +type = tcp +local_ip = 127.0.0.1 +local_port = 3389 +remote_port = 7001 +``` + +## 启动与运行 + +### 服务端启动 + +#### Linux/macOS + +```bash +./frps -c frps.ini +``` + +后台运行: + +```bash +nohup ./frps -c frps.ini & +``` + +#### Windows + +双击frps.exe或在命令行运行: + +``` +frps.exe -c frps.ini +``` + +### 客户端启动 + +#### Linux/macOS + +```bash +./frpc -c frpc.ini +``` + +后台运行: + +```bash +nohup ./frpc -c frpc.ini & +``` + +#### Windows + +双击frpc.exe或在命令行运行: + +``` +frpc.exe -c frpc.ini +``` + +### 设置为系统服务 + +#### Linux (Systemd) + +1. 创建服务文件 `/etc/systemd/system/frps.service` (服务端) 或 `/etc/systemd/system/frpc.service` (客户端) + +**服务端示例 (frps.service):** + +```ini +[Unit] +Description=Frp Server Service +After=network.target + +[Service] +Type=simple +ExecStart=/usr/bin/frps -c /etc/frps/frps.ini +Restart=always +RestartSec=5s + +[Install] +WantedBy=multi-user.target +``` + +**客户端示例 (frpc.service):** + +```ini +[Unit] +Description=Frp Client Service +After=network.target + +[Service] +Type=simple +ExecStart=/usr/bin/frpc -c /etc/frpc/frpc.ini +Restart=always +RestartSec=5s + +[Install] +WantedBy=multi-user.target +``` + +2. 启用并启动服务: + +```bash +# 服务端 +sudo systemctl enable frps +sudo systemctl start frps + +# 客户端 +sudo systemctl enable frpc +sudo systemctl start frpc +``` + +3. 查看服务状态: + +```bash +sudo systemctl status frps +# 或 +sudo systemctl status frpc +``` + +#### Windows + +1. 使用NSSM (Non-Sucking Service Manager) 创建服务: + - 下载NSSM: http://nssm.cc/download + - 安装服务: + ``` + nssm.exe install frpc C:\path\to\frpc.exe -c C:\path\to\frpc.ini + ``` + - 启动服务: + ``` + nssm.exe start frpc + ``` + +## 进阶功能 + +### HTTPS支持 + +要支持HTTPS服务,需要在服务端添加配置: + +```ini +# frps.ini +[common] +bind_port = 7000 +vhost_https_port = 443 +``` + +客户端配置: + +```ini +# frpc.ini +[web] +type = https +local_ip = 127.0.0.1 +local_port = 443 +custom_domains = www.yourdomain.com +``` + +### 多路复用 + +使用多路复用可以减少连接数,提高性能: + +```ini +# frpc.ini +[common] +server_addr = x.x.x.x +server_port = 7000 +token = yourSecureToken +# 启用多路复用 +tls_enable = true +pool_count = 5 +``` + +### 加密与压缩 + +增加数据传输的安全性: + +```ini +# frpc.ini +[common] +server_addr = x.x.x.x +server_port = 7000 +token = yourSecureToken +# 启用加密和压缩 +use_encryption = true +use_compression = true +``` + +### 负载均衡 + +通过配置多个后端服务实现负载均衡: + +```ini +# frpc.ini +[web] +type = tcp +local_ip = 127.0.0.1 +local_port = 80 +remote_port = 8080 +group = web +group_key = 123456 + +[web2] +type = tcp +local_ip = 127.0.0.1 +local_port = 8081 +remote_port = 8080 +group = web +group_key = 123456 +``` + +### 访问控制 + +限制客户端连接数量和带宽: + +```ini +# frps.ini +[common] +bind_port = 7000 +token = yourSecureToken +max_pool_count = 50 +max_ports_per_client = 10 +``` + +## 常见问题排查 + +### 1. 连接被拒绝 + +**问题**: 客户端报错 "dial tcp x.x.x.x:7000: connect: connection refused" + +**解决方案**: +- 检查服务端IP和端口是否正确 +- 确认服务端frps是否正在运行 +- 检查防火墙是否允许7000端口通信 + +### 2. 认证失败 + +**问题**: 客户端日志显示 "login to server failed: authentication failed" + +**解决方案**: +- 确认客户端和服务端的token设置一致 +- 检查服务端日志是否有更多错误信息 + +### 3. 端口已被占用 + +**问题**: 服务端启动失败,提示 "bind: address already in use" + +**解决方案**: +- 更改配置中的端口 +- 终止占用该端口的其他应用 +- 使用 `netstat -tunlp | grep 端口号` 查看占用该端口的进程 + +### 4. 无法访问代理服务 + +**问题**: 代理设置正确,但无法访问服务 + +**解决方案**: +- 检查本地服务是否正常运行 +- 确认local_ip和local_port设置正确 +- 使用 `curl localhost:本地端口` 测试本地服务 +- 检查服务端防火墙是否开放了remote_port + +### 5. 代理连接不稳定 + +**问题**: 连接经常断开 + +**解决方案**: +- 增加心跳包频率,在[common]部分添加: + ``` + heartbeat_interval = 30 + heartbeat_timeout = 90 + ``` +- 启用多路复用和连接池 + +### 6. 域名解析失败 + +**问题**: 使用custom_domains配置,但无法通过域名访问 + +**解决方案**: +- 确保域名已正确解析到服务端IP +- 检查frps.ini中是否配置了http/https的监听端口 +- 使用 `dig` 或 `nslookup` 命令验证域名解析 + + +🔗 + +- [FRP官方文档](https://gofrp.org/docs/) +- [FRP GitHub仓库](https://github.com/fatedier/frp) +- [FRP常见问题解答](https://github.com/fatedier/frp/issues) + +--- +**Done.** \ No newline at end of file