网站Logo wshsm

内网穿透frp

wshsm
6
2025-12-01

内网穿透frp技术部署

一、理解FRP

什么是内网穿透?

FRP 是 Fast Reverse Proxy(快速反向代理)的缩写,是一个高性能的反向代理应用,主要用于实现内网穿透。

FRP 的工作原理

FRP 采用 客户端-服务端 (Client-Server) 模型,由两部分组成:

  • frps (Server): 部署在拥有公网 IP 的云服务器上(比如阿里云、腾讯云、AWS 等 VPS)。它负责在公网“占位”,接收来自外部的连接。

  • frpc (Client): 部署在你想要暴露的内网机器上(比如你的树莓派、家用电脑、NAS)。它会主动向 frps 发起连接,保持一条加密的通道。

流程:

外部用户访问云服务器 (frps) -> frps 通过隧道将流量转发给内网机器 (frpc) -> 内网机器处理请求并原路返回数据。

二、文件结构分析

首先是frp官网地址:点击跳转

在文档中有教学应该如何使用,这里主要是讲解使用过程中的理解

首先应当是在服务器上配置服务端

服务端frps.toml文件

bindPort = 7000

客户端frpc.toml文件

假设下面是你的配置文件,下面对这些配置进行一个讲解

serverAddr = "8.8.8.001"
serverPort = 7000

[[proxies]]
name = "testhsm-wshsmtcp"
type = "tcp"
localIP = "127.0.0.1" 需要更改
localPort = 22 
remotePort = 8000
  • serverAddr:服务器的地址
  • serverPort:frp的管理端口,用来维持连接
  • localIP:一般是本机回环地址(如果frpc不在本机的话,这个地址需要更改)
  • localPort:这是客户端上 SSH 服务实际监听的端口。
  • remotePort:数据的入口,也是访问时对外开放的大门

三、部署

首先需要掌握基本的tmux使用,教学地址

密码

可以在frpc.toml和frps.toml后面添加这一行,当客户端想要和服务端建立连接时,服务端会检查客户端的密码是否对应,如果不对应则不会建立连接

auth.token = "**************"

四、自启动配置

这里使用systemd加tmux脚本来配置自启动

1.配置tmux脚本

创建tmux的脚本文件

vim ~/.frp/start_frp.sh

内容如下:

#!/bin/bash
# 这里保留 sleep 也可以,作为双重保险
sleep 10 

# 创建的会话名
SESSION_NAME="frp"
# 文件路径
FRP_PATH="/home/orangepi/.frp/frpc"
CONFIG_PATH="/home/orangepi/.frp/frpc.toml"

# 检测会话是否存在,不存在则创建
tmux has-session -t $SESSION_NAME 2>/dev/null
if [ $? != 0 ]; then
    tmux new-session -d -s $SESSION_NAME "$FRP_PATH -c $CONFIG_PATH"
fi

2.配置systemd开机自启服务

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

在新建的文件中添加以下内容:(以下为AI生成)

[Unit]
Description=Auto Start FRP inside Tmux
# 确保网络完全就绪后再运行
After=network.target network-online.target
Wants=network-online.target

[Service]
# 【关键配置 1】Type=forking
# 告诉 Systemd,这个脚本运行完就会退出,但它生成的子进程(Tmux Server)还在后台跑,不要把它杀掉。
Type=forking

# 【关键配置 2】User=orangepi
# 这一点至关重要!如果不写,Tmux 会以 root 身份运行。
# 那样当你登录 orangepi 用户时,输入 tmux ls 是看不到这个窗口的。
User=orangepi

# 指定你的脚本路径
ExecStart=/home/orangepi/.frp/start_frp.sh

# 定义停止服务时做什么(可选)
# 当你运行 sudo systemctl stop frp-tmux 时,它会优雅地杀掉 tmux 会话
ExecStop=/usr/bin/tmux kill-session -t frp

# 如果 Tmux 意外挂了,自动重启
Restart=on-failure
RestartSec=5s

[Install]
WantedBy=multi-user.target

运行这个systemd

1.刷新配置

sudo systemctl daemon-reload

2.开启开机自启

sudo systemctl enable frpc

3.立即测试启动

sudo systemctl start frpc

4.重启测试

sudo reboot

到此完成

下面提供方案二、由eh创建的/etc/systemd/system/frpc.service文件

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

[Service]
User=orangepi
ExecStart=/home/orangepi/.frp/frpc -c /home/orangepi/.frp/frpc.toml
Restart=always
RestartSec=5s

[Install]
WantedBy=multi-user.target

五、补充问题解决

如果遇到tmux没有启动,可以尝试产看日志,看服务是否报错

sudo systemctl status frpc
动物装饰