mirror of
				https://github.com/juanfont/headscale.git
				synced 2025-10-28 10:51:44 +01:00 
			
		
		
		
	Merge branch 'main' into reverse-proxy
This commit is contained in:
		
						commit
						e6e5872b4b
					
				@ -2,12 +2,19 @@
 | 
			
		||||
 | 
			
		||||
## 0.17.0 (2022-XX-XX)
 | 
			
		||||
 | 
			
		||||
### BREAKING
 | 
			
		||||
 | 
			
		||||
- Log level option `log_level` was moved to a distinct `log` config section and renamed to `level` [#768](https://github.com/juanfont/headscale/pull/768)
 | 
			
		||||
 | 
			
		||||
### Changes
 | 
			
		||||
 | 
			
		||||
- Added support for Tailscale TS2021 protocol [#738](https://github.com/juanfont/headscale/pull/738)
 | 
			
		||||
- Add ability to specify config location via env var `HEADSCALE_CONFIG` [#674](https://github.com/juanfont/headscale/issues/674)
 | 
			
		||||
- Target Go 1.19 for Headscale [#778](https://github.com/juanfont/headscale/pull/778)
 | 
			
		||||
- Target Tailscale v1.30.0 to build Headscale [#780](https://github.com/juanfont/headscale/pull/780)
 | 
			
		||||
- Give a warning when running Headscale with reverse proxy improperly configured for WebSockets [#788](https://github.com/juanfont/headscale/pull/788)
 | 
			
		||||
- Fix subnet routers with Primary Routes [#811](https://github.com/juanfont/headscale/pull/811)
 | 
			
		||||
- Added support for JSON logs [#653](https://github.com/juanfont/headscale/issues/653)
 | 
			
		||||
 | 
			
		||||
## 0.16.4 (2022-08-21)
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@ -47,7 +47,7 @@ func initConfig() {
 | 
			
		||||
 | 
			
		||||
	machineOutput := HasMachineOutputFlag()
 | 
			
		||||
 | 
			
		||||
	zerolog.SetGlobalLevel(cfg.LogLevel)
 | 
			
		||||
	zerolog.SetGlobalLevel(cfg.Log.Level)
 | 
			
		||||
 | 
			
		||||
	// If the user has requested a "machine" readable format,
 | 
			
		||||
	// then disable login so the output remains valid.
 | 
			
		||||
@ -55,6 +55,10 @@ func initConfig() {
 | 
			
		||||
		zerolog.SetGlobalLevel(zerolog.Disabled)
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	if cfg.Log.Format == headscale.JSONLogFormat {
 | 
			
		||||
		log.Logger = log.Output(os.Stdout)
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	if !cfg.DisableUpdateCheck && !machineOutput {
 | 
			
		||||
		if (runtime.GOOS == "linux" || runtime.GOOS == "darwin") &&
 | 
			
		||||
			Version != "dev" {
 | 
			
		||||
 | 
			
		||||
@ -172,7 +172,10 @@ tls_letsencrypt_listen: ":http"
 | 
			
		||||
tls_cert_path: ""
 | 
			
		||||
tls_key_path: ""
 | 
			
		||||
 | 
			
		||||
log_level: info
 | 
			
		||||
log:
 | 
			
		||||
  # Output formatting for logs: text or json
 | 
			
		||||
  format: text
 | 
			
		||||
  level: info
 | 
			
		||||
 | 
			
		||||
# Path to a file containg ACL policies.
 | 
			
		||||
# ACLs can be defined as YAML or HUJSON.
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										50
									
								
								config.go
									
									
									
									
									
								
							
							
						
						
									
										50
									
								
								config.go
									
									
									
									
									
								
							@ -22,6 +22,9 @@ import (
 | 
			
		||||
const (
 | 
			
		||||
	tlsALPN01ChallengeType = "TLS-ALPN-01"
 | 
			
		||||
	http01ChallengeType    = "HTTP-01"
 | 
			
		||||
 | 
			
		||||
	JSONLogFormat = "json"
 | 
			
		||||
	TextLogFormat = "text"
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
// Config contains the initial Headscale configuration.
 | 
			
		||||
@ -37,7 +40,7 @@ type Config struct {
 | 
			
		||||
	PrivateKeyPath                 string
 | 
			
		||||
	NoisePrivateKeyPath            string
 | 
			
		||||
	BaseDomain                     string
 | 
			
		||||
	LogLevel                       zerolog.Level
 | 
			
		||||
	Log                            LogConfig
 | 
			
		||||
	DisableUpdateCheck             bool
 | 
			
		||||
 | 
			
		||||
	DERP DERPConfig
 | 
			
		||||
@ -124,6 +127,11 @@ type ACLConfig struct {
 | 
			
		||||
	PolicyPath string
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
type LogConfig struct {
 | 
			
		||||
	Format string
 | 
			
		||||
	Level  zerolog.Level
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func LoadConfig(path string, isFile bool) error {
 | 
			
		||||
	if isFile {
 | 
			
		||||
		viper.SetConfigFile(path)
 | 
			
		||||
@ -147,7 +155,8 @@ func LoadConfig(path string, isFile bool) error {
 | 
			
		||||
	viper.SetDefault("tls_letsencrypt_challenge_type", http01ChallengeType)
 | 
			
		||||
	viper.SetDefault("tls_client_auth_mode", "relaxed")
 | 
			
		||||
 | 
			
		||||
	viper.SetDefault("log_level", "info")
 | 
			
		||||
	viper.SetDefault("log.level", "info")
 | 
			
		||||
	viper.SetDefault("log.format", TextLogFormat)
 | 
			
		||||
 | 
			
		||||
	viper.SetDefault("dns_config", nil)
 | 
			
		||||
 | 
			
		||||
@ -334,6 +343,34 @@ func GetACLConfig() ACLConfig {
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func GetLogConfig() LogConfig {
 | 
			
		||||
	logLevelStr := viper.GetString("log.level")
 | 
			
		||||
	logLevel, err := zerolog.ParseLevel(logLevelStr)
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		logLevel = zerolog.DebugLevel
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	logFormatOpt := viper.GetString("log.format")
 | 
			
		||||
	var logFormat string
 | 
			
		||||
	switch logFormatOpt {
 | 
			
		||||
	case "json":
 | 
			
		||||
		logFormat = JSONLogFormat
 | 
			
		||||
	case "text":
 | 
			
		||||
		logFormat = TextLogFormat
 | 
			
		||||
	case "":
 | 
			
		||||
		logFormat = TextLogFormat
 | 
			
		||||
	default:
 | 
			
		||||
		log.Error().
 | 
			
		||||
			Str("func", "GetLogConfig").
 | 
			
		||||
			Msgf("Could not parse log format: %s. Valid choices are 'json' or 'text'", logFormatOpt)
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	return LogConfig{
 | 
			
		||||
		Format: logFormat,
 | 
			
		||||
		Level:  logLevel,
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func GetDNSConfig() (*tailcfg.DNSConfig, string) {
 | 
			
		||||
	if viper.IsSet("dns_config") {
 | 
			
		||||
		dnsConfig := &tailcfg.DNSConfig{}
 | 
			
		||||
@ -430,12 +467,6 @@ func GetHeadscaleConfig() (*Config, error) {
 | 
			
		||||
	configuredPrefixes := viper.GetStringSlice("ip_prefixes")
 | 
			
		||||
	parsedPrefixes := make([]netip.Prefix, 0, len(configuredPrefixes)+1)
 | 
			
		||||
 | 
			
		||||
	logLevelStr := viper.GetString("log_level")
 | 
			
		||||
	logLevel, err := zerolog.ParseLevel(logLevelStr)
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		logLevel = zerolog.DebugLevel
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	legacyPrefixField := viper.GetString("ip_prefix")
 | 
			
		||||
	if len(legacyPrefixField) > 0 {
 | 
			
		||||
		log.
 | 
			
		||||
@ -488,7 +519,6 @@ func GetHeadscaleConfig() (*Config, error) {
 | 
			
		||||
		GRPCAddr:           viper.GetString("grpc_listen_addr"),
 | 
			
		||||
		GRPCAllowInsecure:  viper.GetBool("grpc_allow_insecure"),
 | 
			
		||||
		DisableUpdateCheck: viper.GetBool("disable_check_updates"),
 | 
			
		||||
		LogLevel:           logLevel,
 | 
			
		||||
 | 
			
		||||
		IPPrefixes: prefixes,
 | 
			
		||||
		PrivateKeyPath: AbsolutePathFromConfigPath(
 | 
			
		||||
@ -550,5 +580,7 @@ func GetHeadscaleConfig() (*Config, error) {
 | 
			
		||||
		},
 | 
			
		||||
 | 
			
		||||
		ACL: GetACLConfig(),
 | 
			
		||||
 | 
			
		||||
		Log: GetLogConfig(),
 | 
			
		||||
	}, nil
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@ -28,7 +28,9 @@ ip_prefixes:
 | 
			
		||||
  - fd7a:115c:a1e0::/48
 | 
			
		||||
  - 100.64.0.0/10
 | 
			
		||||
listen_addr: 0.0.0.0:18080
 | 
			
		||||
log_level: disabled
 | 
			
		||||
log:
 | 
			
		||||
  level: disabled
 | 
			
		||||
  format: text
 | 
			
		||||
logtail:
 | 
			
		||||
  enabled: false
 | 
			
		||||
metrics_listen_addr: 127.0.0.1:19090
 | 
			
		||||
 | 
			
		||||
@ -1,4 +1,5 @@
 | 
			
		||||
log_level: trace
 | 
			
		||||
log:
 | 
			
		||||
  level: trace
 | 
			
		||||
acl_policy_path: ""
 | 
			
		||||
db_type: sqlite3
 | 
			
		||||
ephemeral_node_inactivity_timeout: 30m
 | 
			
		||||
 | 
			
		||||
@ -27,7 +27,9 @@ ip_prefixes:
 | 
			
		||||
  - fd7a:115c:a1e0::/48
 | 
			
		||||
  - 100.64.0.0/10
 | 
			
		||||
listen_addr: 0.0.0.0:18080
 | 
			
		||||
log_level: disabled
 | 
			
		||||
log:
 | 
			
		||||
  level: disabled
 | 
			
		||||
  format: text
 | 
			
		||||
logtail:
 | 
			
		||||
  enabled: false
 | 
			
		||||
metrics_listen_addr: 127.0.0.1:19090
 | 
			
		||||
 | 
			
		||||
@ -1,4 +1,5 @@
 | 
			
		||||
log_level: trace
 | 
			
		||||
log:
 | 
			
		||||
  level: trace
 | 
			
		||||
acl_policy_path: ""
 | 
			
		||||
db_type: sqlite3
 | 
			
		||||
ephemeral_node_inactivity_timeout: 30m
 | 
			
		||||
 | 
			
		||||
@ -28,7 +28,9 @@ ip_prefixes:
 | 
			
		||||
  - fd7a:115c:a1e0::/48
 | 
			
		||||
  - 100.64.0.0/10
 | 
			
		||||
listen_addr: 0.0.0.0:8080
 | 
			
		||||
log_level: disabled
 | 
			
		||||
log:
 | 
			
		||||
  format: text
 | 
			
		||||
  level: disabled
 | 
			
		||||
logtail:
 | 
			
		||||
  enabled: false
 | 
			
		||||
metrics_listen_addr: 127.0.0.1:9090
 | 
			
		||||
 | 
			
		||||
@ -1,4 +1,5 @@
 | 
			
		||||
log_level: trace
 | 
			
		||||
log:
 | 
			
		||||
  level: trace
 | 
			
		||||
acl_policy_path: ""
 | 
			
		||||
db_type: sqlite3
 | 
			
		||||
ephemeral_node_inactivity_timeout: 30m
 | 
			
		||||
 | 
			
		||||
		Loading…
	
		Reference in New Issue
	
	Block a user