frp 如何配置 allowPorts 限制 frps 允许的 remotePort 范围

发布时间:2026/9/9 22:34:54
frp 如何配置 allowPorts 限制 frps 允许的 remotePort 范围 frp 如何配置 allowPorts 限制 frps 允许的 remotePort 范围【免费下载链接】frpA fast reverse proxy to help you expose a local server behind a NAT or firewall to the internet.项目地址: https://gitcode.com/GitHub_Trending/fr/frp在公网服务器上运行frps并服务多个frpc客户端时你通常不希望任意客户端都能把内网服务映射到服务器上的任意端口。frp 的frps.toml提供allowPorts配置项来实现这个限制README 中给出的定位是used to avoid abuse of ports防止端口被滥用。本文基于仓库文档与源码给出配置allowPorts、设置frpc的remotePort、并验证限制生效的完整操作路径。先了解默认行为不配置时没有任何端口限制conf/frps_full_example.toml 中对allowPorts的注释写得很明确# Only allow frpc to bind ports you list. By default, there wont be any limit.源码 server/ports/ports.go 与之一致当allowPorts为空时可用端口池是MinPort1到MaxPort65535的全部端口只有配置了allowPorts之后端口池才会收缩为你列出的范围。也就是说这是默认全放开、显式配置后才收紧的行为。在 frps.toml 中配置 allowPortsallowPorts是一个列表每一项可以是一个连续范围start/end也可以是单个端口single。README Only allowing certain ports on the server 一节给出的官方示例# frps.toml allowPorts [ { start 2000, end 3000 }, { single 3001 }, { single 3003 }, { start 4000, end 50000 } ]参数结构定义在 pkg/config/types/types.go 的PortsRange字段为start、end、single由 pkg/config/v1/server.go 中的AllowPorts字段解析。实际使用时把示例替换成你真正要开放的端口段即可注意 conf/frps_full_example.toml 首行说明该文件仅供参考不要直接拿来运行。在 frpc 中把 remotePort 设置到允许范围内frpc侧不需要感知allowPorts只需保证每个 proxy 的remotePort落在允许列表内。以 README 的 SSH 示例为骨架remotePort取上文允许列表中的 2000# frpc.toml serverAddr x.x.x.x # 替换为 frps 所在服务器的公网 IP serverPort 7000 [[proxies]] name ssh type tcp localIP 127.0.0.1 localPort 22 remotePort 2000README 对端口的分工说明localPort客户端侧监听和remotePort服务器侧暴露承载业务流量serverPort用于 frps 与 frpc 之间的通信allowPorts约束的正是remotePort所在的服务器侧端口。还有一个源码层面的行为值得知道proxy 不设置remotePort由 frps 随机分配端口时随机分配同样只在允许池中选择——见 server/ports/ports.go 中Acquire对port 0的分支它只遍历freePorts即allowPorts允许的端口池。因此即使不指定remotePort分配出来的端口也不会超出你配置的范围。启动与验证在 Server A公网服务器上启动 frps./frps -c ./frps.toml在 Server B内网机器上启动 frpc./frpc -c ./frpc.toml连接前检查frpc配置文件自身的语法错误可以运行frpc verify -c ./frpc.toml见 README Hot-Reloading frpc configuration 一节。端口是否被允许是 frps 在运行时判定的frpc verify不承担这项检查。允许范围内的代理应正常工作上面配置中remotePort 2000位于{ start 2000, end 3000 }范围内代理应当成功建立。以 SSH 为例从第三台机器访问ssh -oPort2000 testx.x.x.x能正常登入即说明允许端口上的转发链路是通的。范围外的代理应被拒绝再在frpc.toml中临时加一个remotePort不在任何允许段内的代理例如remotePort 1500启动后该代理建立会失败。frps 侧的判定逻辑在 server/ports/ports.go 的Acquire中指定端口不在freePorts允许池内时返回ErrPortNotAllowed错误消息为port not allowed。frps.toml中detailedErrorsToClient默认为true见 conf/frps_full_example.toml 注释具体错误会发送到 frpc 端你可以在 frpc 的输出/日志中确认拒绝原因。仓库 e2e 测试 test/e2e/v1/basic/server.go 中的 Ports Whitelist 用例覆盖了这三种情况可作为核对行为的标准remotePort在允许范围内TCP 与 UDP 均有验证连接请求成功remotePort不在任何允许段内请求失败对应port not allowedremotePort在允许范围内、但已被 frps 自身或其他代理占用同样失败。源码中对应的另外两个错误值得区分端口已被占用返回ErrPortAlreadyUsedport already used端口在允许列表但本机无法监听返回ErrPortUnAvailableport unavailable。三者现象不同排查时不要混为一谈。行为边界allowPorts为空表示不限制1–65535 全部可用不存在部分限制的中间状态范围是闭区间{ start 2000, end 3000 }包含 2000 与 3000 两个端点源码按for i : pair.Start; i pair.End展开该限制只作用于 proxy 的remotePort含随机分配端口不影响 frps 自身的bindPort、webServer.port等服务器端口收紧范围后存量frpc.toml中落在范围外的remotePort会全部失效修改前需要先核对各客户端的代理配置。【免费下载链接】frpA fast reverse proxy to help you expose a local server behind a NAT or firewall to the internet.项目地址: https://gitcode.com/GitHub_Trending/fr/frp创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

关于本文作者

来自尧图内容编辑团队

尧图内容编辑团队 内容团队

尧图内容编辑团队

本文由尧图网络内容编辑团队执笔。团队由资深项目经理、前端工程师与设计师组成,所有内容均来自亲手交付的真实项目,先讲清问题、再给出可落地的解法。尧图深耕北京网站建设十年,服务过京华建材集团、智造科技等各行业客户,把一线经验沉淀为可复用的行业观察。

  • 十年建站经验,覆盖建材、制造、服务、文创等
  • 项目经理把关选题与事实准确性
  • 工程师与设计师联合撰写专业细节
  • 统一编辑规范,保证文风与排版一致
  • 每月复盘转化数据,迭代选题方向

延伸阅读

相关资讯与近期热门内容

深度阅读推荐

建站决策前值得细读的三篇

网站改版的5个关键决策
2024-08-12

网站改版的5个关键决策

什么时候该改版、改到什么程度、如何避免流量掉光,京华建材集团改版复盘给出答案。

获取专属建站方案

看完文章,把您的行业与预算告诉我们,免费获取一份量身定制的官网建设方案与报价。

立即免费咨询