使用frp实现内网穿透

2026-01-15

[!INFO]
文章最后修改时间为2026年01月15日,请注意部分内容可能已改变。如有问题可在评论区提出哦~~~

FRP是什么?

FRP是内网穿透的反向代理工具。使用了这个工具,能够将在内网下的设备映射到公网上,可以在外部直接访问到内网中的设备。

[!NOTE]
在文章开始前,需要先分清服务端和客户端
服务端:有公网IP的服务器(云服务器/VPS),接收外部请求并转发到内网
客户端:你的内网设备(电脑/NAS/树莓派),运行需要被访问的服务

FRP下载

FRP官方链接:fatedier/frp: A fast reverse proxy to help you expose a local server behind a NAT or firewall to the internet.
FRP下载链接:Releases · fatedier/frp根据系统选择下载的文件。

服务端部署

Linux服务端(Ubuntu)

使用SSH连接到服务器

在自己的电脑上打开Releases · fatedier/frp,选择自己所需要的版本

frp_version

在自己所需要的版本右键鼠标粘贴,将以下代码中wget后半部换位所复制的链接(这里选择使用v0.66.0)

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

下载完成后将压缩包解压并进入到该文件夹中

tar -zxvf frp_0.66.0_linux_amd64.tar.gz
cd frp_0.66.0_linux_amd64

编辑frps.toml(注意是frps不是frpc!!!)

vim frps.toml
bindPort = 7000 #连接的端口

auth.method = "token"
auth.token = "password" #这里的password换为自己想要的密码

[transport.tls]
force = true #开启tls加密传输

保存退出后,运行

./frps -c frps.toml

出现

2026-01-15 13:46:46.533 [I] [frps/root.go:115] frps uses config file: frps.toml
2026-01-15 13:46:47.081 [I] [server/service.go:241] frps tcp listen on 0.0.0.0:7000
2026-01-15 13:46:47.083 [I] [frps/root.go:124] frps started successfully

则说明服务端开启成功

[!TIP]
需要在防火墙放行在frps.toml文件中bindPort所对应的端口!!!

客户端使用

Windows系统

在电脑上打开Releases · fatedier/frp,选择自己所需要的版本

frp_version

下载完成之后,将压缩包解压并且进入到该文件夹下,双击frpc.toml编辑(注意是frpc.toml!!!)

serverAddr = "192.168.9.1" # 这里填写服务端公网IP
serverPort = 7000 # 这里填写上面bindPort对应的端口

[transport]
protocol = "tcp"
tcpMux = true


[auth]
method = "token"
token = "password" # 这里填写在服务端中填写的密码

[[proxies]]
name = "mc" # 这里填写名字来区分
type = "tcp"
localIP = "127.0.0.1"
localPort = 25565 # 这里填写本地电脑需要被外网访问的端口
remotePort = 25565 # 这里填写通过服务器的哪个端口能够访问到本地电脑映射出去的端口

[proxies.transport]
useEncryption = true

其中:
localPort: 本地电脑需要被访问的端口
remotePort: 通过服务器的某一个端口能够访问到内网设备的某一个端口上

[!TIP]
比如:
localPort设置为25565,remotePort设置为6789,服务器IP为192.168.9.1
那么我在外网通过访问192.168.9.1:6789即能够访问到内网设备25565端口上

Linux服务端

下载与解压过程与上面部署过程一致

解压后进入到该文件夹中,编辑frpc.toml文件(注意是frpc.toml!!!)

vim frpc.toml
serverAddr = "192.168.9.1" # 这里填写服务端公网IP
serverPort = 7000 # 这里填写上面bindPort对应的端口

[transport]
protocol = "tcp"
tcpMux = true


[auth]
method = "token"
token = "password" # 这里填写在服务端中填写的密码

[[proxies]]
name = "mc" # 这里填写名字来区分
type = "tcp"
localIP = "127.0.0.1"
localPort = 25565 # 这里填写本地电脑需要被外网访问的端口
remotePort = 25565 # 这里填写通过服务器的哪个端口能够访问到本地电脑映射出去的端口

[proxies.transport]
useEncryption = true

其中:
localPort: 本地电脑需要被访问的端口
remotePort: 通过服务器的某一个端口能够访问到内网设备的某一个端口上

[!TIP]
比如:
localPort设置为25565,remotePort设置为6789,服务器IP为192.168.9.1
那么我在外网通过访问192.168.9.1:6789即能够访问到内网设备25565端口上

这样最基本的内网穿透就搭建好啦~~~