使用 FRP 搭配云服务器实现内网穿透访问内网设备
1. FRP 介绍
FRP(Fast Reverse Proxy)是一款开源的、高性能的反向代理工具,主要用于内网穿透场景。通过 FRP,你可以将内网的服务(如 NAS、路由器、Web 服务器等)暴露到外网。更多内容参考:FRP 官方文档。
2. FRP 工作原理
FRP 分为服务端(frps
)和客户端(frpc
),以下是详细介绍:
FRP 服务端(frps)
- 部署在拥有公网 IP 的云服务器上
- 负责处理外网请求
FRP 客户端(frpc)
- 部署在需要穿透的内网设备上
- 与服务端保持长连接,将本地服务暴露到外网
3. 在云服务器上部署 FRP 服务端(frps)
以下是一个完整的教程,适合国内用户在云服务器(如腾讯云或阿里云)上部署 FRP 服务端(frps
),并解决云服务器访问 GitHub 下载困难的问题。以安装了 Ubuntu 的云服务器为例。
3.1 下载 FRP 到本地电脑
- 前往 FRP GitHub 仓库。在你的本地电脑上你可以采取多种方法来快速访问Github,例如通过代理、Watt Toolkit、国内镜像网站等等。
- 根据云服务器的操作系统架构(一般是 Linux amd64),选择对应版本的压缩包(如
frp_0.61.1_linux_amd64.tar.gz
),并下载到本地电脑。 - 通过解压工具(如 Bandizip)将压缩包解压。
解压完成后你会得到以下文件:
frpc
frpc.toml
frps
frps.toml
LICENSE
其中,frpc
和 frps
是 FRP 的核心可执行文件,分别用于客户端和服务端;frpc.toml
和 frps.toml
是对应的配置文件;LICENSE
是 FRP 的开源协议说明文件。
注意:需要将 frps
和 frps.toml
上传到云服务器中。
3.2 上传文件到云服务器
-
使用 MobaXterm 连接云服务器
- 下载并安装 MobaXterm。
- 使用服务器的 IP、用户名(
root
)、密码登录云服务器。
-
上传文件
- 在 MobaXterm 的左侧资源管理器中,将解压后的
frps
和frps.toml
文件拖拽上传到云服务器的/root/frp
(新建文件夹)或其他自定义目录。
- 在 MobaXterm 的左侧资源管理器中,将解压后的
3.3 配置 FRP 服务端
-
进入上传的文件夹
cd /root/frp
-
编辑配置文件
nano frps.toml
基础配置内容如下:
[common] bind_port = 7000 token = abcd123412341234abcd
配置说明:
bind_port
:服务端监听的端口,用于客户端连接。需要在防火墙中开启允许访问。token
:用于客户端认证,保证连接安全。建议使用密码生成器生成复杂长密码。
更多详细配置可以参考:frps_full_example.toml
3.4 配置服务端为系统服务
为了方便管理,将 FRP 配置为系统服务:
-
创建服务文件
nano /etc/systemd/system/frps.service
-
添加以下内容
[Unit] Description=FRP Server After=network.target [Service] Type=simple User=root ExecStart=/path/to/frps -c /path/to/frps.toml Restart=on-failure [Install] WantedBy=multi-user.target
注意:
- 将
/path/to/frps
替换为实际的frps
文件路径。 - 将
/path/to/frps.toml
替换为实际的配置文件路径。
- 将
-
启动并设置开机自启
systemctl daemon-reload systemctl start frps systemctl enable frps
3.5 开启云服务器防火墙端口
确保服务器防火墙允许 FRP 服务使用的端口(如 7000),详细步骤请参考:
4. 部署 FRP 客户端(frpc)
原则上 FRP 客户端(frpc
)可以部署在任何设备上,考虑到需要长期运行以及功耗等问题,推荐将 frpc
部署到如路由器(OpenWrt)、NAS、开发板等设备。
以安装了 fnOS 飞牛系统的 NAS 为例,fnOS 是基于 Debian 的 NAS 系统,支持通过终端(SSH)访问,便于直接部署和运行 frpc
。
4.1 上传文件到 fnOS
与在云服务器上部署 FRP 服务端完全相同,使用 MobaXterm 连接 fnOS。详细参考 3.2 上传文件到云服务器。
注意:由于是部署客户端(frpc
),需要上传 frpc
和 frpc.toml
文件到 fnOS 中。
4.2 配置 FRP 客户端
-
编辑配置文件
nano frpc.toml
基础配置内容如下:
[common] server_addr = "x.x.x.x" server_port = 7000 token = abcd123412341234abcd [NAS] type = "tcp" local_ip = "192.168.1.55" local_port = 5666 remote_port = 1234 use_compression = true use_encryption = true
配置说明:
-
通用部分配置
[common]
:server_addr
:FRP 服务端的 IP 地址(即云服务器 IP 地址)或域名,frpc
通过此地址连接服务端。server_port
:FRP 服务端监听的端口(与服务端bind_port
对应)。token
:认证密钥,用来校验客户端与服务端的连接请求是否匹配,需与服务端配置一致。
-
隧道配置部分
[NAS]
:type
:隧道类型,定义要穿透的服务类型,如tcp
,普通 TCP 服务。local_ip
:内网设备 IP 地址,指定需要穿透的本地服务所在设备的地址。local_port
:内网服务端口,指定本地设备上运行的服务端口。remote_port
:外网端口,指定在服务端暴露的端口,通过该端口访问内网服务。需要在防火墙中开启允许访问。use_compression
:是否启用流量压缩,可以减少传输的数据量(适合带宽有限的场景)。use_encryption
:是否启用流量加密,增强安全性,防止流量被中间人截获。
更多详细配置可以参考:frpc_full_example.toml
-
4.3 配置客户端为系统服务
为了方便管理,将 FRP 配置为系统服务:
-
创建服务文件
nano /etc/systemd/system/frpc.service
-
添加以下内容
[Unit] Description=FRP Client After=network.target [Service] Type=simple User=root ExecStart=/path/to/frpc -c /path/to/frpc.toml Restart=on-failure [Install] WantedBy=multi-user.target
注意:
- 将
/path/to/frpc
替换为实际的frpc
文件路径。 - 将
/path/to/frpc.toml
替换为实际的配置文件路径。
- 将
-
启动并设置开机自启
systemctl daemon-reload systemctl start frpc systemctl enable frpc
4.4 开启客户端防火墙端口
确保客户端设备的防火墙允许 FRP 服务使用的端口(如 1234),详细步骤请参考:
5. 验证穿透效果
在浏览器地址栏输入 x.x.x.x:1234
,即可正常访问内网 192.168.1.55:5666
的页面。
结束
通过以上步骤,你已经成功配置并部署了 FRP 服务端和客户端,实现了内网服务的外网访问。确保定期更新 FRP 以获得最新的功能和安全性提升。