fatedier/frp · error · ErrGroupParamsInvalid
group params invalid
Error message
group params invalid
What it means
ErrGroupParamsInvalid is returned when a proxy tries to attach to an existing group whose group name or bind address differs (tcp.go:108, http.go:101, tcpmux.go:121, https.go:94). Within one group every member must use the same group name and the same server bind address; otherwise the parameters are considered invalid and the new proxy is refused.
Source
Thrown at server/group/group.go:23
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
package group
import (
"errors"
)
var (
ErrGroupAuthFailed = errors.New("group auth failed")
ErrGroupParamsInvalid = errors.New("group params invalid")
ErrListenerClosed = errors.New("group listener closed")
ErrGroupDifferentPort = errors.New("group should have same remote port")
ErrProxyRepeated = errors.New("group proxy repeated")
errGroupStale = errors.New("stale group reference")
)
View on GitHub (pinned to 6c8a8d0a97)
Solutions
- Make group name and bind address identical on every member of the group
- If deployments are unrelated, use distinct group names per environment/team
- Re-verify each member config with frpc verify after edits
Example fix
# member A: group = "app", bindAddr = "0.0.0.0", remotePort = 9000 # member B — before: bindAddr = "127.0.0.1" -> ErrGroupParamsInvalid # after [[proxies]] name = "b" type = "tcp" group = "app" groupKey = "correct-horse" bindAddr = "0.0.0.0" remotePort = 9000
Defensive patterns
Strategy: validation
Validate before calling
// Config lint: same group implies same bindAddr and type
for _, p := range proxies {
if p.Group != "" {
ref := groupRef[p.Group]
if ref != "" && ref != p.BindAddr {
return fmt.Errorf("group %s: bindAddr %q != %q", p.Group, p.BindAddr, ref)
}
}
} Type guard
func isGroupParamsInvalid(err error) bool {
return errors.Is(err, group.ErrGroupParamsInvalid)
} Try / catch
if errors.Is(err, group.ErrGroupParamsInvalid) {
// group name or bind address differs from the established group — align member configs
} Prevention
- Namespace group names per environment (e.g. prod-app, staging-app) to avoid collisions on shared frps
- Generate group member configs from one template so address/name can never drift
When it happens
Trigger: Same group name but different bindAddr across members; mixing proxy types under one group name (e.g. one member binds 0.0.0.0, another 127.0.0.1 on frps); group name collision between unrelated deployments on the same frps.
Common situations: Copy-pasting a group config between environments and changing the address on only some members; two teams accidentally choosing the same group name on a shared frps.
Related errors
- group auth failed
- group should have same remote port
- port not allowed
- invalid max pool count %d, must be non-negative
- exec configuration is required when type is 'exec'
AI-assisted analysis of fatedier/frp@6c8a8d0a97 (2026-08-15).
Data as JSON: /api/errors/824025358e64d37c.
Report an issue: GitHub.