mirror of
https://github.com/cloudflare/cloudflared.git
synced 2026-05-14 19:40:41 +00:00
TUN-10525: Add prechecks kill switch
Instead of having the --precheck flag in cloudflared, we allow controlling prechecks via a DNS flag, so we can short-circuit this behavior in case anything goes wrong. Although we don't expect pre-checks to add that much traffic, we should still guarantee that we can stop pre-checks in case something goes wrong.
This commit is contained in:
@@ -42,6 +42,10 @@ type FeatureSnapshot struct {
|
||||
// We provide the list of features since we need it to send in the ConnectionOptions during connection
|
||||
// registrations.
|
||||
FeaturesList []string
|
||||
|
||||
// SkipPrechecks indicates when to skip connectivity pre-checks at startup.
|
||||
// Controlled via DNS TXT record to allow remote kill-switch in case of issues.
|
||||
SkipPrechecks bool
|
||||
}
|
||||
|
||||
type PostQuantumMode uint8
|
||||
|
||||
@@ -24,6 +24,7 @@ const (
|
||||
|
||||
type featuresRecord struct {
|
||||
DatagramV3Percentage uint32 `json:"dv3_2"`
|
||||
SkipPrechecks bool `json:"skip_prechecks"`
|
||||
|
||||
// DatagramV3Percentage int32 `json:"dv3"` // Removed in TUN-9291
|
||||
// DatagramV3Percentage uint32 `json:"dv3_1"` // Removed in TUN-9883
|
||||
@@ -89,6 +90,7 @@ func (fs *featureSelector) Snapshot() FeatureSnapshot {
|
||||
PostQuantum: fs.postQuantumMode(),
|
||||
DatagramVersion: fs.datagramVersion(),
|
||||
FeaturesList: fs.clientFeatures(),
|
||||
SkipPrechecks: fs.prechecksSkip(),
|
||||
}
|
||||
}
|
||||
|
||||
@@ -121,6 +123,12 @@ func (fs *featureSelector) datagramVersion() DatagramVersion {
|
||||
return DatagramV2
|
||||
}
|
||||
|
||||
// prechecksSkip returns whether prechecks are enabled via DNS flag.
|
||||
// Defaults to false if not set in the DNS TXT record.
|
||||
func (fs *featureSelector) prechecksSkip() bool {
|
||||
return fs.remoteFeatures.SkipPrechecks
|
||||
}
|
||||
|
||||
// clientFeatures will return the list of currently available features that cloudflared should provide to the edge.
|
||||
func (fs *featureSelector) clientFeatures() []string {
|
||||
// Evaluate any remote features along with static feature list to construct the list of features
|
||||
@@ -186,7 +194,7 @@ func (dr *dnsResolver) lookupRecord(ctx context.Context) ([]byte, error) {
|
||||
}
|
||||
|
||||
if len(records) == 0 {
|
||||
return nil, fmt.Errorf("No TXT record found for %s to determine which features to opt-in", featureSelectorHostname)
|
||||
return nil, fmt.Errorf("no TXT record found for %s to determine which features to opt-in", featureSelectorHostname)
|
||||
}
|
||||
|
||||
return []byte(records[0]), nil
|
||||
|
||||
Reference in New Issue
Block a user