网络知识

内网穿透 frp

FRP(Fast Reverse Proxy)是一款专注于内网穿透的高效反向代理工具,用于将位于内网或防火墙后的服务暴露到公网。FRP 的服务端和客户端是其核心组成部分,各自的作用如下:

1. FRP 服务端(frps)


FRP 服务端是运行在公网服务器上的程序,负责接收来自客户端的请求,并将其转发到正确的目标服务。它是整个内网穿透的中枢。

  • 部署位置:通常部署在一个有公网 IP 的服务器上(如云服务器)。
  • 作用
    • 监听指定端口,等待 FRP 客户端的连接。
    • 管理客户端的连接和隧道映射。
    • 将外部访问请求转发到内网的服务。

2. FRP 客户端(frpc)


FRP 客户端是运行在内网机器上的程序,负责将本地的服务通过隧道暴露到 FRP 服务端,进而实现公网访问。

  • 部署位置:部署在需要暴露服务的内网机器上。
  • 作用
    • 连接 FRP 服务端并保持心跳,确保隧道稳定。
    • 配置需要转发的内网服务(如 HTTP、SSH、数据库等)。
    • 将外部访问的流量从 FRP 服务端反向转发到本地服务。

3.FRP 工作原理简述


  1. 客户端启动后
    • FRP 客户端连接到 FRP 服务端,并建立一个持久的连接(通常基于 TCP)。
    • 根据客户端配置,告诉服务端如何转发流量(指定域名、端口等)。
  2. 外部访问时
    • 用户通过域名或公网 IP 访问 FRP 服务端。
    • FRP 服务端将请求转发到对应的客户端连接。
    • FRP 客户端接收到流量后,将其转发到本地指定的服务。

4.配置文件举例


  • 服务端配置 (frps.ini):
[common]
bind_port = 7000
  • 客户端配置 (frpc.ini):
[common]
server_addr = x.x.x.x  # 服务端公网 IP
server_port = 7000

[web]
type = http
local_port = 8080  # 内网服务端口
custom_domains = example.com

4.应用场景


  • 将本地开发环境暴露到公网测试。
  • 在没有公网 IP 的环境下远程访问内网的服务器或服务。
  • 解决防火墙限制问题,例如在内网访问远程设备。

5.Mac M4芯片 有FRP 客户端(frpc)吗,安装什么版本的合适


FRP 支持多种操作系统和架构,包括 macOS,因此 Mac M4 芯片(ARM64 架构) 是支持的。安装 FRP 客户端(frpc)时,只需选择适配 M4 芯片的版本即可。

1. 检查架构

Mac M4 是基于 ARM64 架构,你可以运行以下命令确认:

uname -m
  • 如果输出是 arm64,就需要下载适配 ARM64 的版本。
  • 如果输出是 x86_64(通过 Rosetta 转译),则可以选择适配 x86 的版本,但推荐使用原生 ARM64 版本以获得更高的性能。

2. 下载适配的 FRP 客户端

FRP 的官方 GitHub 提供各种架构和操作系统的预编译版本:

  1. 访问 FRP 的 GitHub Releases 页面
  2. 找到最新版本的发布页面(例如 frp_0.xx.x)。
  3. 下载适配 macOS ARM64 的文件,通常命名为:
frp_0.xx.x_darwin_arm64.tar.gz

3. 安装步骤

  1. 下载并解压:
tar -xzvf frp_0.xx.x_darwin_arm64.tar.gz
cd frp_0.xx.x

2.运行客户端(frpc):

./frpc -c frpc.ini

其中,frpc.ini 是你的客户端配置文件。

3.为了便于使用,可以将 frpc 移动到系统的可执行路径:

sudo mv frpc /usr/local/bin/

4. 示例配置

创建配置文件 frpc.ini,例如:

[common]
server_addr = your-server-ip
server_port = 7000

[ssh]
type = tcp
local_ip = 127.0.0.1
local_port = 22
remote_port = 6000

运行:

frpc -c frpc.ini

补充:在较新版本,安装有些变化。


执行解压缩命令tar -zxvf frp_0.61.0_linux_amd64.tar.gz

在当前目录下会出现一个frp_0.61.0_linux_amd64文件夹

文件夹中包含frpc frpc.toml frps frps.toml LICENSE等四个文件

注意:在较新版本中,已经没有frps.init文件,取而代之的是frps.toml文件

修改配置文件

服务端配置frps.toml, 使用nano 或 vim命令对frps.toml文件稍作修改,参考:

bindPort = 7000					# 服务端监听端口
vhostHTTPPort = 8000				# 用于反向代理HTTP主机时使用
auth.method = "token"				# 鉴权方式
auth.token = "password"				# 客户端连接的token

# 后台管理面板配置
webServer.port = 7500				# 后台面板端口号
webServer.addr = "0.0.0.0"			# 后台管理地址
webServer.user = "admin"			# 后台管理员账号
webServer.password = "pwd"			# 后台管理员密码

开放端口

在阿里云服务器中,我们只需在服务器控制台中添加规则即可。

在上面的配置中,我们使用了 70007001端口,分别添加规则即可

应用类型 为自定义,协议为TCP, 来源为0.0.0.0 都用默认设置即可,自行设置端口范围和备注。

启动服务

此时,输入./frps -c frps.toml即可启动服务

任选设备在浏览器中输入x.x.x.x:7001,出现如下图页面即为服务开放成功,其中,x.x.x.x为您的服务器公网ip

后台管理面板图片
访问地址:http://[serverAddr]:7500

客户端配置frpc.toml

serverAddr = "x.x.x.x"				# 服务端IP地址
serverPort = 7000				# 服务端通信端口

auth.method = "token"
auth.token = "password"  			# token 与服务端保持一直

[[proxies]]
name = "ssh"
type = "tcp"
localIP = "127.0.0.1"
localPort = 22					# 本地端口号
remotePort = 6000   				# 公网端口号

[[proxies]]
name = "web"
type = "http"	
localIP = "127.0.0.1"				# 本地监听地址和端口
localPort = 80					# 本地监听端口
customDomains = ["web.test.com"] 	# 域名或者IP

客户端启动:

./frpc -c ./frpc.toml