diff --git a/server/internal/config/config.go b/server/internal/config/config.go index 86ecd18d..84e9f1d4 100644 --- a/server/internal/config/config.go +++ b/server/internal/config/config.go @@ -433,12 +433,13 @@ func defaultAddresses() ([]string, error) { return []string{ip.String()}, nil } -// getFirstIP gets the first non-loopback IPv4 address +// getFirstIP gets the first non-loopback IP address, preferring IPv4. func getFirstIP() (net.IP, error) { interfaces, err := net.Interfaces() if err != nil { return net.IPv4zero, fmt.Errorf("failed to list interfaces: %w", err) } + var ipv6 net.IP for _, iface := range interfaces { // Skip loopback and down interfaces if iface.Flags&net.FlagLoopback != 0 || iface.Flags&net.FlagUp == 0 { @@ -448,7 +449,6 @@ func getFirstIP() (net.IP, error) { if err != nil { continue } - for _, addr := range addrs { var ip net.IP switch v := addr.(type) { @@ -458,21 +458,24 @@ func getFirstIP() (net.IP, error) { ip = v.IP } - // Check if it is a valid IPv4 address and not a loopback address + // Check if it is a valid address and not a loopback address if ip == nil || ip.IsLoopback() { continue } // To4() returns nil if the IP is not an IPv4 address - ip = ip.To4() - if ip == nil { - continue + if v4 := ip.To4(); v4 != nil { + return v4, nil + } + // Store first IPv6 address found, keep searching for IPv4 + if ipv6 == nil { + ipv6 = ip.To16() } - - // Return the first valid IPv4 address found - return ip, nil } } + if ipv6 != nil { + return ipv6, nil + } return net.IPv4zero, fmt.Errorf("could not find a valid network interface") }