diff --git a/cmd/cloudflared/tunnel/cmd.go b/cmd/cloudflared/tunnel/cmd.go index 12380cb5..e3406ffd 100644 --- a/cmd/cloudflared/tunnel/cmd.go +++ b/cmd/cloudflared/tunnel/cmd.go @@ -689,5 +689,11 @@ func tunnelFlags(shouldHide bool) []cli.Flag { EnvVars: []string{"TUNNEL_TRACE_OUTPUT"}, Hidden: shouldHide, }), + altsrc.NewBoolFlag(&cli.BoolFlag{ + Name: "use-declarative-tunnels", + Usage: "Test establishing connections with declarative tunnel methods.", + EnvVars: []string{"TUNNEL_USE_DECLARATIVE"}, + Hidden: true, + }), } } diff --git a/cmd/cloudflared/tunnel/configuration.go b/cmd/cloudflared/tunnel/configuration.go index c2ee565b..f5d164e5 100644 --- a/cmd/cloudflared/tunnel/configuration.go +++ b/cmd/cloudflared/tunnel/configuration.go @@ -243,33 +243,34 @@ func prepareTunnelConfig( } return &origin.TunnelConfig{ - EdgeAddrs: c.StringSlice("edge"), - OriginUrl: originURL, - Hostname: hostname, - OriginCert: originCert, - TlsConfig: toEdgeTLSConfig, - ClientTlsConfig: httpTransport.TLSClientConfig, - Retries: c.Uint("retries"), - HeartbeatInterval: c.Duration("heartbeat-interval"), - MaxHeartbeats: c.Uint64("heartbeat-count"), - ClientID: clientID, - BuildInfo: buildInfo, - ReportedVersion: version, - LBPool: c.String("lb-pool"), - Tags: tags, - HAConnections: c.Int("ha-connections"), - HTTPTransport: httpTransport, - Metrics: tunnelMetrics, - MetricsUpdateFreq: c.Duration("metrics-update-freq"), - TransportLogger: transportLogger, - Logger: logger, - IsAutoupdated: c.Bool("is-autoupdated"), - GracePeriod: c.Duration("grace-period"), - RunFromTerminal: isRunningFromTerminal(), - NoChunkedEncoding: c.Bool("no-chunked-encoding"), - CompressionQuality: c.Uint64("compression-quality"), - IncidentLookup: origin.NewIncidentLookup(), - IsFreeTunnel: isFreeTunnel, + BuildInfo: buildInfo, + ClientID: clientID, + ClientTlsConfig: httpTransport.TLSClientConfig, + CompressionQuality: c.Uint64("compression-quality"), + EdgeAddrs: c.StringSlice("edge"), + GracePeriod: c.Duration("grace-period"), + HAConnections: c.Int("ha-connections"), + HTTPTransport: httpTransport, + HeartbeatInterval: c.Duration("heartbeat-interval"), + Hostname: hostname, + IncidentLookup: origin.NewIncidentLookup(), + IsAutoupdated: c.Bool("is-autoupdated"), + IsFreeTunnel: isFreeTunnel, + LBPool: c.String("lb-pool"), + Logger: logger, + MaxHeartbeats: c.Uint64("heartbeat-count"), + Metrics: tunnelMetrics, + MetricsUpdateFreq: c.Duration("metrics-update-freq"), + NoChunkedEncoding: c.Bool("no-chunked-encoding"), + OriginCert: originCert, + OriginUrl: originURL, + ReportedVersion: version, + Retries: c.Uint("retries"), + RunFromTerminal: isRunningFromTerminal(), + Tags: tags, + TlsConfig: toEdgeTLSConfig, + TransportLogger: transportLogger, + UseDeclarativeTunnel: c.Bool("use-declarative-tunnels"), }, nil } diff --git a/origin/tunnel.go b/origin/tunnel.go index 2596d26c..60bf6f3e 100644 --- a/origin/tunnel.go +++ b/origin/tunnel.go @@ -37,41 +37,40 @@ const ( lbProbeUserAgentPrefix = "Mozilla/5.0 (compatible; Cloudflare-Traffic-Manager/1.0; +https://www.cloudflare.com/traffic-manager/;" TagHeaderNamePrefix = "Cf-Warp-Tag-" DuplicateConnectionError = "EDUPCONN" - isDeclarativeTunnel = false ) type TunnelConfig struct { + BuildInfo *BuildInfo + ClientID string + ClientTlsConfig *tls.Config + CloseConnOnce *sync.Once // Used to close connectedSignal no more than once + CompressionQuality uint64 + EdgeAddrs []string + GracePeriod time.Duration + HAConnections int + HTTPTransport http.RoundTripper + HeartbeatInterval time.Duration + Hostname string + IncidentLookup IncidentLookup + IsAutoupdated bool + IsFreeTunnel bool + LBPool string + Logger *log.Logger + MaxHeartbeats uint64 + Metrics *TunnelMetrics + MetricsUpdateFreq time.Duration + NoChunkedEncoding bool + OriginCert []byte + ReportedVersion string + Retries uint + RunFromTerminal bool + Tags []tunnelpogs.Tag + TlsConfig *tls.Config + TransportLogger *log.Logger + UseDeclarativeTunnel bool + WSGI bool // OriginUrl may not be used if a user specifies a unix socket. OriginUrl string - - EdgeAddrs []string - Hostname string - OriginCert []byte - TlsConfig *tls.Config - ClientTlsConfig *tls.Config - Retries uint - HeartbeatInterval time.Duration - MaxHeartbeats uint64 - ClientID string - BuildInfo *BuildInfo - ReportedVersion string - LBPool string - Tags []tunnelpogs.Tag - HAConnections int - HTTPTransport http.RoundTripper - Metrics *TunnelMetrics - MetricsUpdateFreq time.Duration - TransportLogger *log.Logger - Logger *log.Logger - IsAutoupdated bool - GracePeriod time.Duration - RunFromTerminal bool - NoChunkedEncoding bool - WSGI bool - CompressionQuality uint64 - IncidentLookup IncidentLookup - CloseConnOnce *sync.Once // Used to close connectedSignal no more than once - IsFreeTunnel bool } type dialError struct { @@ -153,7 +152,7 @@ func StartTunnelDaemon(config *TunnelConfig, shutdownC <-chan struct{}, connecte // If a user specified negative HAConnections, we will treat it as requesting 1 connection if config.HAConnections > 1 { - if isDeclarativeTunnel { + if config.UseDeclarativeTunnel { return connection.NewSupervisor(&connection.CloudflaredConfig{ ConnectionConfig: &connection.ConnectionConfig{ TLSConfig: config.TlsConfig,