diff options
author | Jason A. Donenfeld <Jason@zx2c4.com> | 2019-03-01 05:31:13 +0100 |
---|---|---|
committer | Jason A. Donenfeld <Jason@zx2c4.com> | 2019-03-01 05:39:30 +0100 |
commit | aa20bd0fb005fcd2b1a96410761288ebab4dc3d8 (patch) | |
tree | a532506d65604463bcb24b34e85b146a36bb409b /service/service_tunnel.go | |
parent | tunnel: set dns (diff) | |
download | wireguard-windows-aa20bd0fb005fcd2b1a96410761288ebab4dc3d8.tar.xz wireguard-windows-aa20bd0fb005fcd2b1a96410761288ebab4dc3d8.zip |
tunnel: set low metric instead of split default
Signed-off-by: Jason A. Donenfeld <Jason@zx2c4.com>
Diffstat (limited to 'service/service_tunnel.go')
-rw-r--r-- | service/service_tunnel.go | 35 |
1 files changed, 31 insertions, 4 deletions
diff --git a/service/service_tunnel.go b/service/service_tunnel.go index 5dae5d50..72fb7ca0 100644 --- a/service/service_tunnel.go +++ b/service/service_tunnel.go @@ -201,17 +201,21 @@ func (service *tunnelService) Execute(args []string, r <-chan svc.ChangeRequest, Mask: ipnet.Mask, }, NextHop: gateway, - Metric: 1, + Metric: 0, } routeCount++ } + foundDefault := false for _, peer := range conf.Peers { for _, allowedip := range peer.AllowedIPs { routes[routeCount] = winipcfg.RouteData{ Destination: allowedip.IPNet(), NextHop: *firstGateway, - Metric: 1, + Metric: 0, + } + if allowedip.Cidr == 0 { + foundDefault = true } routeCount++ } @@ -222,7 +226,7 @@ func (service *tunnelService) Execute(args []string, r <-chan svc.ChangeRequest, err = iface.FlushRoutes() if err == nil { for _, route := range routes { - err = iface.AddRoute(&route, true) + err = iface.AddRoute(&route, false) //TODO: Ignoring duplicate errors like this maybe isn't very reasonable. // instead we should make sure we're not adding duplicates ourselves when @@ -242,8 +246,31 @@ func (service *tunnelService) Execute(args []string, r <-chan svc.ChangeRequest, if err == nil { err = iface.SetDNS(conf.Interface.Dns) } + if err == nil { + ipif, err := iface.GetIpInterface(winipcfg.AF_INET) + if err == nil { + if foundDefault { + ipif.UseAutomaticMetric = false + ipif.Metric = 0 + } + err = ipif.Set() + } + } + if err == nil { + ipif, err := iface.GetIpInterface(winipcfg.AF_INET6) + if err == nil { + if foundDefault { + ipif.UseAutomaticMetric = false + ipif.Metric = 0 + } + ipif.DadTransmits = 0 + ipif.RouterDiscoveryBehavior = winipcfg.RouterDiscoveryDisabled + ipif.LinkLocalAddressBehavior = winipcfg.LinkLocalAlwaysOff + err = ipif.Set() + } + } if err != nil { - logger.Error.Println("Unable to set interface addresses, routes, or DNSes:", err) + logger.Error.Println("Unable to set interface addresses, routes, DNS, or IP settings:", err) changes <- svc.Status{State: svc.StopPending} exitCode = ERROR_NETWORK_BUSY device.Close() |