mirror of
https://github.com/juanfont/headscale.git
synced 2025-08-14 13:51:01 +02:00
derp: allow override to ip for debug
Signed-off-by: Kristoffer Dalby <kristoffer@tailscale.com>
This commit is contained in:
parent
b3704da311
commit
075547f19d
@ -20,6 +20,7 @@ import (
|
|||||||
"github.com/juanfont/headscale/hscontrol/util"
|
"github.com/juanfont/headscale/hscontrol/util"
|
||||||
"github.com/rs/zerolog/log"
|
"github.com/rs/zerolog/log"
|
||||||
"tailscale.com/derp"
|
"tailscale.com/derp"
|
||||||
|
"tailscale.com/envknob"
|
||||||
"tailscale.com/net/stun"
|
"tailscale.com/net/stun"
|
||||||
"tailscale.com/net/wsconn"
|
"tailscale.com/net/wsconn"
|
||||||
"tailscale.com/tailcfg"
|
"tailscale.com/tailcfg"
|
||||||
@ -35,6 +36,11 @@ const (
|
|||||||
DerpVerifyScheme = "headscale-derp-verify"
|
DerpVerifyScheme = "headscale-derp-verify"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
// debugUseDERPIP is a debug-only flag that causes the DERP server to resolve
|
||||||
|
// hostnames to IP addresses when generating the DERP region configuration.
|
||||||
|
// This is useful for integration testing where DNS resolution may be unreliable.
|
||||||
|
var debugUseDERPIP = envknob.Bool("HEADSCALE_DEBUG_DERP_USE_IP")
|
||||||
|
|
||||||
type DERPServer struct {
|
type DERPServer struct {
|
||||||
serverURL string
|
serverURL string
|
||||||
key key.NodePrivate
|
key key.NodePrivate
|
||||||
@ -70,7 +76,10 @@ func (d *DERPServer) GenerateRegion() (tailcfg.DERPRegion, error) {
|
|||||||
}
|
}
|
||||||
var host string
|
var host string
|
||||||
var port int
|
var port int
|
||||||
host, portStr, err := net.SplitHostPort(serverURL.Host)
|
var portStr string
|
||||||
|
|
||||||
|
// Extract hostname and port from URL
|
||||||
|
host, portStr, err = net.SplitHostPort(serverURL.Host)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
if serverURL.Scheme == "https" {
|
if serverURL.Scheme == "https" {
|
||||||
host = serverURL.Host
|
host = serverURL.Host
|
||||||
@ -85,6 +94,19 @@ func (d *DERPServer) GenerateRegion() (tailcfg.DERPRegion, error) {
|
|||||||
return tailcfg.DERPRegion{}, err
|
return tailcfg.DERPRegion{}, err
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// If debug flag is set, resolve hostname to IP address
|
||||||
|
if debugUseDERPIP {
|
||||||
|
ips, err := net.LookupIP(host)
|
||||||
|
if err != nil {
|
||||||
|
log.Error().Caller().Err(err).Msgf("Failed to resolve DERP hostname %s to IP, using hostname", host)
|
||||||
|
} else if len(ips) > 0 {
|
||||||
|
// Use the first IP address
|
||||||
|
ipStr := ips[0].String()
|
||||||
|
log.Info().Caller().Msgf("HEADSCALE_DEBUG_DERP_USE_IP: Resolved %s to %s", host, ipStr)
|
||||||
|
host = ipStr
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
localDERPregion := tailcfg.DERPRegion{
|
localDERPregion := tailcfg.DERPRegion{
|
||||||
RegionID: d.cfg.ServerRegionID,
|
RegionID: d.cfg.ServerRegionID,
|
||||||
|
Loading…
Reference in New Issue
Block a user