diff --git a/internal/network/config.go b/internal/network/config.go index 8a28d515..da99496f 100644 --- a/internal/network/config.go +++ b/internal/network/config.go @@ -56,13 +56,12 @@ type NetworkConfig struct { } func (c *NetworkConfig) GetMDNSMode() *mdns.MDNSListenOptions { - mode := c.MDNSMode.String listenOptions := &mdns.MDNSListenOptions{ - IPv4: true, - IPv6: true, + IPv4: c.IPv4Mode.String != "disabled", + IPv6: c.IPv6Mode.String != "disabled", } - switch mode { + switch c.MDNSMode.String { case "ipv4_only": listenOptions.IPv6 = false case "ipv6_only": diff --git a/mdns.go b/mdns.go index d7a3b553..4f9b49b1 100644 --- a/mdns.go +++ b/mdns.go @@ -13,10 +13,7 @@ func initMdns() error { networkState.GetHostname(), networkState.GetFQDN(), }, - ListenOptions: &mdns.MDNSListenOptions{ - IPv4: true, - IPv6: true, - }, + ListenOptions: config.NetworkConfig.GetMDNSMode(), }) if err != nil { return err diff --git a/web.go b/web.go index f1aa1ab4..7dfb6966 100644 --- a/web.go +++ b/web.go @@ -562,14 +562,31 @@ func RunWebServer() { r := setupRouter() // Determine the binding address based on the config - bindAddress := ":80" // Default to all interfaces + var bindAddress string + listenPort := 80 // default port + useIPv4 := config.NetworkConfig.IPv4Mode.String != "disabled" + useIPv6 := config.NetworkConfig.IPv6Mode.String != "disabled" + if config.LocalLoopbackOnly { - bindAddress = "localhost:80" // Loopback only (both IPv4 and IPv6) + if useIPv4 && useIPv6 { + bindAddress = fmt.Sprintf("localhost:%d", listenPort) + } else if useIPv4 { + bindAddress = fmt.Sprintf("127.0.0.1:%d", listenPort) + } else if useIPv6 { + bindAddress = fmt.Sprintf("[::1]:%d", listenPort) + } + } else { + if useIPv4 && useIPv6 { + bindAddress = fmt.Sprintf(":%d", listenPort) + } else if useIPv4 { + bindAddress = fmt.Sprintf("0.0.0.0:%d", listenPort) + } else if useIPv6 { + bindAddress = fmt.Sprintf("[::]:%d", listenPort) + } } logger.Info().Str("bindAddress", bindAddress).Bool("loopbackOnly", config.LocalLoopbackOnly).Msg("Starting web server") - err := r.Run(bindAddress) - if err != nil { + if err := r.Run(bindAddress); err != nil { panic(err) } }