首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >使用 frp 自建 免费内网穿透教程

使用 frp 自建 免费内网穿透教程

作者头像
IT蜗壳-Tango
发布2026-07-14 22:03:00
发布2026-07-14 22:03:00
620
举报

自建 · 免费 · 隧道

FRP 0.69.1

使用 frp 自建 免费内网穿透教程

一台公网服务器 + 一台局域网主机 把内网服务映射到公网访问

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、安全建议

  1. auth.token 使用随机长字符串,不要使用简单密码
  2. 云服务器安全组只放行必要端口
  3. 不建议长期暴露默认 SSH 端口,可使用 600022022 等非默认端口
  4. 内网 Ubuntu 的 SSH 建议启用密钥登录
  5. 确认密钥登录可用后,建议禁用密码登录
  6. 不要把 /etc/frp/*.toml 上传到公开仓库(含 token)
  7. 如只给自己远程管理使用,可考虑限制安全组来源 IP

⚠️ 禁用 SSH 密码登录前,务必先确认密钥登录已经可用!

禁用密码登录配置:

sudo vim /etc/ssh/sshd_config

PasswordAuthentication no PermitRootLogin no

sudo systemctl restart ssh

11、故障排查

frpc 连接不上 frps

检查:

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

公网端口无法 SSH

检查公网服务器是否监听远程端口:

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 均使用占位符

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2026-06-30,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 IT蜗壳 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 使用 frp 自建 免费内网穿透教程
    • frpc 连接不上 frps
    • 公网端口无法 SSH
    • 修改映射端口
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档