
自建 · 免费 · 隧道
FRP 0.69.1
一台公网服务器 + 一台局域网主机 把内网服务映射到公网访问
1、架构说明
外网电脑通过 SSH 连接云服务器公网 IP 的映射端口,frps 将流量转发给局域网 frpc,frpc 再转发到本机服务端口,完成穿透。
外网电脑 ↓ ssh -p <REMOTE_PORT> 腾讯云公网服务器 ↓ frps 监听 → frpc 转发 局域网 Ubuntu ↓ 127.0.0.1:<LOCAL_SERVICE_PORT> 内网服务
示例映射:
<CLOUD_PUBLIC_IP>:6000 → <LAN_UBUNTU_IP>:22
从外网执行:
ssh -p 6000 <LAN_USER>@<CLOUD_PUBLIC_IP>
2、前置条件
角色 | 示例系统 | 说明 |
|---|---|---|
公网服务器 | Ubuntu 24.04 | 有公网 IP,运行 frps |
局域网主机 | Ubuntu 24.04 | 位于内网,运行 frpc |
确认环境:
uname -m command -v systemctl systemctl status ssh
架构为 x86_64 则下载 linux_amd64 版本
3、下载 frp
本教程使用 frp 0.69.1 版本,从官方 GitHub release 下载:
curl -fL -o frp_0.69.1_linux_amd64.tar.gz \ https://github.com/fatedier/frp/releases/download/v0.69.1/frp_0.69.1_linux_amd64.tar.gz
tar -xzf frp_0.69.1_linux_amd64.tar.gz
💡 服务器访问 GitHub 较慢时,可先在本地下载再用 scp 上传
4、安装 frp 二进制
分别在公网服务器和局域网 Ubuntu 上执行:
sudo mkdir -p /opt/frp /etc/frp sudo cp frp_0.69.1_linux_amd64/frps /opt/frp/ sudo cp frp_0.69.1_linux_amd64/frpc /opt/frp/ sudo chmod +x /opt/frp/frps /opt/frp/frpc
验证版本:
/opt/frp/frps --version /opt/frp/frpc --version
期望输出:0.69.1
5、配置公网服务器 frps
在公网服务器上创建配置文件:
sudo vim /etc/frp/frps.toml
写入:
bindPort = 7000 auth.method = "token" auth.token = "<FRP_AUTH_TOKEN>"
配置项 | 说明 |
|---|---|
bindPort | frpc 连接 frps 使用的端口 |
auth.token | 客户端和服务端共享密钥,建议使用随机长字符串 |
💡 生成随机 token:openssl rand -hex 24
创建 systemd 服务:
sudo vim /etc/systemd/system/frps.service
[Unit] Description=frp server After=network-online.target Wants=network-online.target [Service] Type=simple ExecStart=/opt/frp/frps -c /etc/frp/frps.toml Restart=on-failure RestartSec=5s [Install] WantedBy=multi-user.target
启动并设置开机自启:
sudo systemctl daemon-reload sudo systemctl enable --now frps sudo systemctl status frps
检查监听端口:
ss -ltnp | grep 7000
6、配置局域网 Ubuntu frpc
在局域网 Ubuntu 上创建配置文件:
sudo vim /etc/frp/frpc.toml
写入:
serverAddr = "<CLOUD_PUBLIC_IP>" serverPort = 7000 auth.method = "token" auth.token = "<FRP_AUTH_TOKEN>" [[proxies]] name = "ubuntu-ssh" type = "tcp" localIP = "127.0.0.1" localPort = 22 remotePort = 6000
配置项 | 说明 |
|---|---|
serverAddr | 公网服务器 IP |
serverPort | 公网服务器 frps 的 bindPort |
localIP | 内网目标服务地址,SSH 通常写 127.0.0.1 |
localPort | 内网目标服务端口,SSH 默认 22 |
remotePort | 公网服务器暴露给外部访问的端口 |
创建 systemd 服务:
sudo vim /etc/systemd/system/frpc.service
[Unit] Description=frp client After=network-online.target Wants=network-online.target [Service] Type=simple ExecStart=/opt/frp/frpc -c /etc/frp/frpc.toml Restart=on-failure RestartSec=5s [Install] WantedBy=multi-user.target
启动并设置开机自启:
sudo systemctl daemon-reload sudo systemctl enable --now frpc sudo systemctl status frpc
7、放行云服务器端口
需要在云服务器安全组中放行:
端口 | 用途 |
|---|---|
7000/tcp | frpc 连接 frps |
6000/tcp | 外部访问内网 SSH |
如果系统本机启用了防火墙,也要放行:
sudo ufw allow 7000/tcp sudo ufw allow 6000/tcp
8、验证连接
在局域网 Ubuntu 上查看客户端日志:
journalctl -u frpc -n 30 --no-pager
login to server success proxy added: [ubuntu-ssh] start proxy success
在公网服务器上查看服务端日志:
journalctl -u frps -n 40 --no-pager
frps tcp listen on 0.0.0.0:7000 tcp proxy listen port [6000] new proxy [ubuntu-ssh] type [tcp] success
从外网测试 SSH:
ssh -p 6000 <LAN_USER>@<CLOUD_PUBLIC_IP>
登录成功后确认当前机器:
hostname whoami uname -a
9、常用维护命令
公网服务器
sudo systemctl status frps sudo journalctl -u frps -f sudo systemctl restart frps
局域网 Ubuntu
sudo systemctl status frpc sudo journalctl -u frpc -f sudo systemctl restart frpc
查看配置:
sudo cat /etc/frp/frps.toml sudo cat /etc/frp/frpc.toml
10、安全建议
⚠️ 禁用 SSH 密码登录前,务必先确认密钥登录已经可用!
禁用密码登录配置:
sudo vim /etc/ssh/sshd_config
PasswordAuthentication no PermitRootLogin no
sudo systemctl restart ssh
11、故障排查
检查:
ping <CLOUD_PUBLIC_IP> nc -vz <CLOUD_PUBLIC_IP> 7000 journalctl -u frpc -n 50 --no-pager
问题 | 处理 |
|---|---|
安全组未放行 7000 | 放行 7000/tcp |
token 不一致 | 确认 frps.toml 和 frpc.toml 中 token 完全一致 |
frps 未运行 | sudo systemctl restart frps |
检查公网服务器是否监听远程端口:
ss -ltnp | grep 6000
检查 frps 日志:
journalctl -u frps -n 50 --no-pager
检查局域网 Ubuntu SSH 是否运行:
systemctl status ssh ss -ltnp | grep ':22'
修改局域网 Ubuntu 的 /etc/frp/frpc.toml:
remotePort = 22022
然后重启客户端:
sudo systemctl restart frpc
⚠️ 记得在云服务器安全组放行新的远程端口
12、占位符说明
占位符 | 含义 |
|---|---|
<CLOUD_PUBLIC_IP> | 云服务器公网 IP |
<CLOUD_USER> | 云服务器 SSH 用户名 |
<LAN_UBUNTU_IP> | 局域网 Ubuntu IP |
<LAN_USER> | 局域网 Ubuntu 用户名 |
<FRP_AUTH_TOKEN> | frp 服务端和客户端共享 token |
<FRPS_BIND_PORT> | frps 监听端口,示例为 7000 |
<REMOTE_PORT> | 公网映射端口,示例为 6000 |
<LOCAL_SERVICE_PORT> | 内网服务端口,SSH 示例为 22 |
本文已脱敏,所有 IP、用户名、密码和 token 均使用占位符