ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

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

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),仅供参考
返回列表