Keep IPv6 router announcements working with forwarding on

With net.ipv6.conf.all.forwarding=1, Linux ignores router announcements
unless accept_ra is 2, so a server that gets its IPv6 route by SLAAC
(e.g. a Raspberry Pi at home) lost IPv6 once the route expired.

The sysctl file now also sets accept_ra=2 for the default and for every
network card and the IPv6 default-route interface, except where
accept_ra is 0. "update" rewrites the file, which fixes existing
installs. A new health check warns while the uplink still has
accept_ra=1.
This commit is contained in:
Daniel Redetzke
2026-10-05 00:10:13 +03:00
parent d32e851b74
commit a59a095691
4 changed files with 106 additions and 11 deletions
+11
View File
@@ -3,6 +3,8 @@ package main
import (
"log/slog"
"net/netip"
"os"
"strings"
"sync"
"time"
)
@@ -38,6 +40,15 @@ type Kernel interface {
Close() error
}
// readSysctl returns the trimmed content of a /proc/sys file, or "".
func readSysctl(path string) string {
b, err := os.ReadFile(path)
if err != nil {
return ""
}
return strings.TrimSpace(string(b))
}
// Reconciler applies the config to the kernel whenever it is triggered and
// remembers the outcome for the health report.
type Reconciler struct {