FRP内网穿透

简介

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

通过在具有公网 IP 的节点上部署 FRP 服务端,您可以轻松地将内网服务穿透到公网,并享受以下专业特性:

  • 多种协议支持:客户端服务端通信支持 TCP、QUIC、KCP 和 Websocket 等多种协议。
  • TCP 连接流式复用:在单个连接上承载多个请求,减少连接建立时间,降低请求延迟。
  • 代理组间的负载均衡。
  • 端口复用:多个服务可以通过同一个服务端端口暴露。
  • P2P 通信:流量不必经过服务器中转,充分利用带宽资源。
  • 客户端插件:提供多个原生支持的客户端插件,如静态文件查看、HTTPS/HTTP 协议转换、HTTP、SOCKS5 代理等,以便满足各种需求。
  • 服务端插件系统:高度可扩展的服务端插件系统,便于根据自身需求进行功能扩展。
  • 用户友好的 UI 页面:提供服务端和客户端的用户界面,使配置和监控变得更加方便。

工作原理

FRP 主要由两个组件组成:客户端(frpc) 和 服务端(frps)。通常情况下,服务端部署在具有公网 IP 地址的机器上,而客户端部署在需要穿透的内网服务所在的机器上。

由于内网服务缺乏公网 IP 地址,因此无法直接被非局域网内的用户访问。用户通过访问服务端的 frps,frp 负责根据请求的端口或其他信息将请求路由到相应的内网机器,从而实现通信。

代理

在 FRP 中,一个代理对应一个需要公开访问的内网服务。一个客户端可以同时配置多个代理,以满足不同的需求。

代理类型

FRP 支持多种代理类型,以适应不同的使用场景。以下是一些常见的代理类型:

  • TCP:提供纯粹的 TCP 端口映射,使服务端能够根据不同的端口将请求路由到不同的内网服务。
  • UDP:提供纯粹的 UDP 端口映射,与 TCP 代理类似,但用于 UDP 流量。
  • HTTP:专为 HTTP 应用设计,支持修改 Host Header 和增加鉴权等额外功能。
  • HTTPS:类似于 HTTP 代理,但专门用于处理 HTTPS 流量。
  • STCP:提供安全的 TCP 内网代理,要求在被访问者和访问者的机器上都部署 frpc,不需要在服务端暴露端口。
  • SUDP:提供安全的 UDP 内网代理,与 STCP 类似,需要在被访问者和访问者的机器上都部署 frpc,不需要在服务端暴露端口。
  • XTCP:点对点内网穿透代理,与 STCP 类似,但流量不需要经过服务器中转。
  • TCPMUX:支持服务端 TCP 端口的多路复用,允许通过同一端口访问不同的内网服务。

每种代理类型适用于不同的使用情境,您可以根据需求选择合适的代理类型来配置 FRP。

FRP内网穿透-服务端(frps)

  1. frp服务端需要安装在一台带 固定公网IP 的机器上,本文以阿里云服务器(Centos系统)为例;
  2. 需要根据处理器架构下载不同版本的frp。
    • 使用命令 uname -m 查看处理器架构。
    • 如果是 x86_64 即可选择 amd64,若是 aarch64 则选择 arm64

2. 下载frp

本文以当前最新版本(v0.54.0)为例:官方下载地址 注意选择合适版本。

查看系统架构内核:

uname -m

我的系统架构内核为 x86_64,因此我选择的版本为 frp_0.54.0_linux_amd64.tar.gz

sudo wget https://github.com/fatedier/frp/releases/download/v0.54.0/frp_0.54.0_linux_amd64.tar.gz

解压文件到 /opt/frp 目录下(目录可自行定义)

sudo mkdir /opt/frp

