文章目录
一、FRP 基础概念
FRP(Fast Reverse Proxy)是一款高性能的反向代理应用,主要用于内网穿透,可以将内网中的服务暴露到公网。其核心组件包括:
- frps(FRP Server):部署在有公网 IP 的服务器上,负责管理和转发客户端的连接。
- frpc(FRP Client):部署在需要暴露服务的内网机器上,通过
frps
进行连接和转发。
二、系统架构与角色定位
- A:本地 Windows 机器,可能需要通过中转服务器访问目标服务器 C。
- B:中转服务器,运行 CentOS,IP 为
117.62.206.56
,部署frps
。 - C:目标服务器,运行 Ubuntu,部署
frpc
,需要将其服务通过frps
暴露给 A。
三、下载与解压 FRP
1. 在 B 服务器(CentOS)上下载 FRP Server
# 登录到 B 服务器
ssh your_user@117.62.206.56
# 下载 FRP
wget https://github.com/fatedier/frp/releases/download/v0.61.0/frp_0.61.0_linux_amd64.tar.gz
# 解压压缩包
tar -zxvf frp_0.61.0_linux_amd64.tar.gz
# 移动到 /usr/local/frp 目录
sudo mkdir -p /usr/local/frp
sudo mv frp_0.61.0_linux_amd64/* /usr/local/frp/
# 切换到 frp 目录
cd /usr/local/frp
在 B 服务器上的目录结构如下:
.
├── /usr/local/frp/
│ ├── frps
│ ├── frps.toml
│ └── logs/
│ └── frps.log
2. 在 C 服务器(Ubuntu)上下载 FRP Client
# 登录到 C 服务器
ssh your_user@your_ubuntu_server_ip
# 下载 FRP
wget https://github.com/fatedier/frp/releases/download/v0.61.0/frp_0.61.0_linux_amd64.tar.gz
# 解压压缩包
tar -zxvf frp_0.61.0_linux_amd64.tar.gz
# 移动到 /usr/local/frp 目录
sudo mkdir -p /usr/local/frp
sudo mv frp_0.61.0_linux_amd64/* /usr/local/frp/
# 切换到 frp 目录
cd /usr/local/frp
在 C 服务器上的目录结构如下:
.
├── /usr/local/frp/
│ ├── frpc
│ ├── frpc.toml
│ └── logs/
│ └── frpc.log
四、配置 FRP
1. 配置 frps(在 B 服务器)
在 /usr/local/frp
目录下创建或编辑 frps.toml
配置文件:
bindPort = 7000
>>>>>>>>>>>>>>>>下面配置不要用,我自己的参考备注,写法还有点问题,你也可以自己调一下>>>>>>>>>>>>>>>>
# /usr/local/frp/frps.toml
[common]
bind_port = 7000 # frps 监听的端口
dashboard_port = 7500 # FRP Dashboard 管理界面端口(可选)
dashboard_user = "admin" # Dashboard 用户名
dashboard_pwd = "your_secure_password" # Dashboard 密码
vhost_http_port = 8080 # HTTP 类型的虚拟主机端口(可选)
vhost_https_port = 8443 # HTTPS 类型的虚拟主机端口(可选)
# 日志相关配置
log_file = "/usr/local/frp/logs/frps.log" # 指定日志文件的位置
log_level = "info" # 可选值: "trace", "debug", "info", "warn", "error"
log_max_days = 3 # 日志文件保留的最大天数
# 可选:开启 TLS
# enable_tls = true
<<<<<<<<<<<<<<<<上面配置不要用,我自己的参考备注,写法还有点问题,你也可以自己调一下<<<<<<<<<<<<<<<
2. 配置 frpc(在 C 服务器)
在 /usr/local/frp
目录下创建或编辑 frpc.toml
配置文件:
serverAddr = "117.62.206.56" # 此处换成自己的IP即可
serverPort = 7000
[[proxies]]
name = "test-tcp"
type = "tcp"
localIP = "127.0.0.1"
localPort = 22
remotePort = 6000
>>>>>>>>>>>>>>>>下面配置不要用,我自己的参考备注,写法还有点问题,你也可以自己调一下>>>>>>>>>>>>>>>>
# /usr/local/frp/frpc.toml
[common]
server_addr = "117.62.206.56" # frps 服务器的 IP 地址
server_port = 7000 # frps 服务器监听的端口
# 日志相关配置
log_file = "/usr/local/frp/logs/frpc.log"
log_level = "info" # 可以是 "trace", "debug", "info", "warn", "error"
log_max_days = 3 # 日志保存的最大天数
# 示例:将 C 服务器的 SSH 服务通过 frps 暴露
[ssh]
type = "tcp"
local_ip = "127.0.0.1"
local_port = 22
remote_port = 6000 # A 通过 B 的 6000 端口访问 C 的 SSH
# 示例:将 C 服务器的 Web 服务通过 frps 暴露
[web]
type = "http"
local_port = 80
custom_domains = ["domain.com"]
<<<<<<<<<<<<<<<<上面配置不要用,我自己的参考备注,写法还有点问题,你也可以自己调一下<<<<<<<<<<<<<<<
3. 端口关系说明
- frps 监听端口:7000(在 B 服务器开放)
- frps Dashboard 端口:7500(可选,需开放)
- A 访问 C 的 SSH 端口:通过 B 服务器的 6000 端口
- A 访问 C 的 Web 服务:通过 B 服务器的 8080(HTTP)或 8443(HTTPS)端口
五、配置安全组与防火墙
1. 在 B 服务器(CentOS)上配置防火墙
假设使用 firewalld
:
# 开放 frps 监听端口 7000
sudo firewall-cmd --permanent --add-port=6000/tcp
# 开放 frps 监听端口 7000
sudo firewall-cmd --permanent --add-port=7000/tcp
# 开放 Dashboard 端口 7500(如果启用)
sudo firewall-cmd --permanent --add-port=7500/tcp
# 开放 HTTP 和 HTTPS 虚拟主机端口(如果配置)
sudo firewall-cmd --permanent --add-port=8080/tcp
sudo firewall-cmd --permanent --add-port=8443/tcp
# 重新加载防火墙规则
sudo firewall-cmd --reload
2. 在 C 服务器(Ubuntu)上配置防火墙
假设使用 ufw
:
# 启用 ufw(如果未启用)
sudo ufw enable
# 允许 frpc 连接到 frps(通常不需要额外开放,因为是出站连接)
# 允许本地需要暴露的服务端口(如 SSH 和 HTTP)
sudo ufw allow 22/tcp
sudo ufw allow 80/tcp
# 重新加载 ufw 规则
sudo ufw reload
3. 安全组配置(如果 B 服务器在云服务商上)
确保在云服务商的控制台中,为 B 服务器的安全组添加以下入站规则:
- TCP 7000:允许 A 连接到 B 的 frps
- TCP 7500:允许访问 Dashboard(如果需要)
- TCP 8080、8443:允许 HTTP/HTTPS 流量(根据需要)
六、设置 FRP 为系统服务
1. 在 B 服务器(CentOS)上设置 frps 为系统服务
创建 frps.service
文件在 /etc/systemd/system/
目录下:
sudo vim /etc/systemd/system/frps.service
添加以下内容:
[Unit]
Description=FRP Server Service
After=network.target
[Service]
Type=simple
ExecStart=/usr/local/frp/frps -c /usr/local/frp/frps.toml
Restart=on-failure
User=root
# 如果不想以 root 用户运行,可以创建一个专用用户,如 frp
[Install]
WantedBy=multi-user.target
然后,重新加载 systemd 并启动服务:
# 重新加载 systemd
sudo systemctl daemon-reload
# 启动 frps 服务
sudo systemctl start frps
# 设置开机自启
sudo systemctl enable frps
# 检查服务状态
sudo systemctl status frps
在 B 服务器上的目录结构如下:
.
├── /usr/local/frp/
│ ├── frps
│ ├── frps.toml
│ └── logs/
│ └── frps.log
└── /etc/systemd/system/
└── frps.service
2. 在 C 服务器(Ubuntu)上设置 frpc 为系统服务
创建 frpc.service
文件在 /etc/systemd/system/
目录下:
sudo vim /etc/systemd/system/frpc.service
添加以下内容:
[Unit]
Description=FRP Client Service
After=network.target
[Service]
Type=simple
ExecStart=/usr/local/frp/frpc -c /usr/local/frp/frpc.toml
Restart=on-failure
User=root
# 如果不想以 root 用户运行,可以创建一个专用用户,如 frp
[Install]
WantedBy=multi-user.target
然后,重新加载 systemd 并启动服务:
# 重新加载 systemd
sudo systemctl daemon-reload
# 启动 frpc 服务
sudo systemctl start frpc
# 设置开机自启
sudo systemctl enable frpc
# 检查服务状态
sudo systemctl status frpc
在 C 服务器上的目录结构如下:
.
├── /usr/local/frp/
│ ├── frpc
│ ├── frpc.toml
│ └── logs/
│ └── frpc.log
└── /etc/systemd/system/
└── frpc.service
七、在 A(Windows)访问 C 服务器的服务
1. 访问 C 服务器的 SSH
假设你在 A 上使用 SSH 客户端(如 PuTTY),可以连接到 B 服务器的 IP 和远程端口 6000:
ssh -p 6000 username@117.62.206.56
其中117.62.206.56
是B
的IP,username
是C
的用户名
这将通过 FRP 隧道连接到 C 服务器的 SSH 服务。
2. 访问 C 服务器的 Web 服务
在浏览器中访问 http://117.62.206.56:8080
,即可访问 C 服务器上通过 FRP 暴露的 Web 服务。
八、删除所有配置
在某些情况下,您可能需要完全移除 FRP 的配置。以下是删除配置的步骤:
1. 停止并禁用系统服务
在 B 服务器(CentOS)上:
# 停止 frps 服务
sudo systemctl stop frps
# 禁用 frps 开机自启
sudo systemctl disable frps
# 移除 frps.service 文件
sudo rm /etc/systemd/system/frps.service
# 重新加载 systemd
sudo systemctl daemon-reload
在 C 服务器(Ubuntu)上:
# 停止 frpc 服务
sudo systemctl stop frpc
# 禁用 frpc 开机自启
sudo systemctl disable frpc
# 移除 frpc.service 文件
sudo rm /etc/systemd/system/frpc.service
# 重新加载 systemd
sudo systemctl daemon-reload
2. 删除 FRP 文件和目录
在 B 服务器(CentOS)上:
# 删除 FRP 目录
sudo rm -rf /usr/local/frp
# 删除 FRP 日志(如果存在于其他位置)
# sudo rm -rf /path/to/other/logs
在 C 服务器(Ubuntu)上:
# 删除 FRP 目录
sudo rm -rf /usr/local/frp
# 删除 FRP 日志(如果存在于其他位置)
# sudo rm -rf /path/to/other/logs
3. 移除防火墙规则
在 B 服务器(CentOS)上:
# 移除 frps 监听端口 6000
sudo firewall-cmd --permanent --remove-port=6000/tcp
# 移除 frps 监听端口 7000
sudo firewall-cmd --permanent --remove-port=7000/tcp
# 移除 Dashboard 端口 7500(如果启用)
sudo firewall-cmd --permanent --remove-port=7500/tcp
# 移除 HTTP 和 HTTPS 虚拟主机端口
sudo firewall-cmd --permanent --remove-port=8080/tcp
sudo firewall-cmd --permanent --remove-port=8443/tcp
# 重新加载防火墙规则
sudo firewall-cmd --reload
在 C 服务器(Ubuntu)上:
# 移除允许的服务端口
sudo ufw delete allow 22/tcp
sudo ufw delete allow 80/tcp
# 如果有其他规则,按需删除
# sudo ufw delete allow <port>/tcp
# 重新加载 ufw 规则
sudo ufw reload
4. 移除安全组规则(如果适用)
如果 B 服务器位于云服务商上,确保在云服务商的控制台中,删除之前添加的安全组入站规则:
- TCP 7000
- TCP 7500
- TCP 8080、8443
九、注意事项
- 安全性:确保 FRP 的配置文件中使用了强密码,尤其是 Dashboard 部分。建议开启 TLS 加密,提升传输安全性。
- 日志管理:FRP 会生成日志文件,您可以在配置文件中配置日志路径和日志级别,以便进行问题排查。
- 更新 FRP:定期检查 FRP 的更新,获取最新的功能和安全补丁。
- 监控:使用 FRP Dashboard 可以实时监控连接状态和流量,帮助您了解 FRP 的运行情况。
十、完整示例配置文件
frps.toml(B 服务器)
# /usr/local/frp/frps.toml
[common]
bind_port = 7000
dashboard_port = 7500
dashboard_user = "admin"
dashboard_pwd = "your_secure_password"
vhost_http_port = 8080
vhost_https_port = 8443
# enable_tls = true
frpc.toml(C 服务器)
# /usr/local/frp/frpc.toml
[common]
server_addr = "117.62.206.56"
server_port = 7000
[ssh]
type = "tcp"
local_ip = "127.0.0.1"
local_port = 22
remote_port = 6000
[web]
type = "http"
local_port = 80
custom_domains = ["yourdomain.com"]
请根据您的实际需求调整配置文件中的端口和域名。
十一、总结
通过上述步骤,您可以在 A(本地 Windows)、B(中转服务器 CentOS)和 C(目标服务器 Ubuntu)之间配置 FRP,实现内网穿透和服务的远程访问。同时,指南中提供了完整的删除操作,确保您能够在需要时彻底移除 FRP 配置。请在配置过程中注意安全性,合理设置防火墙和安全组,保障系统的安全运行。
标签:frps,实现,frp,sudo,穿透,FRP,frpc,服务器 From: https://blog.csdn.net/weixin_51524504/article/details/145008761