summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
-rw-r--r--cmd/tailscale/cli/status.go18
-rw-r--r--cmd/tailscale/cli/up.go12
2 files changed, 23 insertions, 7 deletions
diff --git a/cmd/tailscale/cli/status.go b/cmd/tailscale/cli/status.go
index 8997a187a..851b0c2bd 100644
--- a/cmd/tailscale/cli/status.go
+++ b/cmd/tailscale/cli/status.go
@@ -53,12 +53,7 @@ var statusArgs struct {
peers bool // in CLI mode, show status of peer machines
}
-func runStatus(ctx context.Context, args []string) error {
- c, bc, ctx, cancel := connect(ctx)
- defer cancel()
-
- bc.AllowVersionSkew = true
-
+func getStatusFromServer(ctx context.Context, c net.Conn, bc *ipn.BackendClient) func() (*ipnstate.Status, error) {
ch := make(chan *ipnstate.Status, 1)
bc.SetNotifyCallback(func(n ipn.Notify) {
if n.ErrMessage != nil {
@@ -80,7 +75,7 @@ func runStatus(ctx context.Context, args []string) error {
})
go pump(ctx, bc, c)
- getStatus := func() (*ipnstate.Status, error) {
+ return func() (*ipnstate.Status, error) {
bc.RequestStatus()
select {
case st := <-ch:
@@ -89,6 +84,15 @@ func runStatus(ctx context.Context, args []string) error {
return nil, ctx.Err()
}
}
+}
+
+func runStatus(ctx context.Context, args []string) error {
+ c, bc, ctx, cancel := connect(ctx)
+ defer cancel()
+
+ bc.AllowVersionSkew = true
+
+ getStatus := getStatusFromServer(ctx, c, bc)
st, err := getStatus()
if err != nil {
return err
diff --git a/cmd/tailscale/cli/up.go b/cmd/tailscale/cli/up.go
index 3f0081425..5994434ed 100644
--- a/cmd/tailscale/cli/up.go
+++ b/cmd/tailscale/cli/up.go
@@ -249,6 +249,18 @@ func runUp(ctx context.Context, args []string) error {
c, bc, ctx, cancel := connect(ctx)
defer cancel()
+ if !prefs.ExitNodeIP.IsZero() {
+ st, err := getStatusFromServer(ctx, c, bc)()
+ if err != nil {
+ fatalf("can't fetch status from tailscaled: %v", err)
+ }
+ for _, ip := range st.TailscaleIPs {
+ if prefs.ExitNodeIP == ip {
+ fatalf("cannot use %s as the exit node as it is a local IP address to this machine, did you mean --advertise-exit-node?", ip)
+ }
+ }
+ }
+
var printed bool
var loginOnce sync.Once
startLoginInteractive := func() { loginOnce.Do(func() { bc.StartLoginInteractive() }) }