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