From 76bc0822ef8e1ee031abdbe77ef3efb9be8ccc4d Mon Sep 17 00:00:00 2001 From: Vladimir Avtsenov Date: Fri, 6 Sep 2024 17:06:17 +0300 Subject: [PATCH] support for custom interfaces on Keenetic --- README.md | 2 +- group.go | 10 +++++++++- models/group.go | 9 +++++---- 3 files changed, 15 insertions(+), 6 deletions(-) diff --git a/README.md b/README.md index bc00d2f..a31739f 100644 --- a/README.md +++ b/README.md @@ -18,7 +18,7 @@ Realized features: - [ ] HTTP API - [ ] HTTP GUI - [ ] CLI -- [ ] (Keenetic) Support for custom interfaces [1] +- [X] (Keenetic) Support for custom interfaces [1] - [ ] It is not a concept now... REFACTORING TIME!!! - [ ] (Keenetic) Getting readable names of interfaces from Keenetic NDMS - [ ] HTTP Auth diff --git a/group.go b/group.go index 22307f0..982f3e7 100644 --- a/group.go +++ b/group.go @@ -2,11 +2,13 @@ package main import ( "fmt" - netfilterHelper "kvas2-go/netfilter-helper" "net" "time" "kvas2-go/models" + "kvas2-go/netfilter-helper" + + "github.com/coreos/go-iptables/iptables" ) type Group struct { @@ -14,6 +16,7 @@ type Group struct { Enabled bool + iptables *iptables.IPTables ipset *netfilterHelper.IPSet ifaceToIPSet *netfilterHelper.IfaceToIPSet } @@ -48,6 +51,10 @@ func (g *Group) Enable() error { } }() + if g.FixProtect { + g.iptables.AppendUnique("filter", "_NDM_SL_FORWARD", "-o", g.Interface, "-m", "state", "--state", "NEW", "-j", "_NDM_SL_PROTECT") + } + err := g.ipset.Create() if err != nil { return err @@ -94,6 +101,7 @@ func (a *App) AddGroup(group *models.Group) error { a.Groups[group.ID] = &Group{ Group: group, + iptables: a.NetfilterHelper.IPTables, ipset: a.NetfilterHelper.IPSet(ipsetName), ifaceToIPSet: a.NetfilterHelper.IfaceToIPSet(fmt.Sprintf("%sROUTING_%d", a.Config.ChainPostfix, group.ID), group.Interface, ipsetName, false), } diff --git a/models/group.go b/models/group.go index 7c527b0..81dbd11 100644 --- a/models/group.go +++ b/models/group.go @@ -1,8 +1,9 @@ package models type Group struct { - ID int - Name string - Interface string - Domains []*Domain + ID int + Name string + Interface string + FixProtect bool + Domains []*Domain }