WIP: rebase fork onto upstream/main (v1.103.0) #15

Closed
codinget wants to merge 670 commits from webnet into save/webnet-2026-07-29
Showing only changes of commit d22bf51e57 - Show all commits
+21
View File
@@ -47,6 +47,7 @@ const (
Azure = Cloud("azure") // Microsoft Azure
GCP = Cloud("gcp") // Google Cloud
DigitalOcean = Cloud("digitalocean") // DigitalOcean
Hetzner = Cloud("hetzner") // Hetzner Cloud
)
// ResolverIP returns the cloud host's recursive DNS server or the
@@ -64,6 +65,8 @@ func (c Cloud) ResolverIP() string {
return AzureResolverIP
case DigitalOcean:
return getDigitalOceanResolver()
case Hetzner:
return getHetznerResolver()
}
return ""
}
@@ -82,6 +85,21 @@ func getDigitalOceanResolver() string {
})
}
var (
// https://docs.hetzner.com/robot/dedicated-server/general-information/recursive-name-servers/
// IPv6 resolvers also exist: 2a01:4ff:ff00::add:1, 2a01:4ff:ff00::add:2.
hetznerResolvers = []string{"185.12.64.1", "185.12.64.2"}
hetznerResolver lazy.SyncValue[string]
)
func getHetznerResolver() string {
// Randomly select one of the available resolvers so we don't overload
// one of them by sending all traffic there.
return hetznerResolver.Get(func() string {
return hetznerResolvers[rand.IntN(len(hetznerResolvers))]
})
}
// HasInternalTLD reports whether c is a cloud environment
// whose ResolverIP serves *.internal records.
func (c Cloud) HasInternalTLD() bool {
@@ -128,6 +146,9 @@ func getCloud() Cloud {
if sysVendor == "DigitalOcean" {
return DigitalOcean
}
if sysVendor == "Hetzner" {
return Hetzner
}
// TODO(andrew): "Vultr" is also valid if we need it
prod := readFileTrimmed("/sys/class/dmi/id/product_name")