实例场景

  • 公网服务器:腾讯云/阿里云,IP:xx.xx.xx.xx

  • 内网机器:家里的树莓派/旧电脑,euler,IP:192.168.1.151

  • 目标:在外网能 SSH 登录家里的机器,并能访问家里的 Web 服务

第一步:准备工作

1.1 下载 FRP

公网服务器内网机器上都执行(注意选择对应系统的版本):

bash

# 查看系统架构
arch
# x86_64 系统下载 amd64 版本
# armv7l 系统下载 arm64 版本

# 下载最新版本(以 v0.58.0 为例)
wget https://github.com/fatedier/frp/releases/download/v0.58.0/frp_0.58.0_linux_amd64.tar.gz

# 解压
tar -zxvf frp_0.58.0_linux_amd64.tar.gz
cd frp_0.58.0_linux_amd64

1.2 文件说明

  •  frps.toml:服务端程序及配置文件(用于公网服务器)

  •  frpc.toml:客户端程序及配置文件(用于内网机器)

  • frps-full.example.toml:服务端配置示例(参考用)


第二步:配置服务端(公网服务器)

2.1 编辑配置文件

bash

# 进入目录
cd ~/frp_0.58.0_linux_amd64

# 编辑服务端配置
vim frps.toml

写入以下内容:

toml

# frps.toml
bindPort = 7000                # frp 服务端通信端口
kcpBindPort = 7000             # KCP 协议支持(可选,用于优化弱网环境)

# 身份验证
auth.method = "token"
auth.token = "MySecureToken123!@#"  # 自定义一个复杂密码

# 仪表盘配置(可选,用于监控)
webServer.addr = "0.0.0.0"
webServer.port = 7500
webServer.user = "admin"
webServer.password = "admin123"

# 日志配置
log.to = "./frps.log"
log.level = "info"
log.maxDays = 3

2.2 启动服务端

bash

# 前台启动(测试用)
./frps -c frps.toml

# 如果能正常运行,按 Ctrl+C 停止,改为后台运行

2.3 使用 systemd 管理服务(推荐)

bash

# 创建 systemd 服务文件
sudo vim /etc/systemd/system/frps.service

写入:

ini

[Unit]
Description=Frp Server Service
After=network.target

[Service]
Type=simple
User=root
Restart=on-failure
RestartSec=5s
ExecStart=/home/ubuntu/frp_0.58.0_linux_amd64/frps -c /home/ubuntu/frp_0.58.0_linux_amd64/frps.toml
LimitNOFILE=1048576

[Install]
WantedBy=multi-user.target

启动服务:

bash

# 重新加载 systemd
sudo systemctl daemon-reload

# 启动服务
sudo systemctl start frps

# 设置开机自启
sudo systemctl enable frps

# 查看状态
sudo systemctl status frps

# 查看日志
sudo journalctl -u frps -f

遇到的错误 
[root@iZj6c5292t3vftcw67j1p0Z frp_0.58.0_linux_amd64]# systemctl status frps
● frps.service - Frp Server Service
   Loaded: loaded (/etc/systemd/system/frps.service; disabled; vendor preset: disabled)
   Active: activating (auto-restart) (Result: exit-code) since Tue 2026-03-10 11:53:12 CST; 3s ago
  Process: 7346 ExecStart=/root/frp_0.58.0_linux_amd64/frps -c /root/frp_0.58.0_linux_amd64/frps.toml (code=exited, status=203/EXEC)
 Main PID: 7346 (code=exited, status=203/EXEC)

Mar 10 11:53:12 iZj6c5292t3vftcw67j1p0Z systemd[1]: frps.service: Main process exited, code=exited, status=203/EXEC
Mar 10 11:53:12 iZj6c5292t3vftcw67j1p0Z systemd[1]: frps.service: Failed with result 'exit-code'.


权限问题 编写的sever脚本 用户使用的 
User=nobody  改为 User=root 就正确了 
因为我的程序 是放在 /root/frp_0.58.0_linux_amd64/frps 下的 
如果不想使用root 运行 可以将程序 移到其他位置 并修改权限

2.4 防火墙设置

bash

# 开放端口
#ubuntu debian 服务器
sudo ufw allow 7000/tcp    # frp 通信端口
sudo ufw allow 7000/udp     # KCP 端口(如果启用了)
sudo ufw allow 7500/tcp     # 仪表盘端口
sudo ufw allow 6000/tcp     # SSH 穿透端口
sudo ufw allow 8080/tcp     # Web 穿透端口


#openeuler服务器
sudo firewall-cmd --zone=public --add-port=7000/tcp --permanent

# 云服务器记得在安全组也开放这些端口

第三步:配置客户端(内网机器)

3.1 编辑配置文件

bash

cd ~/frp_0.58.0_linux_amd64
vim frpc.toml

写入以下内容:

toml

# frpc.toml
serverAddr = "xx.xx.xx.xx"    # 你的公网服务器 IP
serverPort = 7000                  # 与服务端的 bindPort 一致

