diff --git a/cmd/cli/os_linux.go b/cmd/cli/os_linux.go index 1607f25..c0c8125 100644 --- a/cmd/cli/os_linux.go +++ b/cmd/cli/os_linux.go @@ -160,6 +160,7 @@ func resetDNS(iface *net.Interface) (err error) { } // TODO(cuonglm): handle DHCPv6 properly. + mainLog.Load().Debug().Msg("checking for IPv6 availability") if ctrldnet.IPv6Available(ctx) { c := client6.NewClient() conversation, err := c.Exchange(iface.Name) @@ -179,6 +180,8 @@ func resetDNS(iface *net.Interface) (err error) { } } } + } else { + mainLog.Load().Debug().Msg("IPv6 is not available") } return ignoringEINTR(func() error { diff --git a/internal/clientinfo/mdns.go b/internal/clientinfo/mdns.go index 3c8af6e..23342b3 100644 --- a/internal/clientinfo/mdns.go +++ b/internal/clientinfo/mdns.go @@ -102,11 +102,14 @@ func (m *mdns) init(quitCh chan struct{}) error { v4ConnList = append(v4ConnList, conn) go m.readLoop(conn) } + ctrld.ProxyLogger.Load().Debug().Msgf("checking for IPv6 availability in mdns init") if ctrldnet.IPv6Available(context.Background()) { if conn, err := net.ListenMulticastUDP("udp6", &iface, mdnsV6Addr); err == nil { v6ConnList = append(v6ConnList, conn) go m.readLoop(conn) } + } else { + ctrld.ProxyLogger.Load().Debug().Msgf("IPv6 is not available in mdns init") } } diff --git a/internal/net/net.go b/internal/net/net.go index 3a81849..dd1c072 100644 --- a/internal/net/net.go +++ b/internal/net/net.go @@ -49,8 +49,12 @@ func init() { } func supportIPv6(ctx context.Context) bool { - _, err := probeStackDialer.DialContext(ctx, "tcp6", net.JoinHostPort(controldIPv6Test, "443")) - return err == nil + c, err := probeStackDialer.DialContext(ctx, "tcp6", v6BootstrapDNS) + if err != nil { + return false + } + c.Close() + return true } func supportListenIPv6Local() bool { diff --git a/net.go b/net.go index 3ae3bb5..449620d 100644 --- a/net.go +++ b/net.go @@ -18,6 +18,7 @@ const ipv6ProbingInterval = 10 * time.Second func hasIPv6() bool { hasIPv6Once.Do(func() { + Log(context.Background(), ProxyLogger.Load().Debug(), "checking for IPv6 availability once") ctx, cancel := context.WithTimeout(context.Background(), 2*time.Second) defer cancel() val := ctrldnet.IPv6Available(ctx) @@ -43,6 +44,7 @@ func probingIPv6(ctx context.Context, old bool) { if ipv6Available.CompareAndSwap(old, cur) { old = cur } + Log(ctx, ProxyLogger.Load().Debug(), "IPv6 availability: %v", cur) }() } }