内网穿透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