【Linux】frp内网穿透详细教程(简单易懂)

frp内网穿透详细教程(简单易懂)

文章目录

frp是什么?

frp 是一款高性能的反向代理应用,专注于内网穿透。它支持多种协议,包括 TCP、UDP、HTTP、HTTPS 等,并且具备 P2P 通信功能。使用 frp,可以安全、便捷地将内网服务暴露到公网,通过拥有公网 IP 的节点进行中转。

工作原理

frp 主要由两个组件组成:客户端(frpc) 和 服务端(frps)。通常情况下,服务端部署在具有公网 IP 地址的机器上,而客户端部署在需要穿透的内网服务所在的机器上。由于内网服务缺乏公网 IP 地址,因此无法直接被非局域网内的用户访问。用户通过访问服务端的 frps,frp 负责根据请求的端口或其他信息将请求路由到相应的内网机器,从而实现通信。

准备工作

获取公网IP:可以购买阿里云,腾讯云等服务器,便宜的即可。只需要获取到公网ip。

内网IP:有一台自己的服务器。

frp工具的使用

第一步:下载安装包

这里我们用的是Ubuntu 20.04,首先在服务端(公网服务器)和客户端(内网服务器)下载好对应的安装包。

复制代码
wget https://github.com/fatedier/frp/releases/download/v0.53.2/frp_0.53.2_linux_amd64.tar.gz

# 解压文件
tar -zxvf frp_0.53.2_linux_amd64.tar.gz

第二步:公网部署frps

在具有公网 IP 的机器上部署 frps,编辑 frps.toml 文件。以下是简化的配置,其中设置了 frp 服务器用于接收客户端连接的端口:

复制代码
bindPort = 7000

第三步:内网部署frpc

在需要被访问的内网机器上部署 frpc,编辑 frpc.toml 文件,假设 frps 所在服务器的公网 IP 地址为 x.x.x.x。以下是示例配置:

shell 复制代码
serverAddr = "x.x.x.x"
serverPort = 7000

[[proxies]]
name = "ssh"
type = "tcp"
localIP = "127.0.0.1"(可自己修改)
localPort = 22
remotePort = 6000(自己修改)

localIP 和 localPort 配置为需要从公网访问的内网服务的地址和端口。

remotePort 表示在 frp 服务端监听的端口,访问此端口的流量将被转发到本地服务的相应端口。

第四步:启动frps和frpc

先通过 ./frps -c ./frps.toml 启动服务端,再通过 ./frpc -c ./frpc.toml 启动客户端。

连接成功后会有success字样。

注:启动成功后,记得用nohup命令挂起,让其在后台运行

第五步:通过ssh访问内网服务器

使用以下命令通过 SSH 访问++内网机器++ ,假设++用户名为 test++(test修改为自己服务器的用户名):

ssh -o Port=6000 test@x.x.x.x

frp 将请求发送到 x.x.x.x:6000 的流量转发到内网机器的 22 端口。

那我不小心重启或者关机了,怎么办?

接下来我们使用 systemd 来管理 frp 服务,控制 frps 服务端/frpc客户端的启动、停止、配置后台运行以及开机自启动。

使用systemd

安装systemd(一般都有,可忽略)

如果您的 Linux 服务器上尚未安装 systemd,可以使用包管理器如 yum(适用于 CentOS/RHEL)或 apt(适用于 Debian/Ubuntu)来安装它:

shell 复制代码
# 使用 yum 安装 systemd(CentOS/RHEL)
yum install systemd

# 使用 apt 安装 systemd(Debian/Ubuntu)
apt install systemd

创建服务端frps.service文件

使用文本编辑器 (如 vim) 在 /etc/systemd/system 目录下创建一个 frps.service 文件,用于配置 frps 服务。

复制代码
sudo vim /etc/systemd/system/frps.service

写入内容

复制代码
[Unit]
# 服务名称,可自定义
Description = frp server
After = network.target syslog.target
Wants = network.target

[Service]
Type = simple
# 启动frps的命令,需修改为您的frps的安装路径
ExecStart = /path/to/frps -c /path/to/frps.toml

[Install]
WantedBy = multi-user.target

创建客户端frpc.service文件

使用文本编辑器 (如 vim) 在 /etc/systemd/system 目录下创建一个 frpc.service 文件,用于配置 frpc 服务。

写入内容

复制代码
[Unit]
# 服务名称,可自定义
Description = frp client
After = network.target syslog.target
Wants = network.target

[Service]
Type = simple
# 启动frpc的命令,需修改为您的frpc的安装路径
ExecStart = /path/to/frps -c /path/to/frpc.toml

[Install]
WantedBy = multi-user.target

使用systemd命令管理frp服务(frps/frpc)

如果在服务端我们就启动frps,在客户端我们就启动frpc。

复制代码
# 启动frp
sudo systemctl start frps/frpc
# 停止frp
sudo systemctl stop frps/frpc
# 重启frp
sudo systemctl restart frps/frpc
# 查看frp状态
sudo systemctl status frps/frpc

设置frps/frpc开机自启动

复制代码
sudo systemctl enable frps/frpc

通过遵循上述步骤,您可以轻松地使用 systemd 来管理 frp 服务,实现启动、停止、自动运行和开机自启动。确保替换路径和配置文件名称以匹配您的实际安装。

相关推荐
全栈工程师修炼指南6 分钟前
Nginx | stream content 阶段:UDP 协议四层反向代理浅析与实践
运维·网络·网络协议·nginx·udp
Lsir10110_14 分钟前
【Linux】进程信号(上半)
linux·运维·服务器
开开心心就好1 小时前
发票合并打印工具,多页布局设置实时预览
linux·运维·服务器·windows·pdf·harmonyos·1024程序员节
火车叼位1 小时前
脚本伪装:让 Python 与 Node.js 像原生 Shell 命令一样运行
运维·javascript·python
css趣多多1 小时前
add组件增删改的表单处理
java·服务器·前端
予枫的编程笔记1 小时前
【Linux进阶篇】从基础到实战:grep高亮、sed流编辑、awk分析,全场景覆盖
linux·sed·grep·awk·shell编程·文本处理三剑客·管道命令
Sheep Shaun1 小时前
揭开Linux的隐藏约定:你的第一个文件描述符为什么是3?
linux·服务器·ubuntu·文件系统·缓冲区
Tfly__1 小时前
在PX4 gazebo仿真中加入Mid360(最新)
linux·人工智能·自动驾驶·ros·无人机·px4·mid360
野犬寒鸦1 小时前
从零起步学习并发编程 || 第七章:ThreadLocal深层解析及常见问题解决方案
java·服务器·开发语言·jvm·后端·学习
陈桴浮海1 小时前
【Linux&Ansible】学习笔记合集二
linux·学习·ansible