mirror of
				https://github.com/juanfont/headscale.git
				synced 2025-10-28 10:51:44 +01:00 
			
		
		
		
	Generate and read the Noise private key
This commit is contained in:
		
							parent
							
								
									09cd7ba304
								
							
						
					
					
						commit
						6e8e2bf508
					
				
							
								
								
									
										15
									
								
								app.go
									
									
									
									
									
								
							
							
						
						
									
										15
									
								
								app.go
									
									
									
									
									
								
							@ -78,6 +78,7 @@ type Headscale struct {
 | 
				
			|||||||
	dbType          string
 | 
						dbType          string
 | 
				
			||||||
	dbDebug         bool
 | 
						dbDebug         bool
 | 
				
			||||||
	privateKey      *key.MachinePrivate
 | 
						privateKey      *key.MachinePrivate
 | 
				
			||||||
 | 
						noisePrivateKey *key.MachinePrivate
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	DERPMap    *tailcfg.DERPMap
 | 
						DERPMap    *tailcfg.DERPMap
 | 
				
			||||||
	DERPServer *DERPServer
 | 
						DERPServer *DERPServer
 | 
				
			||||||
@ -120,11 +121,20 @@ func LookupTLSClientAuthMode(mode string) (tls.ClientAuthType, bool) {
 | 
				
			|||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
func NewHeadscale(cfg *Config) (*Headscale, error) {
 | 
					func NewHeadscale(cfg *Config) (*Headscale, error) {
 | 
				
			||||||
	privKey, err := readOrCreatePrivateKey(cfg.PrivateKeyPath)
 | 
						privateKey, err := readOrCreatePrivateKey(cfg.PrivateKeyPath)
 | 
				
			||||||
	if err != nil {
 | 
						if err != nil {
 | 
				
			||||||
		return nil, fmt.Errorf("failed to read or create private key: %w", err)
 | 
							return nil, fmt.Errorf("failed to read or create private key: %w", err)
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						noisePrivateKey, err := readOrCreatePrivateKey(cfg.NoisePrivateKeyPath)
 | 
				
			||||||
 | 
						if err != nil {
 | 
				
			||||||
 | 
							return nil, fmt.Errorf("failed to read or create noise private key: %w", err)
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						if privateKey.Equal(*noisePrivateKey) {
 | 
				
			||||||
 | 
							return nil, fmt.Errorf("private key and noise private key are the same")
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	var dbString string
 | 
						var dbString string
 | 
				
			||||||
	switch cfg.DBtype {
 | 
						switch cfg.DBtype {
 | 
				
			||||||
	case Postgres:
 | 
						case Postgres:
 | 
				
			||||||
@ -151,7 +161,8 @@ func NewHeadscale(cfg *Config) (*Headscale, error) {
 | 
				
			|||||||
		cfg:                cfg,
 | 
							cfg:                cfg,
 | 
				
			||||||
		dbType:             cfg.DBtype,
 | 
							dbType:             cfg.DBtype,
 | 
				
			||||||
		dbString:           dbString,
 | 
							dbString:           dbString,
 | 
				
			||||||
		privateKey:         privKey,
 | 
							privateKey:         privateKey,
 | 
				
			||||||
 | 
							noisePrivateKey:    noisePrivateKey,
 | 
				
			||||||
		aclRules:           tailcfg.FilterAllowAll, // default allowall
 | 
							aclRules:           tailcfg.FilterAllowAll, // default allowall
 | 
				
			||||||
		registrationCache:  registrationCache,
 | 
							registrationCache:  registrationCache,
 | 
				
			||||||
		pollNetMapStreamWG: sync.WaitGroup{},
 | 
							pollNetMapStreamWG: sync.WaitGroup{},
 | 
				
			||||||
 | 
				
			|||||||
@ -41,6 +41,13 @@ grpc_allow_insecure: false
 | 
				
			|||||||
# autogenerated if it's missing
 | 
					# autogenerated if it's missing
 | 
				
			||||||
private_key_path: /var/lib/headscale/private.key
 | 
					private_key_path: /var/lib/headscale/private.key
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# The Noise private key is used to encrypt the
 | 
				
			||||||
 | 
					# traffic between headscale and Tailscale clients when
 | 
				
			||||||
 | 
					# using the new Noise-based TS2021 protocol.
 | 
				
			||||||
 | 
					# The noise private key file which will be
 | 
				
			||||||
 | 
					# autogenerated if it's missing
 | 
				
			||||||
 | 
					noise_private_key_path: /var/lib/headscale/noise_private.key
 | 
				
			||||||
 | 
					
 | 
				
			||||||
# List of IP prefixes to allocate tailaddresses from.
 | 
					# List of IP prefixes to allocate tailaddresses from.
 | 
				
			||||||
# Each prefix consists of either an IPv4 or IPv6 address,
 | 
					# Each prefix consists of either an IPv4 or IPv6 address,
 | 
				
			||||||
# and the associated prefix length, delimited by a slash.
 | 
					# and the associated prefix length, delimited by a slash.
 | 
				
			||||||
 | 
				
			|||||||
@ -34,6 +34,7 @@ type Config struct {
 | 
				
			|||||||
	NodeUpdateCheckInterval        time.Duration
 | 
						NodeUpdateCheckInterval        time.Duration
 | 
				
			||||||
	IPPrefixes                     []netaddr.IPPrefix
 | 
						IPPrefixes                     []netaddr.IPPrefix
 | 
				
			||||||
	PrivateKeyPath                 string
 | 
						PrivateKeyPath                 string
 | 
				
			||||||
 | 
						NoisePrivateKeyPath            string
 | 
				
			||||||
	BaseDomain                     string
 | 
						BaseDomain                     string
 | 
				
			||||||
	LogLevel                       zerolog.Level
 | 
						LogLevel                       zerolog.Level
 | 
				
			||||||
	DisableUpdateCheck             bool
 | 
						DisableUpdateCheck             bool
 | 
				
			||||||
@ -487,6 +488,9 @@ func GetHeadscaleConfig() (*Config, error) {
 | 
				
			|||||||
		PrivateKeyPath: AbsolutePathFromConfigPath(
 | 
							PrivateKeyPath: AbsolutePathFromConfigPath(
 | 
				
			||||||
			viper.GetString("private_key_path"),
 | 
								viper.GetString("private_key_path"),
 | 
				
			||||||
		),
 | 
							),
 | 
				
			||||||
 | 
							NoisePrivateKeyPath: AbsolutePathFromConfigPath(
 | 
				
			||||||
 | 
								viper.GetString("noise_private_key_path"),
 | 
				
			||||||
 | 
							),
 | 
				
			||||||
		BaseDomain: baseDomain,
 | 
							BaseDomain: baseDomain,
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		DERP: derpConfig,
 | 
							DERP: derpConfig,
 | 
				
			||||||
 | 
				
			|||||||
		Loading…
	
		Reference in New Issue
	
	Block a user