|
|
@ -26,7 +26,7 @@ var LoginEndpointForProxyDetermination = "https://login.tailscale.com/"
|
|
|
|
// Tailscale returns the current machine's Tailscale interface, if any.
|
|
|
|
// Tailscale returns the current machine's Tailscale interface, if any.
|
|
|
|
// If none is found, all zero values are returned.
|
|
|
|
// If none is found, all zero values are returned.
|
|
|
|
// A non-nil error is only returned on a problem listing the system interfaces.
|
|
|
|
// A non-nil error is only returned on a problem listing the system interfaces.
|
|
|
|
func Tailscale() (net.IP, *net.Interface, error) {
|
|
|
|
func Tailscale() ([]netaddr.IP, *net.Interface, error) {
|
|
|
|
ifs, err := net.Interfaces()
|
|
|
|
ifs, err := net.Interfaces()
|
|
|
|
if err != nil {
|
|
|
|
if err != nil {
|
|
|
|
return nil, nil, err
|
|
|
|
return nil, nil, err
|
|
|
@ -39,14 +39,18 @@ func Tailscale() (net.IP, *net.Interface, error) {
|
|
|
|
if err != nil {
|
|
|
|
if err != nil {
|
|
|
|
continue
|
|
|
|
continue
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
var tsIPs []netaddr.IP
|
|
|
|
for _, a := range addrs {
|
|
|
|
for _, a := range addrs {
|
|
|
|
if ipnet, ok := a.(*net.IPNet); ok {
|
|
|
|
if ipnet, ok := a.(*net.IPNet); ok {
|
|
|
|
nip, ok := netaddr.FromStdIP(ipnet.IP)
|
|
|
|
nip, ok := netaddr.FromStdIP(ipnet.IP)
|
|
|
|
if ok && tsaddr.IsTailscaleIP(nip) {
|
|
|
|
if ok && tsaddr.IsTailscaleIP(nip) {
|
|
|
|
return ipnet.IP, &iface, nil
|
|
|
|
tsIPs = append(tsIPs, nip)
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
if len(tsIPs) > 0 {
|
|
|
|
|
|
|
|
return tsIPs, &iface, nil
|
|
|
|
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
return nil, nil, nil
|
|
|
|
return nil, nil, nil
|
|
|
|
}
|
|
|
|
}
|
|
|
|