sudo tar -zxvf frp_0.54.0_linux_amd64.tar.gz && sudo mv frp_0.54.0_linux_amd64/* /opt/frp/

解压后包含如下文件:

frpc          客户端执行文件
frpc.toml     客户端配置文件
frps          服务端执行文件
frps.toml     服务端配置文件

3. 使用 systemd 管理 frps 服务

在 Linux 系统下,使用 systemd 可以方便地控制 frps 服务端的启动、停止、配置后台运行以及开机自启动。

以下是具体的操作步骤:

  1. 创建 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 = /opt/frp/frps -c /opt/frp/frps.toml

[Install]
WantedBy = multi-user.target
  1. 使用 systemd 命令管理 frps 服务
# 启动frp
sudo systemctl start frps

# 停止frp
sudo systemctl stop frps

# 重启frp
sudo systemctl restart frps

# 查看frp状态
sudo systemctl status frps

  1. 设置 frps 开机自启动

sudo systemctl enable frps

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

4. 修改配置

[v0.52.0] 版本开始,配置文件由 frps.ini 改成了 frps.toml

修改 frps.toml 文件

sudo vim /opt/frp/frps.toml

内容如下:

# 服务端口
bindPort = 7000

# 鉴权方式:token / oidc
auth.method = "token"
# TOKEN值(后续客户端配置一致即可)
auth.token = "5a138c6aefdb12873e39a21a26e9a4e6"

# HTTP 类型代理
vhostHTTPPort = 80
# HTTPS 类型代理
vhostHTTPSPort = 443

# Dashboard 配置
webServer.addr = "0.0.0.0"
webServer.port = 7001
webServer.user = "admin"
webServer.password = "admin"

5. 启动服务

执行命令:

sudo systemctl start frps

6. 设置开机启动

执行命令:

sudo systemctl enable frps

7. 访问服务端界面

通过 公网IP + 端口 访问 Dashboard 界面,例如:http://xx.xx.xx.xxx:7001/

访问页面如下:

FRP内网穿透-客户端(frpc)

1. 注意事项

  1. frp客户端 可以在任意一台 能上外网 的机器上,本文以本地服务器(Centos系统) 为例;
  2. 需要根据处理器架构下载不同版本的frp。
    • 使用命令 uname -m 查看处理器架构。
    • 如果是 x86_64 即可选择 amd64,若是 aarch64 则选择 arm64

2. 下载frp

本文以当前最新版本(v0.54.0)为例:官方下载地址 注意选择合适版本。

查看系统架构内核:

uname -m

我的系统架构内核为 aarch64,因此我选择的版本为 frp_0.54.0_linux_arm64.tar.gz

sudo wget https://github.com/fatedier/frp/releases/download/v0.54.0/frp_0.54.0_linux_arm64.tar.gz

解压文件到 /opt/frp 目录下(目录可自行定义)

sudo mkdir /opt/frp

sudo tar -zxvf frp_0.54.0_linux_arm64.tar.gz && sudo mv frp_0.54.0_linux_arm64/* /opt/frp/

解压后包含如下文件:

frpc          客户端执行文件
frpc.toml     客户端配置文件
frps          服务端执行文件
frps.toml     服务端配置文件

3. 使用 systemd 管理 frpc 服务

在 Linux 系统下,使用 systemd 可以方便地控制 frpc 服务端的启动、停止、配置后台运行以及开机自启动。

以下是具体的操作步骤:

  1. 创建 frpc.service 文件

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

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

写入内容

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

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

[Install]
WantedBy = multi-user.target
  1. 使用 systemd 命令管理 frpc 服务
# 启动frp
sudo systemctl start frpc

# 停止frp
sudo systemctl stop frpc

# 重启frp
sudo systemctl restart frpc

# 查看frp状态
sudo systemctl status frpc
  1. 设置 frpc 开机自启动
sudo systemctl enable frpc

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

4. 修改配置

[v0.52.0] 版本开始,配置文件由 frpc.ini 改成了 frpc.toml

修改 frpc.toml 文件

sudo vim /opt/frp/frpc.toml

内容如下:

# FRP服务端IP
serverAddr = "43.xxx.xxx.16"
# FRP服务端Port
serverPort = 7000

# 鉴权方式:token / oidc
auth.method = "token"
# TOKEN值
auth.token = "5a138c6aefdb12873e39a21a26e9a4e6"

# 客户端Dashboard 配置
webServer.addr = "0.0.0.0"
webServer.port = 7001
webServer.user = "admin"
webServer.password = "admin"

# 配置TCP连接
[[proxies]]
name = "TCP映射"
type = "tcp"
localIP = "127.0.0.1"
localPort = 22
remotePort = 6000

5. 启动服务

执行命令:

sudo systemctl start frpc

6. 设置开机启动

执行命令:

sudo systemctl enable frpc

7. 访问客户端界面

通过 内网IP + 端口 访问 Dashboard 界面,例如:http://192.168.0.88:7001/

访问页面如下:

8. 其他代理配置

参考 官方文档https://gofrp.org/zh-cn/docs/examples/vhost-http/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

星星乘坐的船

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值