Linux 安装frp实现内网穿透

目录

  • [一. frp简介](#一. frp简介)
  • [二. 服务器端提前准备](#二. 服务器端提前准备)
    • [2.1 下载](#2.1 下载)
    • [2.2 创建`frps`命令的目录,并配置](#2.2 创建frps命令的目录,并配置)
    • [2.3 创建用来运行frps的用户和组](#2.3 创建用来运行frps的用户和组)
    • [2.4 创建`frps`命令的配置文件夹](#2.4 创建frps命令的配置文件夹)
    • [2.5 创建`frps`命令的配置文件](#2.5 创建frps命令的配置文件)
  • [三. 服务器端配置](#三. 服务器端配置)
    • [3.1 简单配置测试](#3.1 简单配置测试)
    • [3.2 配置为系统服务](#3.2 配置为系统服务)
    • [3.3 caddy配置反向代理](#3.3 caddy配置反向代理)
  • [四. 客户端](#四. 客户端)
    • [4.1 下载](#4.1 下载)
    • [4.2 配置](#4.2 配置)
    • [4.3 启动](#4.3 启动)
      • [4.3.1 客户端在8080端口启动服务](#4.3.1 客户端在8080端口启动服务)
      • [4.3.2 客户端启动sshd服务](#4.3.2 客户端启动sshd服务)

一. frp简介

🔷frp(Fast Reverse Proxy)是一个高性能的反向代理工具,主要用于内网穿透。frp可以帮助将内网的服务暴露到公网,使得外部用户可以访问内网中的服务。

主要特点

  • 高性能:使用 Go 语言编写,性能优秀
  • 跨平台:支持 Windows、Linux、macOS 等多种操作系统
  • 配置简单:通过简单的配置文件即可完成设置
  • 多种协议支持:支持 TCP、UDP、HTTP、HTTPS 等协议
  • 安全传输:支持 TLS 加密传输
  • 灵活扩展:支持多种插件和扩展功能

FRP 由两部分组成:

  • frps(FRP Server):运行在公网服务器上
  • frpc(FRP Client):运行在内网机器上
bash 复制代码
           Internet
              │
              │
      https://域名.com
              │
              ▼
      ┌─────────────┐
      │caddy或nginx │
      │    :443     │
      └──────┬──────┘
             │
      reverse_proxy反向代理
             │ 
             ▼
      ┌─────────────┐
      │  frps服务端  │
      │  127.0.0.1  │
      │    :18080   │
      └──────┬──────┘
             │
         FRP Tunnel通道
             │
             ▼
      ┌─────────────┐
      │  frpc客户端  │
      │ Windows或nas│
      └──────┬──────┘
             │
             ▼
      127.0.0.1:8080
             │
             ▼
           内网服务

二. 服务器端提前准备

2.1 下载

  • 查看系统架构 → x86_64:下载Linux amd64 版本
bash 复制代码
[ec2-user@ip-172-31-25-58 ~]$ uname -m
x86_64
[ec2-user@ip-172-31-25-58 ~]$
  • 截止到2026/09/09,最新版本为v0.71.0
bash 复制代码
cd /tmp
curl -LO https://github.com/fatedier/frp/releases/download/v0.71.0/frp_0.71.0_linux_amd64.tar.gz
tar -xzf frp_0.71.0_linux_amd64.tar.gz
  • frps: 是服务端程序
  • frpc: 是客户端程序
bash 复制代码
[ec2-user@ip-172-31-25-58 tmp]$ ls -l frp_0.71.0_linux_amd64/
-rw-r--r--. 1 ec2-user ec2-user    11358 Aug 14 15:35 LICENSE
-rwxr-xr-x. 1 ec2-user ec2-user 16593080 Aug 14 15:31 frpc
-rw-r--r--. 1 ec2-user ec2-user      142 Aug 14 15:35 frpc.toml
-rwxr-xr-x. 1 ec2-user ec2-user 20332728 Aug 14 15:31 frps
-rw-r--r--. 1 ec2-user ec2-user       16 Aug 14 15:35 frps.toml
[ec2-user@ip-172-31-25-58 tmp]$

2.2 创建frps命令的目录,并配置

  • 创建存放frps命令的目录
bash 复制代码
sudo mkdir -p /opt/frp
sudo cp /tmp/frp_*/frps /opt/frp/
  • 配置权限
bash 复制代码
sudo chown root:root /opt/frp/frps
sudo chmod 755 /opt/frp/frps
bash 复制代码
[ec2-user@ip-172-31-25-58 ~]$ ls -l /opt/frp/frps
-rwxr-xr-x. 1 root root 20332728 Sep  9 08:36 /opt/frp/frps
[ec2-user@ip-172-31-25-58 ~]$

2.3 创建用来运行frps的用户和组

  • frp用户是一个专门用来运行frp服务的系统用户,没有home目录
  • 禁止使用frp用户使用shell进行登录
bash 复制代码
sudo groupadd --system frp
sudo useradd --system --gid frp --no-create-home --shell /sbin/nologin frp

2.4 创建frps命令的配置文件夹

bash 复制代码
sudo mkdir -p /etc/frp
sudo chown root:frp /etc/frp
sudo chmod 750 /etc/frp
bash 复制代码
[ec2-user@ip-172-31-25-58 ~]$ ls -ld /etc/frp/
drwxr-x---. 2 root frp 23 Sep  9 08:40 /etc/frp/
[ec2-user@ip-172-31-25-58 ~]$

2.5 创建frps命令的配置文件

bash 复制代码
sudo touch /etc/frp/frps.toml
sudo chown root:frp /etc/frp/frps.toml
####### 640 #######
# root用户:可以读写
# frp组:可以读
# 其他:无权限
###################
sudo chmod 640 /etc/frp/frps.toml
bash 复制代码
[ec2-user@ip-172-31-25-58 ~]$ sudo ls -l /etc/frp/frps.toml
-rw-r-----. 1 root frp 99 Sep  9 08:40 /etc/frp/frps.toml
[ec2-user@ip-172-31-25-58 ~]$

三. 服务器端配置

3.1 简单配置测试

  • 生成随机字符串
bash 复制代码
[ec2-user@ip-172-31-25-58 ~]$ openssl rand -base64 32
ZmSJ/wnLkFCOyqh9XaXKV6UdWYpL2lvxSG5V/E1tmno=
[ec2-user@ip-172-31-25-58 ~]$
bash 复制代码
[ec2-user@ip-172-31-25-58 ~]$ sudo cat /etc/frp/frps.toml
# frp服务要绑定的端口
bindPort = 7000

auth.method = "token"
auth.token = "ZmSJ/wnLkFCOyqh9XaXKV6UdWYpL2lvxSG5V/E1tmno="
[ec2-user@ip-172-31-25-58 ~]$
  • 简单测试,服务端可以正常运行
bash 复制代码
[ec2-user@ip-172-31-25-58 ~]$ sudo /opt/frp/frps -c /etc/frp/frps.toml
2026-09-09 08:47:13.927 [I] [frps/root.go:115] frps uses config file: /etc/frp/frps.toml
2026-09-09 08:47:14.094 [I] [server/service.go:253] frps tcp listen on 0.0.0.0:7000
2026-09-09 08:47:14.094 [I] [frps/root.go:124] frps started successfully
  • 7000端口也正常被占用了
bash 复制代码
[ec2-user@ip-172-31-25-58 ~]$ sudo ss -lntp | grep 7000
LISTEN 0      4096               *:7000             *:*    users:(("frps",pid=547265,fd=4))
[ec2-user@ip-172-31-25-58 ~]$

3.2 配置为系统服务

  • 配置frps系统服务
bash 复制代码
[ec2-user@ip-172-31-25-58 ~]$ sudo cat /etc/systemd/system/frps.service
[Unit]
# 服务描述:FRP 服务器(用于内网穿透的反向代理服务)
Description=FRP Server
# 官方文档地址
Documentation=https://gofrp.org/
# 在网络在线后再启动该服务
After=network-online.target
# 声明依赖 network-online.target,确保网络完全就绪
Wants=network-online.target

[Service]
# 服务类型:
#     simple 表示 ExecStart 启动的进程就是主进程
Type=simple

# 以 frp 用户身份运行服务(安全考虑,避免使用 root)
User=frp
# 以 frp 用户组身份运行服务
Group=frp

# 启动命令:
#     运行 frps 服务器程序
#     -c 指定配置文件路径
ExecStart=/opt/frp/frps -c /etc/frp/frps.toml
# 服务异常退出时自动重启
Restart=on-failure
# 重启间隔时间(秒)
RestartSec=5s

# 提高文件描述符限制,避免高并发时文件句柄不够用
LimitNOFILE=1048576

[Install]
# 指定在哪个运行级别启动(multi-user.target 表示多用户命令行模式)
WantedBy=multi-user.target
[ec2-user@ip-172-31-25-58 ~]$
  • frps管理的相关命令
bash 复制代码
sudo systemctl start frps
sudo systemctl stop frps
sudo systemctl restart frps
sudo systemctl status frps
# 实时查看日志
sudo journalctl -u frps -f

3.3 caddy配置反向代理

  • uri strip_prefix /frp
    • Caddy 的路径重写功能,用于移除 URL 中的指定前缀,让后端服务能正确识别路径。
    • 相当于访问https://fengyehong.dpdns.org/frp/ip地址:18080
bash 复制代码
[ec2-user@ip-172-31-25-58 ~]$ cat /etc/caddy/conf.d/fengyehong.dpdns.org.conf
fengyehong.dpdns.org {
        encode gzip
        
        # frp内网穿透
        handle /frp/* {
                uri strip_prefix /frp
                reverse_proxy 127.0.0.1:18080
        }

        log {
                output file /var/log/caddy/fengyehong_access.log {
                        roll_size 60mb
                        roll_keep 3
                        roll_keep_for 7d
                }
        }
}
[ec2-user@ip-172-31-25-58 ~]$

四. 客户端

4.1 下载

  • 下载服务器对应的客户端版本

4.2 配置

  • 解压后,找到frpc.toml的配置文件后,进行如下配置
  • ⚡注意:
    • 服务器侧已经使用caddy进行了端口代理,所有不需要打开18080端口
    • 如果想要远程ssh到本地电脑的话,服务器侧的10022端口还是需要打开的
bash 复制代码
# 服务器地址与端口号
serverAddr = "服务器ip地址"
serverPort = 7000

# 服务器认证token
auth.method = "token"
auth.token = "ZmSJ/wnLkFCOyqh9XaXKV6UdWYpL2lvxSG5V/E1tmno="

# ================ Web服务 ================
[[proxies]]
name = "windows-web"
type = "tcp"
# 本机客户端内部ip和端口号
localIP = "127.0.0.1"
localPort = 8080
# 服务器端口号
remotePort = 18080

# ================ SSH服务 ================
[[proxies]]
name = "windows-ssh"
type = "tcp"
# 本机客户端内部ip和端口号
localIP = "127.0.0.1"
localPort = 22
# 服务器端口号
remotePort = 10022

4.3 启动

  • 通过.\frpc.exe -c .\frpc.toml启动客户端

4.3.1 客户端在8080端口启动服务

  • 客户端通过python3 -m http.server 8080启动建议的程序
  • 然后外部网络就可以使用域名来访问内网提供的服务了

4.3.2 客户端启动sshd服务

🔷通过管理员权限打开Powershell

  • 获取windows端的ssh服务的名称 → sshd
powershell 复制代码
PS C:\WINDOWS\system32> Get-Service | Where-Object Name -like '*ssh*'

Status   Name               DisplayName
------   ----               -----------
Stopped  ssh-agent          OpenSSH Authentication Agent
Stopped  sshd               OpenSSH SSH Server
  • 查看服务的状态 → 停止的状态
powershell 复制代码
PS C:\WINDOWS\system32> Get-Service sshd

Status   Name               DisplayName
------   ----               -----------
Stopped  sshd               OpenSSH SSH Server
  • 启动sshd服务之后,服务的状态 → 运行中的状态
powershell 复制代码
PS C:\WINDOWS\system32> Start-Service sshd
PS C:\WINDOWS\system32>
PS C:\WINDOWS\system32> Get-Service sshd

Status   Name               DisplayName
------   ----               -----------
Running  sshd               OpenSSH SSH Server
  • windows上的sshd服务启动之后,就可以通过ssh远程访问windows了
相关推荐
一_个前端1 小时前
[TailScale]-打通你的局域网服务器到公网电脑
linux
DO_Community1 小时前
Omarchy 将研发基础设施迁移至 DigitalOcean 云平台
linux·人工智能·llm·agent·omarchy
米糕闯编程2 小时前
鱼香ros2(三)Linux操作总结
linux·机器人·ros2
一技安身2 小时前
【信创】银河麒麟V10服务器使用安装光盘Packages自建本地yum源
linux·运维·服务器
码农客栈3 小时前
Linux I2C驱动实验
linux·运维·驱动开发
爱喝水的鱼丶3 小时前
SAP-ABAP:隐式/显式增强开发规范与避坑指南:10 类典型错误与运维方案
运维·性能优化·sap·abap·增强·经验交流
OpenPomeloxCommunity4 小时前
Linux 驱动基础(二):驱动自动加载的设计与实现
linux
企业解惑小助手5 小时前
如何禁止文字复制?企业文档防复制项目需求拆解方案
运维·数据库·安全
蓝速科技5 小时前
酒店门店 AI 数字人前台场景适配与落地指南
大数据·运维·数据结构·数据库·人工智能·科技