学习笔记094——Ubuntu 如何部署 frp 客户端服务?

什么是FRP

frp 是一款开源的反向代理工具 ,全称为 Fast Reverse Proxy ,由 Golang 开发,主要用于内网穿透场景,能够帮助用户从公网访问处于内网环境的服务。

核心作用

在日常开发或运维中,很多设备(如本地服务器、树莓派、家用 NAS)处于内网,没有公网 IP,无法被外网直接访问。frp 可以通过一台拥有公网 IP 的服务器作为中转,建立公网与内网之间的通信隧道,从而实现外网对内网服务的访问。

工作原理

frp 采用 C/S(客户端 - 服务端)架构,分为两个核心组件:

  1. frps(服务端)
    • 部署在拥有公网 IP 的服务器上。
    • 负责监听公网端口,接收来自外网的请求,并将请求转发给内网的 frpc 客户端。
  2. frpc(客户端)
    • 部署在内网设备上。
    • 主动与公网的 frps 建立长连接,接收 frps 转发的请求,再将请求转发给内网的目标服务(如 Web 服务、SSH 服务)。

安装方法

下载地址:点击下载

FRP 的 GitHub Release 主页:https://github.com/fatedier/frp/releases

bash 复制代码
# 下载压缩包后,解压并复制客户端程序和配置文件
tar -zxvf frp_0.63.0_linux_amd64.tar.gz
cd frp_0.63.0_linux_amd64
sudo cp frpc /usr/local/bin/
sudo mkdir -p /etc/frp
sudo cp frpc.toml /etc/frp/

# 编辑客户端配置文件
sudo vim /etc/frp/frpc.toml

配置文件内容

bash 复制代码
serverAddr = "htl.yy.86.cn"
serverPort = 10190
auth.method = "token"
auth.token ="htl"

[[proxies]]
name = "ssh端口映射"
type = "tcp"
localIP = "127.0.0.1"
localPort = 22
remotePort = 5009

全局配置字段说明:

字段名 类型 说明 默认值 示例
serverAddr 字符串 frps 所在公网服务器的 IP / 域名(核心字段,必须正确) serverAddr = "1.2.3.4"
serverPort 整数 frps 监听的端口(需和 frps.toml 中 bindPort 一致) 7000 serverPort = 7000
auth.token 字符串 客户端与服务端的认证令牌(需和 frps.toml 中 auth.token 一致) auth.token = "12345678"
auth.method 字符串 认证方式,可选 token/oidc,常用 token "token" auth.method = "token"

代理配置字段说明:

字段名 类型 说明 示例
name 字符串 代理名称(唯一,自定义,用于标识该穿透规则) name = "ssh_proxy"
type 字符串 代理协议类型,常用:tcp/udp/http/https/tcpmux type = "tcp"
localIP 字符串 内网服务的 IP:本地服务填 127.0.0.1,局域网设备填内网 IP localIP = "192.168.1.100"
localPort 整数 内网服务的实际端口(如 SSH 22、Web 8080) localPort = 22
remotePort 整数 公网映射端口(外网通过 公网IP:remotePort 访问),需确保 frps 端口开放 remotePort = 6000

启动以及创建服务

bash 复制代码
# 测试启动(确认无报错,能连接到服务端)
frpc -c /etc/frp/frpc.toml

# 创建 systemd 服务
sudo vim /etc/systemd/system/frpc.service

服务配置文件内容

bash 复制代码
[Unit]
Description=FRP Client (frpc)
After=network.target

[Service]
Type=simple
ExecStart=/usr/local/bin/frpc -c /etc/frp/frpc.toml
Restart=always
RestartSec=5

[Install]
WantedBy=multi-user.target

启动并设置开机自启

bash 复制代码
# 设置权限
chmod 777 /etc/systemd/system/frpc.service

# 重新加载
sudo systemctl daemon-reload

# 开机自启
sudo systemctl enable frpc

# 查看是否开机自启
sudo systemctl list-unit-files | grep frpc

# 启动
sudo systemctl start frpc

# 查看状态(确认 running)
sudo systemctl status frpc

启动成功后,即可通过公网IP以及转发的端口访问内网的目标服务(如 Web 服务、SSH 服务)。

相关推荐
代码游侠1 天前
学习笔记——GPIO按键与中断系统
c语言·开发语言·arm开发·笔记·嵌入式硬件·学习·重构
楼田莉子1 天前
Linux学习之库的原理与制作
linux·运维·服务器·c++·学习
枷锁—sha1 天前
【Vulhub】1Panel 访问控制绕过实战指南 (CVE-2024-39907)
运维·学习·安全·网络安全
浅念-1 天前
C++第一课
开发语言·c++·经验分享·笔记·学习·算法
周公挚友1 天前
2026年单服务器 Ubuntu 24.04 无公网离线部署 MongoDB 8.0.17 三节点副本集(主 / 从 / 仲裁)保姆级教程
linux·mongodb·ubuntu
蓝田生玉1231 天前
PLUTO论文阅读笔记
论文阅读·笔记
charlie1145141911 天前
现代嵌入式C++教程:对象池(Object Pool)模式
开发语言·c++·学习·算法·嵌入式·现代c++·工程实践
小丁努力不焦虑1 天前
你在以前遇到了什么困难你又是如何解决的?
学习
HABuo1 天前
【linux进程控制(三)】进程程序替换&自己实现一个bash解释器
linux·服务器·c语言·c++·ubuntu·centos·bash
我命由我123451 天前
Android Studio - Android Studio 中的 View Live Telemetry
经验分享·学习·android studio·学习方法·android jetpack·android-studio·android runtime