rework dns addition to take all existing dns into account so if the service fails the network won't end up looking like it's broken

This commit is contained in:
dovholuknf
2020-06-18 16:14:46 -04:00
parent 30bae671b9
commit 778fc592b9
3 changed files with 77 additions and 5 deletions
+1 -1
View File
@@ -263,6 +263,6 @@ func AddIntercept(svcId string, service string, host string, port uint16, ctx *C
for _, t := range devMap {
log.Debug("adding intercept for: %s, %s, %d", service, host, port)
res := C.ziti_tunneler_intercept_v1(t.tunCtx, unsafe.Pointer(ctx.nf), C.CString(svcId), C.CString(service), C.CString(host), C.int(port))
log.Debug("intercept added", res)
log.Debugf("intercept added", res)
}
}
+74 -3
View File
@@ -19,18 +19,18 @@ package windns
import (
"bytes"
"fmt"
"github.com/michaelquigley/pfxlog"
"net"
"os"
"os/exec"
"strings"
"github.com/michaelquigley/pfxlog"
)
var log = pfxlog.Logger()
func ResetDNS() {
log.Infof("skipping ResetDNS for now")
log.Infof("resetting dns...")
log.Info("restoring dns to original-ish state")
@@ -77,14 +77,85 @@ func GetUpstreamDNS() []string {
}
func ReplaceDNS(ips []net.IP) {
/*
ifaces, err := net.Interfaces()
if err != nil {
fmt.Print(fmt.Errorf("localAddresses: %+v\n", err.Error()))
return
}
for _, i := range ifaces {
addrs, err := i.Addrs()
if err != nil {
fmt.Print(fmt.Errorf("localAddresses: %+v\n", err.Error()))
continue
}
for _, a := range addrs {
switch v := a.(type) {
case *net.IPAddr:
fmt.Printf("%v : %s (%s)\n", i.Name, v, v.IP.DefaultMask())
case *net.IPNet:
fmt.Printf("%v : %s [%v/%v]\n", i.Name, v, v.IP, v.Mask)
}
}
}
var names []string
for _, i := range ips {
names = append(names, i.String())
}
addresses := strings.Join(names, ",")
*/
/*
script := fmt.Sprintf(
`Get-NetIPInterface | ForEach-Object { Set-DnsClientServerAddress -InterfaceIndex $_.ifIndex -ServerAddresses %s }`,
addresses)
*/
script := `$dnsinfo=Get-DnsClientServerAddress
# see https://docs.microsoft.com/en-us/dotnet/api/system.net.sockets.addressfamily
$IPv4=2
$IPv6=23
$dnsUpdates = @{}
foreach ($dns in $dnsinfo)
{
if($dnsUpdates[$dns.InterfaceIndex] -eq $null) { $dnsUpdates[$dns.InterfaceIndex]=[System.Collections.ArrayList]@() }
if($dns.AddressFamily -eq $IPv6) {
$dnsServers=$dns.ServerAddresses
$ArrList=[System.Collections.ArrayList]@($dnsServers)
if(($dnsServers -ne $null) -and ($dnsServers.Contains("::1")) ) {
echo ($dns.InterfaceAlias + " IPv6 already contains ::1")
} else {
$ArrList.Insert(0,"::1")
}
$dnsUpdates[$dns.InterfaceIndex].AddRange($ArrList)
}
elseif($dns.AddressFamily -eq $IPv4){
$dnsServers=$dns.ServerAddresses
$ArrList=[System.Collections.ArrayList]@($dnsServers)
if(($dnsServers -ne $null) -and ($dnsServers.Contains("127.0.0.1")) ) {
echo ($dns.InterfaceAlias + " IPv4 already contains 127.0.0.1")
} else {
$ArrList.Insert(0,"127.0.0.1")
}
$dnsUpdates[$dns.InterfaceIndex].AddRange($ArrList)
}
}
foreach ($key in $dnsUpdates.Keys)
{
$dnsServers=$dnsUpdates[$key]
Set-DnsClientServerAddress -InterfaceIndex $key -ServerAddresses ($dnsServers)
}`
cmd := exec.Command("powershell", "-Command", script)
cmd.Stderr = os.Stderr
cmd.Stdout = os.Stdout
+2 -1
View File
@@ -681,6 +681,7 @@ func disconnectIdentity(id *dto.Identity) error {
id.Active = false
if id.Connected {
log.Debugf("ranging over services all services to remove intercept and deregister the service")
for _, s := range id.Services {
cziti.RemoveIntercept(s.Id)
cziti.DNS.DeregisterService(id.NFContext, s.Name)
@@ -777,7 +778,7 @@ func acceptServices() {
Fingerprint: id.FingerPrint,
Service: svc,
}
log.Debug(" dispatched added service change event")
log.Debug("dispatched added service change event")
case cziti.REMOVED:
for idx, svc := range id.Services {
if svc.Name == c.Service.Name {