mirror of
				https://github.com/juanfont/headscale.git
				synced 2025-10-28 10:51:44 +01:00 
			
		
		
		
	
		
			
				
	
	
		
			64 lines
		
	
	
		
			1.7 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
			
		
		
	
	
			64 lines
		
	
	
		
			1.7 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
package util
 | 
						|
 | 
						|
import (
 | 
						|
	"context"
 | 
						|
	"net"
 | 
						|
	"net/netip"
 | 
						|
	"sync"
 | 
						|
 | 
						|
	"go4.org/netipx"
 | 
						|
	"tailscale.com/net/tsaddr"
 | 
						|
)
 | 
						|
 | 
						|
func GrpcSocketDialer(ctx context.Context, addr string) (net.Conn, error) {
 | 
						|
	var d net.Dialer
 | 
						|
 | 
						|
	return d.DialContext(ctx, "unix", addr)
 | 
						|
}
 | 
						|
 | 
						|
func PrefixesToString(prefixes []netip.Prefix) []string {
 | 
						|
	ret := make([]string, 0, len(prefixes))
 | 
						|
	for _, prefix := range prefixes {
 | 
						|
		ret = append(ret, prefix.String())
 | 
						|
	}
 | 
						|
 | 
						|
	return ret
 | 
						|
}
 | 
						|
 | 
						|
func MustStringsToPrefixes(strings []string) []netip.Prefix {
 | 
						|
	ret := make([]netip.Prefix, 0, len(strings))
 | 
						|
	for _, str := range strings {
 | 
						|
		prefix := netip.MustParsePrefix(str)
 | 
						|
		ret = append(ret, prefix)
 | 
						|
	}
 | 
						|
 | 
						|
	return ret
 | 
						|
}
 | 
						|
 | 
						|
// TheInternet returns the IPSet for the Internet.
 | 
						|
// https://www.youtube.com/watch?v=iDbyYGrswtg
 | 
						|
var TheInternet = sync.OnceValue(func() *netipx.IPSet {
 | 
						|
	var internetBuilder netipx.IPSetBuilder
 | 
						|
	internetBuilder.AddPrefix(netip.MustParsePrefix("2000::/3"))
 | 
						|
	internetBuilder.AddPrefix(tsaddr.AllIPv4())
 | 
						|
 | 
						|
	// Delete Private network addresses
 | 
						|
	// https://datatracker.ietf.org/doc/html/rfc1918
 | 
						|
	internetBuilder.RemovePrefix(netip.MustParsePrefix("fc00::/7"))
 | 
						|
	internetBuilder.RemovePrefix(netip.MustParsePrefix("10.0.0.0/8"))
 | 
						|
	internetBuilder.RemovePrefix(netip.MustParsePrefix("172.16.0.0/12"))
 | 
						|
	internetBuilder.RemovePrefix(netip.MustParsePrefix("192.168.0.0/16"))
 | 
						|
 | 
						|
	// Delete Tailscale networks
 | 
						|
	internetBuilder.RemovePrefix(tsaddr.TailscaleULARange())
 | 
						|
	internetBuilder.RemovePrefix(tsaddr.CGNATRange())
 | 
						|
 | 
						|
	// Delete "can't find DHCP networks"
 | 
						|
	internetBuilder.RemovePrefix(netip.MustParsePrefix("fe80::/10")) // link-local
 | 
						|
	internetBuilder.RemovePrefix(netip.MustParsePrefix("169.254.0.0/16"))
 | 
						|
 | 
						|
	theInternetSet, _ := internetBuilder.IPSet()
 | 
						|
 | 
						|
	return theInternetSet
 | 
						|
})
 |