跳至主要内容
Yui

从零开始部署 FRP 内网穿透:随时随地访问内网服务

这是一篇关于部署 frp(Fast Reverse Proxy)的完整教程。通过本教程,你可以轻松将家里的 NAS、本地测试服务器暴露到公网,实现随时随地访问。

阅读前必看:

  1. 请确认你拥有一台具备固定公网 IPv4 地址的云服务器。
  2. 教程命令中适时会加上 sudo,如果在实际部署过程中遇到 permission denied(权限拒绝),说明权限不够,在命令前加上 sudo 即可。
  3. 本教程以目前主流的 x86_64 (amd64) 架构 Linux 为例。
  4. Windows端部署方法后续补充。

第一阶段:云服务器端 (frps) 部署

1. 安装基础依赖包

首先我们需要安装接下来会用到的软件包,请根据你的 Linux 发行版选择对应的命令。

Debian / Ubuntu 系:

更新软件源:

sudo apt update

安装必要软件包:

sudo apt install curl tar -y

RHEL / Fedora / CentOS / Rocky 等红帽系:

更新软件源:

sudo dnf update

安装必要软件包:

sudo dnf install curl tar -y

2. 下载并解压 frp

我们需要根据服务器系统和架构下载对应的版本。个人电脑或大部分云服务器基本都是 amd64 (即 x86_64)。

找个目录存放文件,这里以 /home/你的用户名/Documents/ 目录为例(你也可以随意放在其他地方,只要记住路径即可)。

进入指定目录:

cd ~/Documents

接下来下载 frp 压缩包。这里提供了官方下载地址,如果你所在的网络访问 GitHub 较慢,可以使用我提供的备用加速代理。

使用官方地址下载:

curl -O https://github.com/fatedier/frp/releases/download/v0.67.0/frp_0.67.0_linux_amd64.tar.gz

或者使用加速代理下载:

curl -O https://proxy.kokode.su/github/fatedier/frp/releases/download/v0.67.0/frp_0.67.0_linux_amd64.tar.gz

对下载好的压缩包进行解压:

tar -zxvf frp_0.67.0_linux_amd64.tar.gz

为了方便后续管理,我们把解压出来的文件夹重命名为 frps,并进入该目录:

重命名文件夹:

mv frp_0.67.0_linux_amd64 frps

进入 frps 目录:

cd frps

清理掉云服务器上不需要的客户端文件,保持目录整洁:

rm -rf frpc*

使用 ls 命令确认是否只保留了服务端文件:

ls

预期输出如下:

frps  frps.toml  LICENSE

3. 配置 frps.toml

保险起见,我们先备份原有的默认配置,然后清空它并查看状态:

备份并清空配置:

cp frps.toml frps.toml.bak && echo -n > frps.toml && cat frps.toml

注:如果配置文件已成功清空,终端中不会有任何输出(或者像原先一样显示为空)。

使用 vim 编辑配置文件:

vim frps.toml

提示:按 i 键进入 vim 的编辑模式,粘贴以下内容。你可以参考我使用的配置,请务必根据自身需求修改密码和 Token。

bindPort = 7000 
transport.tls.force = true
auth.token = "your_strong_token"

# Server Dashboard(可选):可以查看 frp 服务状态的网页管理面板
webServer.addr = "0.0.0.0"
webServer.port = 7500
webServer.user = "admin"
webServer.password = "your_password"

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

粘贴并修改完毕后,按 Esc 键退出编辑模式,输入 :wq 回车即可保存配置并退出。

4. 设置 Systemd 开机自启

为了让 frps 能够在服务器重启后自动运行,我们需要将其注册为系统服务。

创建并编辑服务配置文件:

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

绝对路径警告: Systemd 配置文件中不能使用 ~ 表示用户目录!请务必将下面的 /home/你的用户名/ 替换为你实际存放 frps 的绝对路径。

i 键进入编辑模式,粘贴以下内容:

[Unit]
Description=FRP Server
After=network.target

[Service]
Type=simple
User=root
WorkingDirectory=/home/你的用户名/Documents/frps
ExecStart=/home/你的用户名/Documents/frps/frps -c /home/你的用户名/Documents/frps/frps.toml
Restart=on-failure

[Install]
WantedBy=multi-user.target

Esc 键退出编辑模式,输入 :wq 回车即可保存配置并退出。

重载 systemd 配置:

sudo systemctl daemon-reload

设置开机自启并立即启动服务:

sudo systemctl enable --now frps.service

常用服务管理命令补充:

查看运行状态是否正常:

sudo systemctl status frps.service

停止服务:

sudo systemctl stop frps.service

重启服务:

sudo systemctl restart frps.service

取消开机自启:

sudo systemctl disable frps.service

至此,云服务器端的配置全部完成!


