feat: add OpenWrt detection

This commit is contained in:
SunBK201 2025-12-03 01:10:12 +08:00
parent a661427365
commit c68fbe132a

View File

@ -7,6 +7,7 @@ import (
"log"
"log/slog"
"net"
"os"
"os/exec"
"os/user"
"strings"
@ -297,6 +298,10 @@ func (f *Firewall) DeleteTproxyRoute(fwmark, routeTable string) error {
}
func detectFirewallBackend(cfg *config.Config) string {
isOpenwrt := isOpenWrt()
if isOpenwrt {
slog.Info("Detected OpenWrt environment")
}
nftAvailable := IsCommandAvailable("nft")
iptAvailable := IsCommandAvailable("iptables")
nftTproxyAvailable := isOpkgPackageInstalled("kmod-nft-tproxy") && nftAvailable
@ -308,6 +313,9 @@ func detectFirewallBackend(cfg *config.Config) string {
if !nftAvailable {
return false
}
if !isOpenwrt {
return true
}
if nfqueueNeeded && !nftNfqueueAvailable {
return false
}
@ -376,6 +384,36 @@ func getLocalIPv4CIDRs() ([]string, error) {
return cidrs, nil
}
func isOpenWrt() bool {
checkFiles := []string{
"/etc/openwrt_release",
}
for _, f := range checkFiles {
if _, err := os.Stat(f); err == nil {
return true
}
}
data, err := os.ReadFile("/etc/os-release")
if err == nil && strings.Contains(string(data), "OpenWrt") {
return true
}
if _, err := user.Lookup("uci"); err == nil {
return true
}
if _, err := exec.LookPath("opkg"); err == nil {
return true
}
if _, err := user.Lookup("apk"); err == nil {
return true
}
return false
}
func IsCommandAvailable(cmd string) bool {
_, err := exec.LookPath(cmd)
return err == nil