From 61349e778f5dc7cf3aa7da064d6ee1517e9a078f Mon Sep 17 00:00:00 2001 From: naison <895703375@qq.com> Date: Tue, 30 Sep 2025 16:38:02 +0800 Subject: [PATCH] refactor: add tun device name to hosts comment (#725) --- pkg/config/config.go | 5 +++-- pkg/dns/dns.go | 43 ++++++++++++------------------------------ pkg/dns/dns_linux.go | 3 +-- pkg/dns/dns_unix.go | 2 +- pkg/dns/dns_windows.go | 3 +-- 5 files changed, 18 insertions(+), 38 deletions(-) diff --git a/pkg/config/config.go b/pkg/config/config.go index 911977ad..466c811a 100644 --- a/pkg/config/config.go +++ b/pkg/config/config.go @@ -93,8 +93,9 @@ const ( EnvSSHJump = "SSH_JUMP_BY_KUBEVPN" - // hosts entry key word - HostsKeyWord = "# Add by KubeVPN" + // hosts entry keyword + HostsKeyword = "Added by KubeVPN" + HostsDeviceKeyword = "# For dev %s " + HostsKeyword ) var ( diff --git a/pkg/dns/dns.go b/pkg/dns/dns.go index 6f8e3390..cf178cd0 100644 --- a/pkg/dns/dns.go +++ b/pkg/dns/dns.go @@ -49,7 +49,7 @@ func (c *Config) AddServiceNameToHosts(ctx context.Context, hosts ...Entry) erro err := c.appendHosts(appendHosts) c.Lock.Unlock() if err != nil { - plog.G(ctx).Errorf("Failed to add hosts(%s): %v", entryList2String(appendHosts), err) + plog.G(ctx).Errorf("Failed to add hosts(%s): %v", c.entryList2String(appendHosts), err) return err } @@ -111,7 +111,7 @@ func (c *Config) watchServiceToAddHosts(ctx context.Context, hosts []Entry) { err = c.appendHosts(appendHosts) c.Lock.Unlock() if err != nil && !errors.Is(err, context.Canceled) { - plog.G(ctx).Errorf("Failed to add hosts(%s) to hosts: %v", entryList2String(appendHosts), err) + plog.G(ctx).Errorf("Failed to add hosts(%s) to hosts: %v", c.entryList2String(appendHosts), err) } } } @@ -137,46 +137,27 @@ func (c *Config) appendHosts(appendHosts []Entry) error { return err } defer f.Close() - str := entryList2String(appendHosts) + str := c.entryList2String(appendHosts) _, err = f.WriteString(str) return err } -func (c *Config) removeHosts(hosts []Entry) error { - if len(hosts) == 0 { - return nil - } - - for i := 0; i < len(c.Hosts); i++ { - if sets.New[Entry]().Insert(hosts...).Has(c.Hosts[i]) { - c.Hosts = append(c.Hosts[:i], c.Hosts[i+1:]...) - i-- - } - } - +func (c *Config) removeHosts() error { hostFile := GetHostFile() content, err2 := os.ReadFile(hostFile) if err2 != nil { return err2 } - if !strings.Contains(string(content), config.HostsKeyWord) { + if !strings.Contains(string(content), config.HostsKeyword) { return nil } + keyword := fmt.Sprintf(config.HostsDeviceKeyword, c.TunName) var retain []string reader := bufio.NewReader(bytes.NewReader(content)) for { line, err := reader.ReadString('\n') - var needsRemove bool - if strings.Contains(line, config.HostsKeyWord) { - for _, host := range hosts { - if strings.Contains(line, host.IP) && strings.Contains(line, host.Domain) { - needsRemove = true - break - } - } - } - if !needsRemove { + if !strings.Contains(line, keyword) { retain = append(retain, line) } if errors.Is(err, io.EOF) { @@ -205,11 +186,11 @@ type Entry struct { Domain string } -func entryList2String(entryList []Entry) string { +func (c *Config) entryList2String(entryList []Entry) string { var sb = new(bytes.Buffer) w := tabwriter.NewWriter(sb, 1, 1, 1, ' ', 0) for _, e := range entryList { - _, _ = fmt.Fprintf(w, "\n%s\t%s\t%s\t%s", e.IP, e.Domain, "", config.HostsKeyWord) + _, _ = fmt.Fprintf(w, "\n%s\t%s\t%s\t%s", e.IP, e.Domain, "", fmt.Sprintf(config.HostsDeviceKeyword, c.TunName)) } _ = w.Flush() return sb.String() @@ -250,7 +231,7 @@ func (c *Config) generateAppendHosts(serviceList []v12.Service, hosts []Entry) [ for { line, err := reader.ReadString('\n') for i := 0; i < len(entryList); i++ { - if strings.Contains(line, config.HostsKeyWord) && strings.Contains(line, entryList[i].Domain) { + if strings.Contains(line, config.HostsKeyword) && strings.Contains(line, entryList[i].Domain) { entryList = append(entryList[:i], entryList[i+1:]...) i-- } @@ -275,7 +256,7 @@ func CleanupHosts() error { if err2 != nil { return err2 } - if !strings.Contains(string(content), config.HostsKeyWord) { + if !strings.Contains(string(content), config.HostsKeyword) { return nil } @@ -283,7 +264,7 @@ func CleanupHosts() error { reader := bufio.NewReader(bytes.NewReader(content)) for { line, err := reader.ReadString('\n') - if !strings.Contains(line, config.HostsKeyWord) { + if !strings.Contains(line, config.HostsKeyword) { retain = append(retain, line) } if errors.Is(err, io.EOF) { diff --git a/pkg/dns/dns_linux.go b/pkg/dns/dns_linux.go index 7f9db4db..2f8c78d1 100644 --- a/pkg/dns/dns_linux.go +++ b/pkg/dns/dns_linux.go @@ -15,7 +15,6 @@ import ( "github.com/docker/docker/libnetwork/resolvconf" miekgdns "github.com/miekg/dns" - "k8s.io/apimachinery/pkg/util/sets" "tailscale.com/net/dns" "tailscale.com/util/dnsname" @@ -155,7 +154,7 @@ func (c *Config) UseLibraryDNS(tunName string, clientConfig *miekgdns.ClientConf } func (c *Config) CancelDNS() { - c.removeHosts(sets.New[Entry]().Insert(c.Hosts...).UnsortedList()) + c.removeHosts() if c.OSConfigurator != nil { _ = c.OSConfigurator.Close() } diff --git a/pkg/dns/dns_unix.go b/pkg/dns/dns_unix.go index 83fc2c55..d52a05c6 100644 --- a/pkg/dns/dns_unix.go +++ b/pkg/dns/dns_unix.go @@ -210,7 +210,7 @@ func (c *Config) CancelDNS() { } } //networkCancel() - _ = c.removeHosts(sets.New[Entry]().Insert(c.Hosts...).UnsortedList()) + _ = c.removeHosts() } // GetResolvers diff --git a/pkg/dns/dns_windows.go b/pkg/dns/dns_windows.go index 0a2e0753..45d72c2e 100644 --- a/pkg/dns/dns_windows.go +++ b/pkg/dns/dns_windows.go @@ -11,7 +11,6 @@ import ( "golang.org/x/sys/windows" "golang.zx2c4.com/wireguard/windows/tunnel/winipcfg" - "k8s.io/apimachinery/pkg/util/sets" plog "github.com/wencaiwulue/kubevpn/v2/pkg/log" ) @@ -54,7 +53,7 @@ func (c *Config) SetupDNS(ctx context.Context) error { } func (c *Config) CancelDNS() { - c.removeHosts(sets.New[Entry]().Insert(c.Hosts...).UnsortedList()) + c.removeHosts() tun, err := net.InterfaceByName(c.TunName) if err != nil { return