mirror of
				https://github.com/kubenetworks/kubevpn.git
				synced 2025-10-31 10:46:35 +08:00 
			
		
		
		
	
		
			
				
	
	
		
			79 lines
		
	
	
		
			2.0 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
			
		
		
	
	
			79 lines
		
	
	
		
			2.0 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
| //go:build windows
 | |
| // +build windows
 | |
| 
 | |
| package dns
 | |
| 
 | |
| import (
 | |
| 	"context"
 | |
| 	"fmt"
 | |
| 	"net"
 | |
| 	"os"
 | |
| 	"os/exec"
 | |
| 	"strconv"
 | |
| 
 | |
| 	miekgdns "github.com/miekg/dns"
 | |
| 	log "github.com/sirupsen/logrus"
 | |
| 	"golang.org/x/sys/windows"
 | |
| 	"golang.zx2c4.com/wireguard/windows/tunnel/winipcfg"
 | |
| )
 | |
| 
 | |
| func SetupDNS(config *miekgdns.ClientConfig, _ []string) error {
 | |
| 	getenv := os.Getenv("luid")
 | |
| 	parseUint, err := strconv.ParseUint(getenv, 10, 64)
 | |
| 	if err != nil {
 | |
| 		log.Warningln(err)
 | |
| 		return err
 | |
| 	}
 | |
| 	luid := winipcfg.LUID(parseUint)
 | |
| 	err = luid.SetDNS(windows.AF_INET, []net.IP{net.ParseIP(config.Servers[0])}, config.Search)
 | |
| 	_ = exec.CommandContext(context.Background(), "ipconfig", "/flushdns").Run()
 | |
| 	if err != nil {
 | |
| 		log.Warningln(err)
 | |
| 		return err
 | |
| 	}
 | |
| 	//_ = updateNicMetric(tunName)
 | |
| 	_ = addNicSuffixSearchList(config.Search)
 | |
| 	return nil
 | |
| }
 | |
| 
 | |
| func CancelDNS() {
 | |
| 	getenv := os.Getenv("luid")
 | |
| 	parseUint, err := strconv.ParseUint(getenv, 10, 64)
 | |
| 	if err != nil {
 | |
| 		log.Warningln(err)
 | |
| 		return
 | |
| 	}
 | |
| 	luid := winipcfg.LUID(parseUint)
 | |
| 	_ = luid.FlushDNS(windows.AF_INET)
 | |
| }
 | |
| 
 | |
| func updateNicMetric(name string) error {
 | |
| 	cmd := exec.Command("PowerShell", []string{
 | |
| 		"Set-NetIPInterface",
 | |
| 		"-InterfaceAlias",
 | |
| 		fmt.Sprintf("\"%s\"", name),
 | |
| 		"-InterfaceMetric",
 | |
| 		"1",
 | |
| 	}...)
 | |
| 	out, err := cmd.CombinedOutput()
 | |
| 	if err != nil {
 | |
| 		log.Warnf("error while update nic metrics, error: %v, output: %s, command: %v", err, string(out), cmd.Args)
 | |
| 	}
 | |
| 	return err
 | |
| }
 | |
| 
 | |
| // @see https://docs.microsoft.com/en-us/powershell/module/dnsclient/set-dnsclientglobalsetting?view=windowsserver2019-ps#example-1--set-the-dns-suffix-search-list
 | |
| func addNicSuffixSearchList(search []string) error {
 | |
| 	cmd := exec.Command("PowerShell", []string{
 | |
| 		"Set-DnsClientGlobalSetting",
 | |
| 		"-SuffixSearchList",
 | |
| 		fmt.Sprintf("@(\"%s\", \"%s\", \"%s\")", search[0], search[1], search[2]),
 | |
| 	}...)
 | |
| 	output, err := cmd.CombinedOutput()
 | |
| 	log.Info(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)
 | |
| 	}
 | |
| 	return err
 | |
| }
 | 