第二阶段:本地客户端 (frpc) 部署

假设我们本地需要穿透的设备(服务器 / NAS)使用的也是 Linux。其实 frpc 客户端的部署方法和 frps 差不了太多,以下是具体步骤。

1. 下载并解压

基础依赖安装步骤同上。将文件下载并解压到你喜欢的目录(依旧以 /home/你的用户名/Documents/ 为例):

进入目录:

cd ~/Documents

下载压缩包(此处使用代理地址为例):

curl -O https://proxy.kokode.su/github/fatedier/frp/releases/download/v0.67.0/frp_0.67.0_linux_amd64.tar.gz

解压文件:

tar -zxvf frp_0.67.0_linux_amd64.tar.gz

这次我们把它重命名为 frpc,并进入目录:

重命名文件夹:

mv frp_0.67.0_linux_amd64 frpc

进入 frpc 目录:

cd frpc

删掉用不到的服务端文件:

rm -rf frps*

使用 ls 命令确认是否只保留了客户端文件:

ls

预期输出如下:

frpc  frpc.toml  LICENSE

2. 配置 frpc.toml

保险起见,我们先备份并清空默认配置,确认清空状态:

备份并清空配置:

cp frpc.toml frpc.toml.bak && echo -n > frpc.toml && cat frpc.toml

使用 vim 编辑配置文件:

vim frpc.toml

i 键进入编辑模式,粘贴以下客户端配置参考。请仔细阅读注释,理解模块化配置的逻辑:

# --- 全局配置 ---
transport.tls.enable = true
serverAddr = "114.114.114.114" # 【必改】请填写你云服务器的固定公网 IPv4 地址
serverPort = 7000 # 必须与云端 frps.toml 中的 bindPort 保持一致
auth.token = "your_strong_token" # 必须与云端 frps.toml 中的 auth.token 保持一致

# --- 穿透服务配置模块 ---
# 说明:以下每一个 [[proxies]] 都是一个独立的端口穿透任务。
# 以后想要新增映射,只需复制一个块并修改即可。

[[proxies]]
name = "ssh" # 任务名称,全局必须唯一,不能重复!
type = "tcp" # 协议类型:tcp 或 udp
localPort = 22 # 本地内网需要被映射的真实端口
remotePort = 2222 # 映射到公网的端口(访问云服务器IP:2222即可连接本地SSH)

[[proxies]]
name = "server_a"
type = "tcp"
localPort = 1234
remotePort = 5678

[[proxies]]
name = "server_b"
type = "udp"
localPort = 2345
remotePort = 6789

粘贴并修改完毕后,按 Esc 键退出编辑模式,输入 :wq 回车即可保存配置并退出。
注:需要注意的是,新增配置只需要新增如下配置块

[[proxies]]
name = "server_c"
type = "tcp"
localPort = 3456
remotePort = 7890

避坑指南:

  1. 新增配置时,name 绝对不能重复。
  2. 配置里的 remotePort(如 2222, 5678, 6789 等),必须去你的云服务商控制台(阿里云/腾讯云等)的防火墙/安全组中放行相应的端口,否则即使启动成功也连不上!

每次修改配置后,务必执行命令重启客户端服务才能生效:

sudo systemctl restart frpc.service

3. 设置 Systemd 开机自启

同样地,我们把它注册为系统服务:

创建并编辑服务配置文件:

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

再次提醒: 请将下方所有的 /home/你的用户名/ 替换为实际的绝对路径。

i 键进入编辑模式,粘贴以下内容:

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

[Service]
Type=simple
DynamicUser=yes
Restart=on-failure
RestartSec=5s
WorkingDirectory=/home/你的用户名/Documents/frpc
ExecStart=/home/你的用户名/Documents/frpc/frpc -c /home/你的用户名/Documents/frpc/frpc.toml
ExecReload=/home/你的用户名/Documents/frpc/frpc reload -c /home/你的用户名/Documents/frpc/frpc.toml
LimitNOFILE=1048576

[Install]
WantedBy=multi-user.target

(注:如果启动遇到权限问题,可将 DynamicUser=yes 注释掉,并替换为 User=你的用户名)

Esc 键退出编辑模式,输入 :wq 回车即可保存配置并退出。

重载 systemd 配置:

sudo systemctl daemon-reload

设置开机自启并立即启动服务:

sudo systemctl enable --now frpc.service

确认客户端是否正常运行:

sudo systemctl status frpc.service

如果看到 active (running) 字样,说明内网穿透已经部署成功!现在你可以通过公网 IP 测试连接你的本地服务了。

关于本文

由 青空由依(AozoraYui)/青空由纪(AozoraYuki)/青空葵(AozoraAoi) 撰写,采用 CC BY-NC 4.0 许可协议。

#Linux #教程 #内网穿透 #FRP