switch to another lib

This commit is contained in:
Vladimir Avtsenov 2024-09-04 08:14:09 +03:00
parent 208162a6ec
commit d7859bcc52
3 changed files with 24 additions and 17 deletions

7
go.mod
View File

@ -5,5 +5,10 @@ go 1.21
require (
github.com/IGLOU-EU/go-wildcard/v2 v2.0.2
github.com/coreos/go-iptables v0.7.0
github.com/ponywka/ipset v0.0.0-20240904034143-fde4cf92dbac
github.com/vishvananda/netlink v1.3.0
)
require (
github.com/vishvananda/netns v0.0.4 // indirect
golang.org/x/sys v0.10.0 // indirect
)

View File

@ -3,8 +3,9 @@ package main
import (
"errors"
"fmt"
"github.com/ponywka/ipset"
"github.com/vishvananda/netlink"
"net"
"os"
"strconv"
"time"
@ -29,6 +30,8 @@ func (g *Group) HandleIPv4(names []string, address net.IP, ttl time.Duration) er
return nil
}
ttlSeconds := uint32(ttl.Seconds())
DomainSearch:
for _, domain := range g.Domains {
if !domain.IsEnabled() {
@ -36,11 +39,13 @@ DomainSearch:
}
for _, name := range names {
if domain.IsMatch(name) {
// TODO: Looks like I need patch this module :\
//err := ipset.Add(g.ipsetName, address.String(), ipset.OptTimeout(uint32(ttl.Seconds())))
err := ipset.Add(g.ipsetName, address.String())
err := netlink.IpsetAdd(g.ipsetName, &netlink.IPSetEntry{
IP: address,
Timeout: &ttlSeconds,
Replace: true,
})
if err != nil {
return fmt.Errorf("failed to assign address %s with %s ipset", address, g.ipsetName)
return fmt.Errorf("failed to assign address %s with %s ipset: %w", address, g.ipsetName, err)
}
break DomainSearch
}
@ -75,11 +80,14 @@ func (g *Group) Enable() error {
return errors.New(string(out))
}
err = ipset.Destroy(g.ipsetName)
if err != nil {
defaultTimeout := uint32(300)
err = netlink.IpsetDestroy(g.ipsetName)
if err != nil && !os.IsNotExist(err) {
return fmt.Errorf("failed to destroy ipset: %w", err)
}
err = ipset.Create(g.ipsetName, ipset.OptType("hash:ip"))
err = netlink.IpsetCreate(g.ipsetName, "hash:ip", netlink.IpsetCreateOptions{
Timeout: &defaultTimeout,
})
if err != nil {
return fmt.Errorf("failed to create ipset: %w", err)
}
@ -106,8 +114,8 @@ func (g *Group) Disable() error {
return errors.New(string(out))
}
err = ipset.Destroy(g.ipsetName)
if err != nil {
err = netlink.IpsetDestroy(g.ipsetName)
if err != nil && !os.IsNotExist(err) {
return fmt.Errorf("failed to destroy ipset: %w", err)
}

View File

@ -12,8 +12,6 @@ import (
"kvas2-go/models"
"kvas2-go/pkg/dns-proxy"
"kvas2-go/pkg/iptables-helper"
"github.com/ponywka/ipset"
)
var (
@ -203,10 +201,6 @@ func (a *App) handleMessage(msg *dnsProxy.Message) {
func New(config Config) (*App, error) {
var err error
if err = ipset.Init(); err != nil {
return nil, fmt.Errorf("failed to initialize ipset: %w", err)
}
app := &App{}
app.Config = config