fix: 2.9 ipv4|ipv6|auto

This commit is contained in:
Alexander Renz 2025-04-12 09:49:14 +02:00
parent 23ee7e5d33
commit 1c6477531c
3 changed files with 85 additions and 16 deletions

View File

@ -136,6 +136,7 @@ type ServerConfig struct {
Logging LoggingConfig `mapstructure:"logging"` Logging LoggingConfig `mapstructure:"logging"`
GlobalExtensions []string `mapstructure:"globalextensions"` GlobalExtensions []string `mapstructure:"globalextensions"`
FileNaming string `mapstructure:"filenaming"` FileNaming string `mapstructure:"filenaming"`
ForceProtocol string `mapstructure:"forceprotocol"` // NEW field
// Removed TempPath, LoggingJSON // Removed TempPath, LoggingJSON
} }
@ -381,16 +382,41 @@ func createAndMountISO(size, mountpoint, charset string) error {
return nil return nil
} }
var dialer = &net.Dialer{ func initializeNetworkProtocol(forceProtocol string) (*net.Dialer, error) {
DualStack: true, switch forceProtocol {
case "ipv4":
return &net.Dialer{
Timeout: 5 * time.Second, Timeout: 5 * time.Second,
DualStack: false,
Control: func(network, address string, c syscall.RawConn) error {
if network == "tcp6" {
return fmt.Errorf("IPv6 is disabled by forceprotocol setting")
}
return nil
},
}, nil
case "ipv6":
return &net.Dialer{
Timeout: 5 * time.Second,
DualStack: false,
Control: func(network, address string, c syscall.RawConn) error {
if network == "tcp4" {
return fmt.Errorf("IPv4 is disabled by forceprotocol setting")
}
return nil
},
}, nil
case "auto":
return &net.Dialer{
Timeout: 5 * time.Second,
DualStack: true,
}, nil
default:
return nil, fmt.Errorf("invalid forceprotocol value: %s", forceProtocol)
}
} }
var dualStackClient = &http.Client{ var dualStackClient *http.Client
Transport: &http.Transport{
DialContext: dialer.DialContext,
},
}
func main() { func main() {
setDefaults() setDefaults()
@ -471,6 +497,7 @@ func main() {
log.Infof("Server DeduplicationEnabled: %v", conf.Server.DeduplicationEnabled) log.Infof("Server DeduplicationEnabled: %v", conf.Server.DeduplicationEnabled)
log.Infof("Server BindIP: %s", conf.Server.BindIP) // Hinzugefügt: Logging für BindIP log.Infof("Server BindIP: %s", conf.Server.BindIP) // Hinzugefügt: Logging für BindIP
log.Infof("Server FileNaming: %s", conf.Server.FileNaming) // Added: Logging for FileNaming log.Infof("Server FileNaming: %s", conf.Server.FileNaming) // Added: Logging for FileNaming
log.Infof("Server ForceProtocol: %s", conf.Server.ForceProtocol) // Added: Logging for ForceProtocol
err = writePIDFile(conf.Server.PIDFilePath) // Write PID file after config is loaded err = writePIDFile(conf.Server.PIDFilePath) // Write PID file after config is loaded
if err != nil { if err != nil {
@ -590,6 +617,17 @@ func main() {
log.Fatalf("Invalid IdleTimeout: %v", err) log.Fatalf("Invalid IdleTimeout: %v", err)
} }
// Initialize network protocol based on forceprotocol setting
dialer, err := initializeNetworkProtocol(conf.Server.ForceProtocol)
if err != nil {
log.Fatalf("Failed to initialize network protocol: %v", err)
}
dualStackClient = &http.Client{
Transport: &http.Transport{
DialContext: dialer.DialContext,
},
}
server := &http.Server{ server := &http.Server{
Addr: conf.Server.BindIP + ":" + conf.Server.ListenPort, // Geändert: Nutzung von BindIP Addr: conf.Server.BindIP + ":" + conf.Server.ListenPort, // Geändert: Nutzung von BindIP
Handler: router, Handler: router,
@ -668,6 +706,7 @@ deduplicationenabled = true
globalextensions = [".txt", ".pdf", ".png", ".jpg", ".jpeg", ".gif", ".bmp", ".tiff", ".svg", ".webp"] globalextensions = [".txt", ".pdf", ".png", ".jpg", ".jpeg", ".gif", ".bmp", ".tiff", ".svg", ".webp"]
# FileNaming options: "HMAC", "None" # FileNaming options: "HMAC", "None"
filenaming = "HMAC" filenaming = "HMAC"
forceprotocol = "auto"
[logging] [logging]
level = "info" level = "info"
@ -733,7 +772,7 @@ uploadqueuesize = 50
# Add file-specific configurations here # Add file-specific configurations here
[build] [build]
version = "2.7-Stable" version = "2.9-Stable"
`) `)
} }
@ -827,6 +866,7 @@ func setDefaults() {
viper.SetDefault("server.loggingjson", false) viper.SetDefault("server.loggingjson", false)
viper.SetDefault("server.filettlenabled", true) viper.SetDefault("server.filettlenabled", true)
viper.SetDefault("server.deduplicationenabled", true) viper.SetDefault("server.deduplicationenabled", true)
viper.SetDefault("server.forceprotocol", "auto")
viper.SetDefault("timeouts.readtimeout", "4800s") viper.SetDefault("timeouts.readtimeout", "4800s")
viper.SetDefault("timeouts.writetimeout", "4800s") viper.SetDefault("timeouts.writetimeout", "4800s")
@ -1181,6 +1221,9 @@ func logSystemInfo() {
log.Infof("Platform Family: %s", hInfo.PlatformFamily) log.Infof("Platform Family: %s", hInfo.PlatformFamily)
log.Infof("Platform Version: %s", hInfo.PlatformVersion) log.Infof("Platform Version: %s", hInfo.PlatformVersion)
log.Infof("Kernel Version: %s", hInfo.KernelVersion) log.Infof("Kernel Version: %s", hInfo.KernelVersion)
// Log the forceprotocol configuration
log.Infof("Force Protocol: %s", conf.Server.ForceProtocol)
} }
func initMetrics() { func initMetrics() {

View File

@ -1,5 +1,19 @@
[server] # Server configuration
// ...existing code... listenport = "8080" # TCP port for incoming requests
# FileNaming options: "HMAC", "None" unixsocket = false # Use Unix domain socket instead of TCP
FileNaming = "HMAC" storagepath = "/path/to/hmac-file-server/data/" # Directory to store uploaded files
// ...existing code... loglevel = "debug" # Logging level: "debug", "info", "warn", "error"
logfile = "/path/to/hmac-file-server.log" # Path to log file; leave empty to use stdout
metricsenabled = true # Enable Prometheus metrics
metricsport = "9090" # Port for Prometheus metrics
deduplicationenabled = true
minfreebytes = "5GB" # Minimum free disk space required
filettl = "2Y" # Time-to-live for files
filettlenabled = false # Enable TTL checks and cleanup
autoadjustworkers = true # Automatically adjust worker threads based on load
networkevents = false # Enable detailed network event logging
pidfilepath = "./hmac-file-server.pid" # Path to PID file
precaching = true # Pre-cache file structures on startup
# New option to force network protocol
forceprotocol = "auto" # Options: "ipv4", "ipv6", "auto"

12
wiki.md
View File

@ -62,6 +62,9 @@ autoadjustworkers = true # Automatically adjust worker threads based on load
networkevents = false # Enable detailed network event logging networkevents = false # Enable detailed network event logging
pidfilepath = "./hmac-file-server.pid" # Path to PID file pidfilepath = "./hmac-file-server.pid" # Path to PID file
precaching = true # Pre-cache file structures on startup precaching = true # Pre-cache file structures on startup
# New option to force network protocol
forceprotocol = "auto" # Options: "ipv4", "ipv6", "auto"
``` ```
#### Configuration Options #### Configuration Options
@ -143,6 +146,14 @@ precaching = true # Pre-cache file structures on startup
- *Description*: Enables pre-caching of file structures on startup to improve access speed and performance. - *Description*: Enables pre-caching of file structures on startup to improve access speed and performance.
- *Default*: `true` - *Default*: `true`
- **forceprotocol**:
- *Type*: `String`
- *Description*: Specifies the network protocol to use for server communication.
- `"ipv4"`: Forces the server to use IPv4.
- `"ipv6"`: Forces the server to use IPv6.
- `"auto"`: Uses the system's default behavior (dual-stack).
- *Default*: `"auto"`
--- ---
### Deduplication Settings ### Deduplication Settings
@ -495,6 +506,7 @@ autoadjustworkers = true
networkevents = false networkevents = false
pidfilepath = "./hmac-file-server.pid" pidfilepath = "./hmac-file-server.pid"
precaching = true precaching = true
forceprotocol = "auto"
# Deduplication settings # Deduplication settings
[deduplication] [deduplication]