mirror of
https://github.com/openziti/desktop-edge-win.git
synced 2026-10-13 16:21:25 +00:00
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:
@@ -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)
|
||||
}
|
||||
}
|
||||
@@ -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
|
||||
|
||||
@@ -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 {
|
||||
|
||||
Reference in New Issue
Block a user