使用 frpc 点对点内网穿透
计算学徒
2025年12月11日 19:20
收录于文集
共90篇

使用 frp 可以将内网的网络端口映射到公网服务器的网络端口,用户访问公网服务器的端口就是在访问内网的端口,从而实现内网穿透。

但是,这种端口映射方式的所有访问流量都需要从公网服务器中转,公网服务器的带宽会直接限制内网穿透的网速。我使用的是 3Mbps 带宽的阿里云服务器,使用这种方式在外面访问家里的网络,网速通常只有 400kBps 左右,非常难受。

frp 还提供了一种点对点的内网穿透方案,简单的讲就是在内网设备和外网设备之间建立一个点对点连接,两台设备直接通讯,数据流量无需第三方的服务器进行中转,内网穿透的带宽仅受限于家里的宽带。下面来详细介绍一下如何使用 frp 实现点对点的内网穿透。

尽管点对点内网穿透不需要公网服务器进行数据中转,还是需要一台具有固定 IP 的公网服务器提供点对点连接服务(连接成功之后就不需要这台公网服务器了)。假设公网服务器 IP 为 12.34.56.1,家里的内网设备为 A,在外使用的移动设备为 B。需要将设备 A 的 3260 端口映射到设备 B 的 3260 端口,那么,当设备 B 访问本地的 3260 端口时,就是在访问内网设备 A 的 3260 端口。

在公网服务器上需要运行 frps 服务,服务端口为 7000, 服务配置文件 frps.toml 内容如下:

代码块
JavaScript
自动换行
复制代码
bindPort = 7000
kcpBindPort = 7001
复制成功

bindPort 和 kcpBindPort 分别为 frps 服务的 TCP 和 UDP 监听端口,服务器的防火墙要放行这两个端口。运行 frps 服务:

代码块
JavaScript
自动换行
复制代码
./frps -c frps.toml
复制成功

在内网设备运行 frpc 客户端,客户端配置文件 frpc.toml 为:

代码块
JavaScript
自动换行
复制代码
serverAddr = "12.34.56.1"
serverPort = 7000

[[proxies]]
name = "p2p_server"
type = "xtcp"
localIP = "127.0.0.1"
localPort = 3260
secretKey = "password" 
复制成功

serverAddr 为 frps 服务所在的公网服务器的 IP 地址,serverPort 为 frps 服务的 TCP 监听端口。[[proxies]] 用于设置点对点服务提供内网服务的一端的配置参数,name 为服务名称(可以修改),type 为协议类型(不能修改),localIP 为提供内网服务的主机 IP(可以是本机或者局域网内的其他主机,根据实际情况填写即可),localPort 为内网访问的端口(根据实际情况填写),secretKey 为点对点服务的连接密钥(可以修改,需保密)。运行内网设备的 frpc 客户端:

代码块
JavaScript
自动换行
复制代码
./frpc -c frpc.toml
复制成功

在移动设备运行 frpc 客户端,客户端配置文件 frpc.toml 为:

代码块
JavaScript
自动换行
复制代码
serverAddr = "12.34.56.1"
serverPort = 7000

[[visitors]]
name = "p2p_server_visit"
type = "xtcp"
serverName = "p2p_server"
secretKey = "password"
bindAddr = "127.0.0.1"
bindPort = 3260
复制成功

[[visitors]] 用于设置点对点服务访问内网服务的一端的配置参数,name 为访问者名称(可以修改),type 为协议类型(不能修改),serverName 为提供内网服务的名称(需和内网设备上 frpc.toml 配置文件中的 name 一致),secretKey 为点对点服务的连接密钥(需和内网设备上 frpc.toml 配置文件中的 secretKey 一致),bindIP 为监听的点对点服务本地 IP,bindPort 为监听的点对点服务本地端口。运行移动设备的 frpc 客户端:

代码块
JavaScript
自动换行
复制代码
./frpc -c frpc.toml
复制成功

这样,在移动设备上访问本地 3260 端口时,就是在访问内网设备的 3260 端口。

根据 frp 官方文档(https://gofrp.org/zh-cn/docs/features/xtcp/),xtcp 内网穿透方式需要在所处网络中打洞才能建立点对点连接,只有打洞成功才能在内网设备和移动设备之间直接通信,不再受 frps 所在服务器的带宽限制。打洞的成功率取决于所处网络的 NAT 类型,具体不详。我家所在的网络是可以成功使用的,使用之后内网穿透带宽变为了 50Mbps,远高于阿里云服务器的 3Mbps 带宽,并且网络连接稳定,非常好用。

(完)