fatedier / frp

A fast reverse proxy to help you expose a local server behind a NAT or firewall to the internet.
Apache License 2.0
81.42k stars 12.82k forks source link

error unmarshaling JSON: while decoding JSON: json: cannot unmarshal string into Go value of type v1.ServerConfig #3657

Closed alsingh1 closed 4 months ago

alsingh1 commented 8 months ago

Bug Description

Getting JSON unmarshaling error with default toml config file

frpc Version

0.52.0

frps Version

0.52.0

System Architecture

linux/amd64

Configurations

# A literal address or host name for IPv6 must be enclosed
# in square brackets, as in "[::1]:80", "[ipv6-host]:http" or "[ipv6-host%zone]:80"
# For single "bind_addr" field, no need square brackets, like "bind_addr = ::".
bindAddr = "0.0.0.0"
bindPort = 7000

# udp port used for kcp protocol, it can be same with 'bind_port'.
# if not set, kcp is disabled in frps.
kcpBindPort = 7000

# udp port used for quic protocol.
# if not set, quic is disabled in frps.
# quicBindPort = 7002

# Specify which address proxy will listen for, default value is same with bind_addr
# proxy_bind_addr = "127.0.0.1"

# quic protocol options
# transport.quic.keepalivePeriod = 10
# transport.quic.maxIdleTimeout = 30
# transport.quic.maxIncomingStreams = 100000

# Heartbeat configure, it's not recommended to modify the default value
# The default value of heartbeat_timeout is 90. Set negative value to disable it.
# transport.heartbeatTimeout = 90

# Pool count in each proxy will keep no more than maxPoolCount.
transport.maxPoolCount = 5

# If tcp stream multiplexing is used, default is true
# transport.tcpMux = true

# Specify keep alive interval for tcp mux.
# only valid if tcpMux is true.
# transport.tcpMuxKeepaliveInterval = 60

# tcpKeepalive specifies the interval between keep-alive probes for an active network connection between frpc and frps.
# If negative, keep-alive probes are disabled.
# transport.tcpKeepalive = 7200

# transport.tls.force specifies whether to only accept TLS-encrypted connections. By default, the value is false.
tls.force = false

# transport.tls.certFile = "server.crt"
# transport.tls.keyFile = "server.key"
# transport.tls.trustedCaFile = "ca.crt"

# If you want to support virtual host, you must set the http port for listening (optional)
# Note: http port and https port can be same with bind_port
vhostHTTPPort = 80
vhostHTTPSPort = 443

# Response header timeout(seconds) for vhost http server, default is 60s
# vhostHTTPTimeout = 60

# tcpmuxHTTPConnectPort specifies the port that the server listens for TCP
# HTTP CONNECT requests. If the value is 0, the server will not multiplex TCP
# requests on one single port. If it's not - it will listen on this value for
# HTTP CONNECT requests. By default, this value is 0.
# tcpmuxHTTPConnectPort = 1337

# If tcpmux_passthrough is true, frps won't do any update on traffic.
# tcpmuxPassthrough = false

# Configure the web server to enable the dashboard for frps.
# dashboard is available only if webServer.port is set.
webServer.addr = "127.0.0.1"
webServer.port = 7500
webServer.user = "admin"
webServer.password = "admin"
# webServer.tls.certFile = "server.crt"
# webServer.tls.keyFile = "server.key"
# dashboard assets directory(only for debug mode)
# webServer.assetsDir = "./static"

# Enable golang pprof handlers in dashboard listener.
# Dashboard port must be set first
webServer.pprofEnable = false

# enablePrometheus will export prometheus metrics on webServer in /metrics api.
enablePrometheus = true

# console or real logFile path like ./frps.log
log.to = "./frps.log"
# trace, debug, info, warn, error
log.level = info
log.maxDays = 3
# disable log colors when log.to is console, default is false
log.disablePrintColor = false

# DetailedErrorsToClient defines whether to send the specific error (with debug info) to frpc. By default, this value is true.
detailedErrorsToClient = true

# auth.method specifies what authentication method to use authenticate frpc with frps.
# If "token" is specified - token will be read into login message.
# If "oidc" is specified - OIDC (Open ID Connect) token will be issued using OIDC settings. By default, this value is "token".
auth.method = "token"

# auth.additionalScopes specifies additional scopes to include authentication information.
# Optional values are HeartBeats, NewWorkConns.
# auth.additionalScopes = ["HeartBeats", "NewWorkConns"]

# auth token
auth.token = "12345678"

# oidc issuer specifies the issuer to verify OIDC tokens with.
auth.oidc.issuer = ""
# oidc audience specifies the audience OIDC tokens should contain when validated.
auth.oidc.audience = ""
# oidc skipExpiryCheck specifies whether to skip checking if the OIDC token is expired.
auth.oidc.skipExpiryCheck = false
# oidc skipIssuerCheck specifies whether to skip checking if the OIDC token's issuer claim matches the issuer specified in OidcIssuer.
auth.oidc.skipIssuerCheck = false

# userConnTimeout specifies the maximum time to wait for a work connection.
# userConnTimeout = 10

# Only allow frpc to bind ports you list. By default, there won't be any limit.
allowPorts = [
  { start = 2000, end = 3000 },
  { single = 3001 },
  { single = 3003 },
  { start = 4000, end = 50000 }
]

# Max ports can be used for each client, default value is 0 means no limit
maxPortsPerClient = 0