# 身份验证(必须与服务端一致)
auth.method = "token"
auth.token = "MySecureToken123!@#"

# 日志配置
log.to = "./frpc.log"
log.level = "info"
log.maxDays = 3

# ============ 代理配置 ============

# 1. SSH 服务穿透
[[proxies]]
name = "ssh"
type = "tcp"
localIP = "127.0.0.1"
localPort = 22
remotePort = 6000    # 访问公网服务器的 6000 端口 = 访问内网的 22 端口

# 2. Web 服务穿透(例如家里的 NAS 或 Web 应用)
[[proxies]]
name = "portainer"           # 穿透服务名
type = "tcp"                 # 代理的类型为 TCP 协议
localIP = "192.168.1.151"    # 指定要穿透的本地服务所在的 IP 地址 内网 IP,也可以用 127.0.0.1 /如用是访问 Docker容器 服务这里使用docker 网关 IP:172.17.0.1
localPort = 80                #  指定要穿透的本地服务的端口号
remotePort = 8080             # 指定在 FRP 服务端(具有公网 IP 的服务器)上监听的端口号

# 3. 如果有多个 Web 服务,可以用 HTTP 类型(需要服务端配置 vhostHTTPPort)
# [[proxies]]
# name = "blog"
# type = "http"
# localPort = 8080
# customDomains = ["blog.example.com"]  # 需要域名解析到公网服务器

3.2 启动客户端

bash

# 测试启动
./frpc -c frpc.toml

# 如果正常,会显示 "start proxy success"
# 按 Ctrl+C 停止,然后配置为服务

3.3 使用 systemd 管理客户端

bash

sudo vim /etc/systemd/system/frpc.service

写入:

ini

[Unit]
Description=Frp Client Service
After=network.target

[Service]
Type=simple
User=gs1
Group=gensang
Restart=on-failure
RestartSec=5s
#注意 frpc 放在home 目录下会 被selinux 阻止 这里将其放到 /usr/local/目录下
ExecStart=/usr/local/frpc/frpc -c /usr/local/frpc/frpc.toml
LimitNOFILE=1048576

[Install]
WantedBy=multi-user.target

启动服务:

bash

sudo systemctl daemon-reload
sudo systemctl start frpc
sudo systemctl enable frpc
sudo systemctl status frpc

第四步:测试连接

4.1 测试 SSH 穿透

任意外网电脑上执行:

bash

# 假设内网机器的用户名是 pi
ssh -p 6000 pi@xx.xx.xx.xx

如果能成功登录,说明 SSH 穿透成功!🎉

4.2 测试 Web 服务

  1. 首先在内网机器上启动一个测试 Web 服务:

bash

# 如果没安装 python3,先安装
python3 -m http.server 80
  1. 在外网浏览器访问:

text

http://xx.xx.xx.xx:8080

如果能看到目录列表,说明 Web 穿透成功!🎉

4.3 查看监控仪表盘

浏览器访问:

text

http://xx.xx.xx.xx:7500

用户名密码:admin / admin12345


第五步:高级配置示例

5.1 多个 SSH 用户

toml

# frpc.toml
[[proxies]]
name = "ssh-pi"
type = "tcp"
localIP = "192.168.1.151"
localPort = 22
remotePort = 6001

[[proxies]]
name = "ssh-ubuntu"
type = "tcp"
localIP = "192.168.1.151"
localPort = 22
remotePort = 6002

5.2 STCP 模式(安全的 TCP,需要双方都装 frpc)

toml

# 服务端无需特殊配置,客户端配置:
[[proxies]]
name = "secret-ssh"
type = "stcp"
secretKey = "your-secret-key"
localIP = "127.0.0.1"
localPort = 22

# 访问方配置:
[[visitors]]
name = "secret-ssh-visitor"
type = "stcp"
serverAddr = "xx.xx.xx.xx"
serverPort = 7000
secretKey = "your-secret-key"
bindAddr = "127.0.0.1"
bindPort = 2222

5.3 负载均衡

toml

# frpc.toml(多台内网机器)
[[proxies]]
name = "web1"
type = "tcp"
localIP = "192.168.1.101"
localPort = 80
remotePort = 8080
group = "web"
groupKey = "web-group-key"

[[proxies]]
name = "web2"
type = "tcp"
localIP = "192.168.1.102"
localPort = 80
remotePort = 8080
group = "web"
groupKey = "web-group-key"

常见问题排查

❌ 连接失败

  1. 检查防火墙:确保公网服务器的端口都开放了

  2. 检查 token:服务端和客户端的 token 必须一致

  3. 查看日志journalctl -u frpc -f 或查看 frp 目录下的 .log 文件

❌ SSH 连接被拒绝

bash

# 检查内网机器的 SSH 服务
systemctl status sshd

# 测试本地是否能连
ssh localhost

❌ 端口被占用

bash

# 查看端口占用
netstat -tlnp | grep 7000
Logo

AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。

更多推荐