FRP多隧道分流访问站点后台与AI网关
如果你有一台内网服务器,既想在外网访问站点后台管理(比如宝塔面板),又想为AI网关服务提供公网入口,用FRP的单隧道映射多个端口容易出错,而配置多个隧道分流才是稳妥方案。
本文从零开始,带你在FRP服务端和客户端上配置两条隧道,分别转发站点后台和AI网关,全程命令可执行,避免常见坑。
第一次接触FRP需要准备什么
- 一台有公网IP的服务器(服务端,下文简称“公网服务器”),操作系统用CentOS 7或Ubuntu 20.04以上。
- 一台内网服务器(客户端,运行站点后台和AI网关),需要知道后台端口(例如宝塔面板默认8888)和AI网关端口(例如8000)。
- 下载对应系统架构的FRP程序(推荐使用0.52.3版本,去GitHub Releases下载)。
- 公网服务器放行FRP绑定端口(默认7000)以及隧道映射的外网端口(例如8080和8081)。
配置服务端:一个程序监听,多个隧道等着分流
登录公网服务器,先解压FRP并进入目录。
编辑 frps.toml(新版本配置格式为TOML),写入以下内容:
[common]
bind_port = 7000
vhost_http_port = 8080
# 你也可以开启Dashboard方便查看隧道状态
webServer.addr = "0.0.0.0"
webServer.port = 7500
webServer.user = "admin"
webServer.password = "your_strong_password"
注意:vhost_http_port 是用来做HTTP域名分流的,如果用TCP隧道可以不必设置;但本文用TCP隧道更通用。
启动服务端:
./frps -c frps.toml &
确保7000端口已监听(ss -tlnp | grep 7000)。
客户端配置:两条隧道分别指向不同内网服务
在客户端服务器上同样解压FRP,编辑 frpc.toml。
这里我们用两条隧道(多隧道分流)分别映射站点后台和AI网关。
[common]
server_addr = "你的公网服务器IP"
server_port = 7000
# 第一个隧道:站点后台(例如宝塔面板8888)
[bt-panel]
type = tcp
local_ip = 127.0.0.1
local_port = 8888
remote_port = 8080
# 第二个隧道:AI网关(例如运行在8000端口)
[ai-gateway]
type = tcp
local_ip = 127.0.0.1
local_port = 8000
remote_port = 8081
启动客户端:
./frpc -c frpc.toml &
看到 start proxy success 就说明隧道已建立。
验证分流效果:外网访问两个服务
- 访问站点后台:浏览器打开
http://公网服务器IP:8080,应该看到宝塔面板登录页。 - 访问AI网关:如果AI网关提供HTTP接口,用
http://公网服务器IP:8081/your-api-path测试。
如果连不上,先检查公网服务器的防火墙是否放行了8080和8081端口(阿里云/腾讯云安全组也要配)。
新手最容易踩的坑
- 端口冲突:本地端口8888如果被其他服务占用,改local_port;remote_port不能与服务端其他端口重复。
- 防火墙没放行:公网服务器执行
firewall-cmd --add-port=8080/tcp --permanent并重载(或者用iptables)。 - 客户端IP写错:如果站点后台和AI网关不在本机,
local_ip要改成实际IP。 - 使用HTTP域名分流时:隧道type改成http,需要配置
custom_domains,但TCP模式更简单,本文推荐TCP。
常见问题快速排查
- 问题:客户端提示
login error: auth怎么办?
解答:检查frps.toml与frpc.toml中的 token 是否一致,新版本默认需要token。
- 问题:外网能访问站点后台,但AI网关超时?
解答:单独测试AI网关本地是否正常(curl http://127.0.0.1:8000),再检查客户端防火墙是否放行本地端口。
- 问题:想用域名访问而不是IP+端口?
解答:隧道type改为http,配置custom_domains,并在服务端frps.toml开启 vhost_http_port,然后DNS解析域名到公网IP。
如果你按照本文完成了FRP多隧道分流,站点后台和AI网关都能在外网正常使用。
后续可以根据需要增加更多隧道,一个frpc支持任意多个隧道定义,每增加一个服务就新增一个配置段,注意 remote_port 不要重复。
遇到报错时,先回看避坑部分,基本能解决90%的问题。