From 17bc64559b53f23469cd5f7d5b50f13660a15770 Mon Sep 17 00:00:00 2001 From: fengcaiwen Date: Thu, 19 Jan 2023 19:40:06 +0800 Subject: [PATCH] feat: update go mod to 1.19 --- go.mod | 6 +++--- pkg/dns/dns_windows.go | 16 +++++++++++++--- pkg/handler/connect.go | 1 + pkg/tun/tun_windows.go | 23 ++++++++++++++++++++--- pkg/util/getcidr_test.go | 27 +++++++++++++++++++++++++++ pkg/util/networkpolicy.go | 27 ++++++++++++++++++++++++++- 6 files changed, 90 insertions(+), 10 deletions(-) diff --git a/go.mod b/go.mod index 22547942..bb5b9436 100644 --- a/go.mod +++ b/go.mod @@ -1,6 +1,6 @@ module github.com/wencaiwulue/kubevpn -go 1.18 +go 1.19 require ( github.com/cilium/ipam v0.0.0-20220824141044-46ef3d556735 @@ -40,7 +40,7 @@ require ( github.com/stretchr/testify v1.8.1 golang.org/x/exp v0.0.0-20230113213754-f9f960f08ad4 golang.org/x/oauth2 v0.4.0 - golang.org/x/term v0.4.0 + golang.org/x/text v0.6.0 k8s.io/utils v0.0.0-20230115233650-391b47cb4029 sigs.k8s.io/yaml v1.3.0 ) @@ -95,7 +95,7 @@ require ( go.starlark.net v0.0.0-20230112144946-fae38c8a6d89 // indirect golang.org/x/crypto v0.5.0 // indirect golang.org/x/mod v0.7.0 // indirect - golang.org/x/text v0.6.0 // indirect + golang.org/x/term v0.4.0 // indirect golang.org/x/time v0.3.0 // indirect golang.org/x/tools v0.5.0 // indirect golang.zx2c4.com/wintun v0.0.0-20211104114900-415007cec224 // indirect diff --git a/pkg/dns/dns_windows.go b/pkg/dns/dns_windows.go index fed81420..7d60b6bc 100644 --- a/pkg/dns/dns_windows.go +++ b/pkg/dns/dns_windows.go @@ -6,7 +6,7 @@ package dns import ( "context" "fmt" - "net" + "net/netip" "os" "os/exec" "strconv" @@ -25,7 +25,17 @@ func SetupDNS(config *miekgdns.ClientConfig, _ []string) error { return err } luid := winipcfg.LUID(parseUint) - err = luid.SetDNS(windows.AF_INET, []net.IP{net.ParseIP(config.Servers[0])}, config.Search) + var servers []netip.Addr + for _, s := range config.Servers { + var addr netip.Addr + addr, err = netip.ParseAddr(s) + if err != nil { + log.Warningln(err) + return err + } + servers = append(servers, addr) + } + err = luid.SetDNS(windows.AF_INET, servers, config.Search) _ = exec.CommandContext(context.Background(), "ipconfig", "/flushdns").Run() if err != nil { log.Warningln(err) @@ -70,7 +80,7 @@ func addNicSuffixSearchList(search []string) error { fmt.Sprintf("@(\"%s\", \"%s\", \"%s\")", search[0], search[1], search[2]), }...) output, err := cmd.CombinedOutput() - log.Info(cmd.Args) + log.Debugln(cmd.Args) if err != nil { log.Warnf("error while set dns suffix search list, err: %v, output: %s, command: %v", err, string(output), cmd.Args) } diff --git a/pkg/handler/connect.go b/pkg/handler/connect.go index 57e75c43..70ed887a 100644 --- a/pkg/handler/connect.go +++ b/pkg/handler/connect.go @@ -264,6 +264,7 @@ func (c *ConnectOptions) deleteFirewallRuleAndSetupDNS(ctx context.Context) { if !util.FindRule() { util.AddFirewallRule() } + RollbackFuncList = append(RollbackFuncList, util.DeleteFirewallRule) go util.DeleteWindowsFirewallRule(ctx) } go util.Heartbeats(ctx) diff --git a/pkg/tun/tun_windows.go b/pkg/tun/tun_windows.go index a5ec4fb2..3b47461d 100644 --- a/pkg/tun/tun_windows.go +++ b/pkg/tun/tun_windows.go @@ -3,6 +3,7 @@ package tun import ( "fmt" "net" + "net/netip" "os" "time" @@ -13,7 +14,7 @@ import ( ) func createTun(cfg Config) (net.Conn, *net.Interface, error) { - ip, ipNet, err := net.ParseCIDR(cfg.Addr) + ip, _, err := net.ParseCIDR(cfg.Addr) if err != nil { return nil, nil, err } @@ -28,7 +29,14 @@ func createTun(cfg Config) (net.Conn, *net.Interface, error) { _ = os.Setenv("luid", fmt.Sprintf("%d", tunDevice.(*wireguardtun.NativeTun).LUID())) luid := winipcfg.LUID(tunDevice.(*wireguardtun.NativeTun).LUID()) - if err = luid.AddIPAddress(net.IPNet{IP: ip, Mask: ipNet.Mask}); err != nil { + + var prefix netip.Prefix + prefix, err = netip.ParsePrefix(cfg.Addr) + if err != nil { + return nil, nil, err + } + + if err = luid.AddIPAddress(prefix); err != nil { return nil, nil, err } @@ -52,7 +60,16 @@ func addTunRoutes(ifName winipcfg.LUID, gw string, routes ...IPRoute) error { } else { route.Gateway = net.IPv4(0, 0, 0, 0) } - if err := ifName.AddRoute(*route.Dest, route.Gateway, 0); err != nil { + prefix, err := netip.ParsePrefix(route.Dest.String()) + if err != nil { + return err + } + var addr netip.Addr + addr, err = netip.ParseAddr(route.Gateway.String()) + if err != nil { + return err + } + if err = ifName.AddRoute(prefix, addr, 0); err != nil { return err } } diff --git a/pkg/util/getcidr_test.go b/pkg/util/getcidr_test.go index ffef75de..4bc931f6 100644 --- a/pkg/util/getcidr_test.go +++ b/pkg/util/getcidr_test.go @@ -1,10 +1,12 @@ package util import ( + "encoding/base64" "fmt" "testing" log "github.com/sirupsen/logrus" + "golang.org/x/text/encoding/simplifiedchinese" "k8s.io/cli-runtime/pkg/genericclioptions" "k8s.io/client-go/kubernetes" "k8s.io/client-go/rest" @@ -80,3 +82,28 @@ func TestCal(t *testing.T) { } println(sum) } + +func TestName222(t *testing.T) { + ss := `DQrDu9PQ0+vWuLaoserXvM/gxqXF5LXEuebU8qGjDQoNCg==` + out, err := base64.StdEncoding.DecodeString(ss) + if err != nil { + panic(err) + } + s := string(out) + var b []byte + b, err = simplifiedchinese.GB18030.NewDecoder().Bytes(out) + if err == nil { + s = string(b) + println(s) + } + b, err = simplifiedchinese.GBK.NewDecoder().Bytes(out) + if err == nil { + s = string(b) + println(s) + } + b, err = simplifiedchinese.HZGB2312.NewDecoder().Bytes(out) + if err == nil { + s = string(b) + } + println(string(s)) +} diff --git a/pkg/util/networkpolicy.go b/pkg/util/networkpolicy.go index 947d8310..6a697323 100644 --- a/pkg/util/networkpolicy.go +++ b/pkg/util/networkpolicy.go @@ -6,6 +6,8 @@ import ( "time" log "github.com/sirupsen/logrus" + "golang.org/x/text/encoding/simplifiedchinese" + "github.com/wencaiwulue/kubevpn/pkg/config" ) @@ -42,6 +44,19 @@ func AddFirewallRule() { } } +func DeleteFirewallRule() { + cmd := exec.Command("netsh", []string{ + "advfirewall", + "firewall", + "delete", + "rule", + "name=" + config.ConfigMapPodTrafficManager, + }...) + if out, err := cmd.CombinedOutput(); err != nil { + log.Errorf("error while exec command: %s, out: %s, err: %v", cmd.Args, string(out), err) + } +} + func FindRule() bool { cmd := exec.Command("netsh", []string{ "advfirewall", @@ -51,7 +66,17 @@ func FindRule() bool { "name=" + config.ConfigMapPodTrafficManager, }...) if out, err := cmd.CombinedOutput(); err != nil { - log.Infof("find route out: %s error: %v", string(out), err) + s := string(out) + var b []byte + b, err = simplifiedchinese.GB18030.NewDecoder().Bytes(out) + if err == nil { + s = string(b) + } + b, err = simplifiedchinese.GBK.NewDecoder().Bytes(out) + if err == nil { + s = string(b) + } + log.Debugf("find route out: %s", s) return false } else { return true