mirror of
				https://github.com/juanfont/headscale.git
				synced 2025-10-28 10:51:44 +01:00 
			
		
		
		
	Use CapVer to offer Noise only to supported clients
This commit is contained in:
		
							parent
							
								
									865f1ffb3c
								
							
						
					
					
						commit
						b3cf5289f8
					
				
							
								
								
									
										6
									
								
								api.go
									
									
									
									
									
								
							
							
						
						
									
										6
									
								
								api.go
									
									
									
									
									
								
							| @ -25,12 +25,6 @@ const ( | |||||||
| 	ErrRegisterMethodCLIDoesNotSupportExpire = Error( | 	ErrRegisterMethodCLIDoesNotSupportExpire = Error( | ||||||
| 		"machines registered with CLI does not support expire", | 		"machines registered with CLI does not support expire", | ||||||
| 	) | 	) | ||||||
| 
 |  | ||||||
| 	// The CapabilityVersion is used by Tailscale clients to indicate
 |  | ||||||
| 	// their codebase version. Tailscale clients can communicate over TS2021
 |  | ||||||
| 	// from CapabilityVersion 28.
 |  | ||||||
| 	// See https://github.com/tailscale/tailscale/blob/main/tailcfg/tailcfg.go
 |  | ||||||
| 	NoiseCapabilityVersion = 28 |  | ||||||
| ) | ) | ||||||
| 
 | 
 | ||||||
| func (h *Headscale) HealthHandler( | func (h *Headscale) HealthHandler( | ||||||
|  | |||||||
| @ -9,6 +9,19 @@ import ( | |||||||
| 	"tailscale.com/tailcfg" | 	"tailscale.com/tailcfg" | ||||||
| ) | ) | ||||||
| 
 | 
 | ||||||
|  | const ( | ||||||
|  | 	// The CapabilityVersion is used by Tailscale clients to indicate
 | ||||||
|  | 	// their codebase version. Tailscale clients can communicate over TS2021
 | ||||||
|  | 	// from CapabilityVersion 28, but we only have good support for it
 | ||||||
|  | 	// since https://github.com/tailscale/tailscale/pull/4323 (Noise in any HTTPS port).
 | ||||||
|  | 	//
 | ||||||
|  | 	// Related to this change, there is https://github.com/tailscale/tailscale/pull/5379,
 | ||||||
|  | 	// where CapabilityVersion 39 is introduced to indicate #4323 was merged.
 | ||||||
|  | 	//
 | ||||||
|  | 	// See also https://github.com/tailscale/tailscale/blob/main/tailcfg/tailcfg.go
 | ||||||
|  | 	NoiseCapabilityVersion = 39 | ||||||
|  | ) | ||||||
|  | 
 | ||||||
| // KeyHandler provides the Headscale pub key
 | // KeyHandler provides the Headscale pub key
 | ||||||
| // Listens in /key.
 | // Listens in /key.
 | ||||||
| func (h *Headscale) KeyHandler( | func (h *Headscale) KeyHandler( | ||||||
| @ -18,6 +31,10 @@ func (h *Headscale) KeyHandler( | |||||||
| 	// New Tailscale clients send a 'v' parameter to indicate the CurrentCapabilityVersion
 | 	// New Tailscale clients send a 'v' parameter to indicate the CurrentCapabilityVersion
 | ||||||
| 	clientCapabilityStr := req.URL.Query().Get("v") | 	clientCapabilityStr := req.URL.Query().Get("v") | ||||||
| 	if clientCapabilityStr != "" { | 	if clientCapabilityStr != "" { | ||||||
|  | 		log.Debug(). | ||||||
|  | 			Str("handler", "/key"). | ||||||
|  | 			Str("v", clientCapabilityStr). | ||||||
|  | 			Msg("New noise client") | ||||||
| 		clientCapabilityVersion, err := strconv.Atoi(clientCapabilityStr) | 		clientCapabilityVersion, err := strconv.Atoi(clientCapabilityStr) | ||||||
| 		if err != nil { | 		if err != nil { | ||||||
| 			writer.Header().Set("Content-Type", "text/plain; charset=utf-8") | 			writer.Header().Set("Content-Type", "text/plain; charset=utf-8") | ||||||
| @ -52,6 +69,9 @@ func (h *Headscale) KeyHandler( | |||||||
| 			return | 			return | ||||||
| 		} | 		} | ||||||
| 	} | 	} | ||||||
|  | 	log.Debug(). | ||||||
|  | 		Str("handler", "/key"). | ||||||
|  | 		Msg("New legacy client") | ||||||
| 
 | 
 | ||||||
| 	// Old clients don't send a 'v' parameter, so we send the legacy public key
 | 	// Old clients don't send a 'v' parameter, so we send the legacy public key
 | ||||||
| 	writer.Header().Set("Content-Type", "text/plain; charset=utf-8") | 	writer.Header().Set("Content-Type", "text/plain; charset=utf-8") | ||||||
|  | |||||||
		Loading…
	
		Reference in New Issue
	
	Block a user