summaryrefslogtreecommitdiffhomepage
path: root/cmd
diff options
context:
space:
mode:
authorMaisem Ali <maisem@tailscale.com>2021-06-16 08:53:08 -0700
committerDavid Crawshaw <david@zentus.com>2021-06-29 09:22:10 -0700
commitec52760a3d76be445cdc061cfbecc3540bbf8507 (patch)
tree67c30a1d130f71666d3723129b13b7639ab98fa0 /cmd
parentc37713b9273988db72ee7de5556ccc97e3110152 (diff)
downloadtailscale-ec52760a3d76be445cdc061cfbecc3540bbf8507.tar.xz
tailscale-ec52760a3d76be445cdc061cfbecc3540bbf8507.zip
wgengine/router_windows: support toggling local lan access when using
exit nodes. Signed-off-by: Maisem Ali <maisem@tailscale.com>
Diffstat (limited to 'cmd')
-rw-r--r--cmd/tailscaled/tailscaled_windows.go32
1 files changed, 18 insertions, 14 deletions
diff --git a/cmd/tailscaled/tailscaled_windows.go b/cmd/tailscaled/tailscaled_windows.go
index b52853ebe..277c4987d 100644
--- a/cmd/tailscaled/tailscaled_windows.go
+++ b/cmd/tailscaled/tailscaled_windows.go
@@ -19,6 +19,7 @@ package main // import "tailscale.com/cmd/tailscaled"
import (
"context"
+ "encoding/json"
"fmt"
"log"
"os"
@@ -27,6 +28,7 @@ import (
"golang.org/x/sys/windows"
"golang.org/x/sys/windows/svc"
"golang.zx2c4.com/wireguard/windows/tunnel/winipcfg"
+ "inet.af/netaddr"
"tailscale.com/ipn/ipnserver"
"tailscale.com/logpolicy"
"tailscale.com/net/dns"
@@ -126,16 +128,6 @@ func beFirewallKillswitch() bool {
log.SetFlags(0)
log.Printf("killswitch subprocess starting, tailscale GUID is %s", os.Args[2])
- go func() {
- b := make([]byte, 16)
- for {
- _, err := os.Stdin.Read(b)
- if err != nil {
- log.Fatalf("parent process died or requested exit, exiting (%v)", err)
- }
- }
- }()
-
guid, err := windows.GUIDFromString(os.Args[2])
if err != nil {
log.Fatalf("invalid GUID %q: %v", os.Args[2], err)
@@ -147,13 +139,25 @@ func beFirewallKillswitch() bool {
}
start := time.Now()
- if _, err := wf.New(uint64(luid)); err != nil {
- log.Fatalf("filewall creation failed: %v", err)
+ fw, err := wf.New(uint64(luid))
+ if err != nil {
+ log.Fatalf("failed to enable firewall: %v", err)
}
log.Printf("killswitch enabled, took %s", time.Since(start))
- // Block until the monitor goroutine shuts us down.
- select {}
+ // Note(maisem): when local lan access toggled, tailscaled needs to
+ // inform the firewall to let local routes through. The set of routes
+ // is passed in via stdin encoded in json.
+ dcd := json.NewDecoder(os.Stdin)
+ for {
+ var routes []netaddr.IPPrefix
+ if err := dcd.Decode(&routes); err != nil {
+ log.Fatalf("parent process died or requested exit, exiting (%v)", err)
+ }
+ if err := fw.UpdatePermittedRoutes(routes); err != nil {
+ log.Fatalf("failed to update routes (%v)", err)
+ }
+ }
}
func startIPNServer(ctx context.Context, logid string) error {