本篇文章将简单介绍如何使用frp实现内网端口转发

frp 是什么?

frp 是一款高性能的反向代理应用,专注于内网穿透。它支持多种协议,包括 TCP、UDP、HTTP、HTTPS 等,并且具备 P2P 通信功能。使用 frp,您可以安全、便捷地将内网服务暴露到公网,通过拥有公网 IP 的节点进行中转。
(引用自frp官方文档https://gofrp.org/zh-cn/docs/overview/)

为什么选择 frp?

通过在具有公网 IP 的节点上部署 frp 服务端,您可以轻松地将内网服务穿透到公网,并享受以下专业特性:
多种协议支持:客户端服务端通信支持 TCP、QUIC、KCP 和 Websocket 等多种协议。
TCP 连接流式复用:在单个连接上承载多个请求,减少连接建立时间,降低请求延迟。
代理组间的负载均衡。
端口复用:多个服务可以通过同一个服务端端口暴露。
P2P 通信:流量不必经过服务器中转,充分利用带宽资源。
客户端插件:提供多个原生支持的客户端插件,如静态文件查看、HTTPS/HTTP 协议转换、HTTP、SOCKS5 代理等,以便满足各种需求。
服务端插件系统:高度可扩展的服务端插件系统,便于根据自身需求进行功能扩展。
用户友好的 UI 页面:提供服务端和客户端的用户界面,使配置和监控变得更加方便。
(引用自frp官方文档https://gofrp.org/zh-cn/docs/overview/)

先决条件

  • 一台有公网的服务器
  • 需要端口转发的设备
  • 正常的网络

服务端设置(公网服务器)

下载安装frps

官方github:https://github.com/fatedier/frp
在Releases中根据自己服务器的实际情况下载合适的版本
解压其中的frpsfrps.toml

配置和启动frps

你可以编辑frps.toml来修改服务运行的端口,默认为7000

bindPort = 7000

进入解压后的文件所在的路径后以以下命令运行(frp只支持命令行运行)
Linux:

./frps -c ./frps.toml

Windows:

frps -c frps.toml

客户端设置

下载安装frpc

官方github:https://github.com/fatedier/frp
在Releases中根据自己服务器的实际情况下载合适的版本
解压其中的frpcfrpc.toml

配置frpc

编辑frpc.toml,格式如下

serverAddr = "改为你的服务器公网ip"
serverPort = 改为你在frps.toml中使用的端口

[[proxies]]
name = "改为你想要给此端口转发的名字"
type = "tcp"
localIP = "127.0.0.1"
localPort = 需要转发的本地端口号
remotePort = 转发到服务器的端口号

如果想要多个端口转发,示例如下

serverAddr = "改为你的服务器公网ip"
serverPort = 改为你在frps.toml中使用的端口

[[proxies]]
name = "改为你想要给此端口转发的名字1"
type = "tcp"
localIP = "127.0.0.1"
localPort = 需要转发的本地端口号1
remotePort = 转发到服务器的端口号1

[[proxies]]
name = "改为你想要给此端口转发的名字2"
type = "tcp"
localIP = "127.0.0.1"
localPort = 需要转发的本地端口号2
remotePort = 转发到服务器的端口号2

启动frpc

进入解压后的文件所在的路径后以以下命令运行(frp只支持命令行运行)
Linux:

./frpc -c ./frpc.toml

Windows:

frpc -c frpc.toml

可能出现的问题和解决方案

无法启动

  • 请检查你的软件版本是否与系统匹配

无法连接

  • 请检查你的服务端和客户端的防火墙设置,放行相关端口
  • 请检查你的配置文件是否正确
  • 请检查你的服务端和客户端版本是否相同

密钥错误

  • 你可能在服务端的配置文件中设置了密钥,将密钥设置为空或在客户端配置中填写相同密钥即可