# If subDomainHost is not empty, you can set subdomain when type is http or https in frpc's configure file
# When subdomain is est, the host used by routing is test.frps.com
subDomainHost = "frps.com"

# custom 404 page for HTTP requests
# custom404Page = "/path/to/404.html"

# specify udp packet size, unit is byte. If not set, the default value is 1500.
# This parameter should be same between client and server.
# It affects the udp and sudp proxy.
udpPacketSize = 1500

# Retention time for NAT hole punching strategy data.
natholeAnalysisDataReserveHours = 168

[[httpPlugins]]
name = "user-manager"
addr = "127.0.0.1:9000"
path = "/handler"
ops = ["Login"]

[[httpPlugins]]
name = "port-manager"
addr = "127.0.0.1:9001"
path = "/handler"
ops = ["NewProxy"]

Logs

No response

Steps to reproduce

  1. Download package from - https://github.com/fatedier/frp/releases/download/v0.52.0/frp_0.52.0_linux_amd64.tar.gz
  2. run ./frps -c frps.toml error unmarshaling JSON: while decoding JSON: json: cannot unmarshal string into Go value of type v1.ServerConfig

...

Affected area

WhiteRoseinShangHai commented 8 months ago

same error, version: 0.52.0

ShiinaRinne commented 8 months ago

https://github.com/fatedier/frp/commit/307d1bfa3f2aff6d6ee1e43b0e0caeee115da443

It has been fixed but has not been updated to the release yet. Currently, you can modify the config file in frps.toml like this commit

0x1af2aec8f957 commented 8 months ago

这个问题仍然存在

plmcoder commented 7 months ago

same error on version 0.52.3

env win10

ShiinaRinne commented 7 months ago

image The latest version should be fine, even the default configuration has been almost completely removed in this commit https://github.com/fatedier/frp/commit/a6478aeac819e9bac5bf719f0c5259a5b6262c3e and moved to another full_example.toml If there are still issues, please send the configuration file @plmcoder @0x1af2aec8f957

plmcoder commented 7 months ago

my config as follows and still not work, may be we should add an option --config-format to specify config file format, and then tell us the detail error for the config file while verify like this: frps.exe verify -c frps.toml --config-format toml

bindPort = 8888
auth.method = "token"
auth.token = "................xxx"

log.to = "D:/apps/frps/logs/frps.log"
log.level = "info"
log.maxDays = 30

custom404Page = "D:/apps/nginx/html/40x.html"

image The latest version should be fine, even the default configuration has been almost completely removed in this commit a6478ae and moved to another full_example.toml If there are still issues, please send the configuration file @plmcoder @0x1af2aec8f957

ShiinaRinne commented 7 months ago
bindPort = 8888
auth.method = "token"
auth.token = "................xxx"

log.to = "D:/apps/frps/logs/frps.log"
log.level = "info"
log.maxDays = 30

custom404Page = "D:/apps/nginx/html/40x.html"

Your configuration has been tested and is also working correctly, can you take a screenshot? Or remove any sensitive information, and send the entire FRP folder directly

image image

0x1af2aec8f957 commented 7 months ago

@ShiinaRinne My local configuration does not have this issue on version 0.52.3.

jy02326387 commented 7 months ago

同样出现问题,windows 2018 v0.52.3

lekai63 commented 7 months ago

toml不行,手动转换为json后。 用 frpc.exe -c frpc.json 可行

GiserLGQ commented 7 months ago

一样,版本0.52.3,win10

xwzbupt commented 7 months ago

same error. My env is docker, the version is 0.52.0, and then I upgrated it to 0.52.3. Both of them didn't work. I wonder how to handle it.

RyougiShiki-214 commented 7 months ago

同样错误。环境是Ubuntu22.04LTS,只能手动改成json使用

winfordguo commented 7 months ago

value的值如果是字符串用""包起来试试看。 比如:

错误的

bindAddr = 0.0.0.0
bindPort = 7000
auth.method = token
auth.token = xxx

正确的

bindAddr = "0.0.0.0"
bindPort = 7000
auth.method = "token"
auth.token = "xxx"
RyougiShiki-214 commented 7 months ago

value的值如果是字符串用""包起来试试看。 比如:

错误的

bindAddr = 0.0.0.0
bindPort = 7000
auth.method = token
auth.token = xxx

正确的

bindAddr = "0.0.0.0"
bindPort = 7000
auth.method = "token"
auth.token = "xxx"

果然是这个问题,非常感谢!

HivenZhu commented 6 months ago

Met the same error. Solved it with check the configuration file step by stop and correct the wrong item, then it worked.

aklivecai commented 5 months ago

Toml在线编辑(校验)器, 字段重复也会报错,可以在线校验以下

xuanyuan100 commented 5 months ago

原因应该在于字符串需要加上双引号

github-actions[bot] commented 4 months ago

Issues go stale after 21d of inactivity. Stale issues rot after an additional 7d of inactivity and eventually close.

alsingh1 commented 4 months ago

Issue resolved as per suggestion

Estwind07 commented 4 months ago

value的值如果是字符串用""包起来试试看。 比如:

错误的

bindAddr = 0.0.0.0
bindPort = 7000
auth.method = token
auth.token = xxx

正确的

bindAddr = "0.0.0.0"
bindPort = 7000
auth.method = "token"
auth.token = "xxx"

非常感谢