summaryrefslogtreecommitdiffhomepage
path: root/control
AgeCommit message (Collapse)AuthorFilesLines
2021-07-26control/controlclient: report whether we're in a snap packageBrad Fitzpatrick1-0/+7
Signed-off-by: Brad Fitzpatrick <bradfitz@tailscale.com>
2021-07-22control/controlclient: grow goroutine debug buffer as neededBrad Fitzpatrick1-2/+11
To not allocate 1MB up front on iOS. Signed-off-by: Brad Fitzpatrick <bradfitz@tailscale.com>
2021-07-22control/controlclient: don't use regexp in goroutine stack scrubbingBrad Fitzpatrick2-9/+72
To reduce binary size on iOS. Updates tailscale/corp#2238 Signed-off-by: Brad Fitzpatrick <bradfitz@tailscale.com>
2021-07-15control/{controlknobs,controlclient}: simplify knobs API, fix controlclient ↵Brad Fitzpatrick2-17/+10
crash From integration tests elsewhere: panic: runtime error: invalid memory address or nil pointer dereference [signal SIGSEGV: segmentation violation code=0x1 addr=0x70 pc=0x845c9b] goroutine 226 [running]: tailscale.com/control/controlclient.(*Direct).sendMapRequest(0xc00053e1e0, 0x16670f0, 0xc000353780, 0xffffffffffffffff, 0xc0003e5f10, 0x0, 0x0) /home/runner/go/pkg/mod/tailscale.com@v1.1.1-0.20210715222212-1bb6abc604c1/control/controlclient/direct.go:803 +0x19bb tailscale.com/control/controlclient.(*Direct).PollNetMap(...) /home/runner/go/pkg/mod/tailscale.com@v1.1.1-0.20210715222212-1bb6abc604c1/control/controlclient/direct.go:574 tailscale.com/control/controlclient.(*Auto).mapRoutine(0xc00052a1e0) /home/runner/go/pkg/mod/tailscale.com@v1.1.1-0.20210715222212-1bb6abc604c1/control/controlclient/auto.go:464 +0x571 created by tailscale.com/control/controlclient.(*Auto).Start /home/runner/go/pkg/mod/tailscale.com@v1.1.1-0.20210715222212-1bb6abc604c1/control/controlclient/auto.go:151 +0x65 exit status 2 Also remove types/opt.Bool API addition which is now unnecessary. Signed-off-by: Brad Fitzpatrick <bradfitz@tailscale.com>
2021-07-15net/portmapper: add upnp port mappingjulianknodt2-1/+46
Add in UPnP portmapping, using goupnp library in order to get the UPnP client and run the portmapping functions. This rips out anywhere where UPnP used to be in portmapping, and has a flow separate from PMP and PCP. RELNOTE=portmapper now supports UPnP mappings Fixes #682 Updates #2109 Signed-off-by: julianknodt <julianknodt@gmail.com>
2021-06-28control/controlclient: add debug knob to force node to only IPv6 self addrBrad Fitzpatrick1-1/+20
Updates #2268 Signed-off-by: Brad Fitzpatrick <bradfitz@tailscale.com>
2021-06-28controlclient: log server key and URLDavid Crawshaw1-0/+1
Turns out we never reliably log the control plane URL a client connects to. Do it here, and include the server public key, which might inadvertently tell us something interesting some day. Signed-off-by: David Crawshaw <crawshaw@tailscale.com>
2021-06-17hostinfo: add hostinfo package, move stuff out of controlclientBrad Fitzpatrick1-70/+4
And make it cheaper, so other parts of the code can check the environment. Signed-off-by: Brad Fitzpatrick <bradfitz@tailscale.com>
2021-06-16control/controlclient: fix typo/braino in error messageBrad Fitzpatrick1-1/+1
Thanks to @normanr for noticing. Signed-off-by: Brad Fitzpatrick <bradfitz@tailscale.com>
2021-06-15tailcfg, control/controlclient: clarify more, enforce PingRequest.URL is uniqueBrad Fitzpatrick1-1/+19
Updates #2079 Signed-off-by: Brad Fitzpatrick <bradfitz@tailscale.com>
2021-06-14hostinfo: capitalization of AWSDenton Gentry1-2/+2
Missed one comment from https://github.com/tailscale/tailscale/pull/1868 should be isAWSLambda not isAwsLambda Signed-off-by: Denton Gentry <dgentry@tailscale.com>
2021-06-14hostinfo: detect when running in Azure App Service.Denton Gentry1-0/+12
Signed-off-by: Denton Gentry <dgentry@tailscale.com>
2021-06-14hostinfo: detect Heroku Dyno.Denton Gentry1-0/+10
Signed-off-by: Denton Gentry <dgentry@tailscale.com>
2021-06-14hostinfo: detect AWS Lambda as a container.Denton Gentry1-0/+14
AWS Lambda uses Docker containers but does not have the string "docker" in its /proc/1/cgroup. Infer AWS Lambda via the environment variables it sets. Signed-off-by: Denton Gentry <dgentry@tailscale.com>
2021-06-08control/controlclient: add Pinger interface, Options.PingerSimeng He1-0/+15
Plumbs down a pinger to the direct to enable client to client Ping functionality from control. Signed-off-by: Simeng He <simeng@tailscale.com>
2021-06-07ipn/{ipnlocal,localapi}, control/controlclient: add SetDNS localapiBrad Fitzpatrick3-0/+56
Updates #1235 Signed-off-by: Brad Fitzpatrick <bradfitz@tailscale.com>
2021-05-31ipnlocal: don't assume NeedsLogin immediately after StartLogout().Avery Pennarun3-14/+20
Previously, there was no server round trip required to log out, so when you asked ipnlocal to Logout(), it could clear the netmap immediately and switch to NeedsLogin state. In v1.8, we added a true Logout operation. ipn.Logout() would trigger an async cc.StartLogout() and *also* immediately switch to NeedsLogin. Unfortunately, some frontends would see NeedsLogin and immediately trigger a new StartInteractiveLogin() operation, before the controlclient auth state machine actually acted on the Logout command, thus accidentally invalidating the entire logout operation, retaining the netmap, and violating the user's expectations. Instead, add a new LogoutFinished signal from controlclient (paralleling LoginFinished) and, upon starting a logout, don't update the ipn state machine until it's received. Updates: #1918 (BUG-2) Signed-off-by: Avery Pennarun <apenwarr@tailscale.com>
2021-05-28control/controlclient: use our fork of certstoreAdrian Dewhurst1-1/+1
The cyolosecurity fork of certstore did not update its module name and thus can only be used with a replace directive. This interferes with installing using `go install` so I created a tailscale fork with an updated module name. Signed-off-by: Adrian Dewhurst <adrian@tailscale.com>
2021-05-16all: adapt to opaque netaddr typesJosh Bleecher Snyder2-4/+4
This commit is a mishmash of automated edits using gofmt: gofmt -r 'netaddr.IPPort{IP: a, Port: b} -> netaddr.IPPortFrom(a, b)' -w . gofmt -r 'netaddr.IPPrefix{IP: a, Port: b} -> netaddr.IPPrefixFrom(a, b)' -w . gofmt -r 'a.IP.Is4 -> a.IP().Is4' -w . gofmt -r 'a.IP.As16 -> a.IP().As16' -w . gofmt -r 'a.IP.Is6 -> a.IP().Is6' -w . gofmt -r 'a.IP.As4 -> a.IP().As4' -w . gofmt -r 'a.IP.String -> a.IP().String' -w . And regexps: \w*(.*)\.Port = (.*) -> $1 = $1.WithPort($2) \w*(.*)\.IP = (.*) -> $1 = $1.WithIP($2) And lots of manual fixups. Signed-off-by: Josh Bleecher Snyder <josh@tailscale.com>
2021-05-12controlclient: update Persist.LoginName when it changes.Avery Pennarun1-2/+2
Well, that was anticlimactic. Fixes tailscale/corp#461. Signed-off-by: Avery Pennarun <apenwarr@tailscale.com>
2021-04-30ipnlocal: don't pause the controlclient until we get at least one netmap.apenwarr/statefixAvery Pennarun1-1/+2
Without this, macOS would fail to display its menu state correctly if you started it while !WantRunning. It relies on the netmap in order to show the logged-in username. Signed-off-by: Avery Pennarun <apenwarr@tailscale.com>
2021-04-30controlclient: extract a Client interface and rename Client->Auto.Avery Pennarun5-53/+134
This will let us create a mock or fake Client implementation for use with ipn.Backend. Signed-off-by: Avery Pennarun <apenwarr@tailscale.com>
2021-04-29controlclient: extract State and Status stuff into its own file.Avery Pennarun2-73/+88
No changes other than moving stuff around. Signed-off-by: Avery Pennarun <apenwarr@tailscale.com>
2021-04-22control/controlclient: fix signRegisterRequest log suppression check on WindowsBrad Fitzpatrick1-1/+1
Fixes #1774 Signed-off-by: Brad Fitzpatrick <bradfitz@tailscale.com>
2021-04-21control/controlclient, tailcfg: add Debug.SleepSeconds (mapver 19)Brad Fitzpatrick1-4/+41
Signed-off-by: Brad Fitzpatrick <bradfitz@tailscale.com>
2021-04-21ipn/ipnlocal: on fresh lazy-connecting install, start in state NeedsLoginBrad Fitzpatrick1-0/+3
Fixes #1759 Signed-off-by: Brad Fitzpatrick <bradfitz@tailscale.com>
2021-04-19tailcfg, control/controlclient: accept nil MapResponse.Node (mapver 18)Brad Fitzpatrick3-12/+57
All MapResponse fields can not be omitted and are tagged "omitempty". Signed-off-by: Brad Fitzpatrick <bradfitz@tailscale.com>
2021-04-19tailcfg, control/controlclient: allow empty MapResponse.Domain (mapver17)Brad Fitzpatrick2-1/+25
Signed-off-by: Brad Fitzpatrick <bradfitz@tailscale.com>
2021-04-18control/controlclient: add start of some MapResponse->NetworkMap testsBrad Fitzpatrick3-7/+99
Signed-off-by: Brad Fitzpatrick <bradfitz@tailscale.com>
2021-04-18control/controlclient: break direct.go into map.go (+tests), add mapSessionBrad Fitzpatrick5-388/+461
So the NetworkMap-from-incremental-MapResponses can be tested easily. And because direct.go was getting too big. No change in behavior at this point. Just movement. Signed-off-by: Brad Fitzpatrick <bradfitz@tailscale.com>
2021-04-16ipn/ipnlocal, etc: require file sharing capability to send/recv filesBrad Fitzpatrick1-0/+5
tailscale/corp#1582 Signed-off-by: Brad Fitzpatrick <bradfitz@tailscale.com>
2021-04-15tailcfg, control/controlclient: (mapver 16) add Node.Online, ↵Brad Fitzpatrick2-41/+123
MapResponse.OnlineChange And fix PeerSeenChange bug where it was ignored unless there were other peer changes. Updates tailscale/corp#1574 Signed-off-by: Brad Fitzpatrick <bradfitz@tailscale.com>
2021-04-15control/controlclient: only use a single DNS label as the hostname.David Anderson1-0/+2
Fixes #971 Signed-off-by: David Anderson <danderson@tailscale.com>
2021-04-13tailcfg: add Endpoint, EndpointType, MapRequest.EndpointTypeBrad Fitzpatrick3-21/+41
Track endpoints internally with a new tailcfg.Endpoint type that includes a typed netaddr.IPPort (instead of just a string) and includes a type for how that endpoint was discovered (STUN, local, etc). Use []tailcfg.Endpoint instead of []string internally. At the last second, send it to the control server as the existing []string for endpoints, but also include a new parallel MapRequest.EndpointType []tailcfg.EndpointType, so the control server can start filtering out less-important endpoint changes from new-enough clients. Notably, STUN-discovered endpoints can be filtered out from 1.6+ clients, as they can discover them amongst each other via CallMeMaybe disco exchanges started over DERP. And STUN endpoints change a lot, causing a lot of MapResposne updates. But portmapped endpoints are worth keeping for now, as they they work right away without requiring the firewall traversal extra RTT dance. End result will be less control->client bandwidth. (despite negligible increase in client->control bandwidth) Updates tailscale/corp#1543 Signed-off-by: Brad Fitzpatrick <bradfitz@tailscale.com>
2021-04-12tailcfg, control/controlclient: make nil MapResponse.DNSConfig mean ↵Brad Fitzpatrick1-1/+5
unchanged (mapver15) Signed-off-by: Brad Fitzpatrick <bradfitz@tailscale.com>
2021-04-10control/controlclient: create tls client config with server hostname instead ↵Simon Kirillov1-1/+1
of serverURL.Host Signed-off-by: Simon Kirillov <svkirillov3@gmail.com>
2021-04-09ipn/{ipnlocal,localapi}, cmd/tailscale: add logout commandBrad Fitzpatrick2-31/+95
Signed-off-by: Brad Fitzpatrick <bradfitz@tailscale.com>
2021-04-07control/controlclient: refactor some internalsBrad Fitzpatrick1-22/+30
Signed-off-by: Brad Fitzpatrick <bradfitz@tailscale.com>
2021-04-07control/controlclient: return correct certificateAdrian Dewhurst1-20/+41
When searching for the matching client identity, the returned certificate chain was accidentally set to that of the last identity returned by the certificate store instead of the one corresponding to the selected identity. Also, add some extra error checking for invalid certificate chains, just in case. Signed-off-by: Adrian Dewhurst <adrian@tailscale.com>
2021-04-06hostifo: update LXC, add Cloud Run.Denton Gentry1-0/+20
Recent LXC support no longer has "lxc" in /proc/1/cgroup: # cat /proc/1/cgroup 12:freezer:/ 11:rdma:/ 10:cpuset:/ 9:pids:/ 8:blkio:/ 7:devices:/ 6:perf_event:/ 5:net_cls,net_prio:/ 4:memory:/ 3:hugetlb:/ 2:cpu,cpuacct:/ 1:name=systemd:/init.scope 0::/init.scope Look for fuse.lxcfs in /proc.mounts in addition: # grep lxc /proc/mounts lxcfs /proc/cpuinfo fuse.lxcfs ... lxcfs /proc/diskstats fuse.lxcfs ... lxcfs /proc/loadavg fuse.lxcfs ... lxcfs /proc/meminfo fuse.lxcfs ... lxcfs /proc/stat fuse.lxcfs ... lxcfs /proc/swaps fuse.lxcfs ... lxcfs /proc/uptime fuse.lxcfs ... lxcfs /sys/devices/system/cpu/online fuse.lxcfs ... Add Knative detection by looking for the environment variables which are part of its container contract. Signed-off-by: Denton Gentry <dgentry@tailscale.com>
2021-03-31cmd/tailscale, ipn/localapi: move IP forwarding check to tailscaled, APIBrad Fitzpatrick1-1/+14
Instead of having the CLI check whether IP forwarding is enabled, ask tailscaled. It has a better idea. If it's netstack, for instance, the sysctl values don't matter. And it's possible that only the daemon has permission to know. Fixes #1626 Signed-off-by: Brad Fitzpatrick <bradfitz@tailscale.com>
2021-03-31control/controlclient: support lazy machine key generationBrad Fitzpatrick2-32/+50
It's not done in the caller yet, but the controlclient does it now. Updates #1573 Signed-off-by: Brad Fitzpatrick <bradfitz@tailscale.com>
2021-03-31control/controlclient: document a few thingsBrad Fitzpatrick2-3/+14
Signed-off-by: Brad Fitzpatrick <bradfitz@tailscale.com>
2021-03-29control/controlclient: fix TS_DEBUG_MAP on requestsBrad Fitzpatrick1-1/+1
The concrete type being encoded changed from a value to pointer earlier and this was never adjusted. (People don't frequently use TS_DEBUG_MAP to see requests, so it went unnoticed until now.) Signed-off-by: Brad Fitzpatrick <bradfitz@tailscale.com>
2021-03-26control/controlclient: sign RegisterRequest (#1549)Adrian Dewhurst4-0/+224
control/controlclient: sign RegisterRequest Some customers wish to verify eligibility for devices to join their tailnets using machine identity certificates. TLS client certs could potentially fulfill this role but the initial customer for this feature has technical requirements that prevent their use. Instead, the certificate is loaded from the Windows local machine certificate store and uses its RSA public key to sign the RegisterRequest message. There is room to improve the flexibility of this feature in future and it is currently only tested on Windows (although Darwin theoretically works too), but this offers a reasonable starting place for now. Updates tailscale/coral#6 Signed-off-by: Adrian Dewhurst <adrian@tailscale.com>
2021-03-19control, ipn, tailcfg: remove golang.org/x/oauth2 dep, add tailcfg.Oauth2TokenBrad Fitzpatrick2-10/+8
golang.org/x/oauth2 pulls in App Engine and grpc module dependencies, screwing up builds that depend on this module. Some background on the problem: https://go.googlesource.com/proposal/+/master/design/36460-lazy-module-loading.md Fixes tailscale/corp#1471 Signed-off-by: Brad Fitzpatrick <bradfitz@tailscale.com>
2021-03-18control/controlclient: remove redundant Hostinfo logBrad Fitzpatrick1-1/+0
The direct client already logs it in JSON form. Then it's immediately logged again in an unformatted dump, so this removes that unformatted one. Signed-off-by: Brad Fitzpatrick <bradfitz@tailscale.com>
2021-03-16health, ipn/ipnlocal: track, log overall healthBrad Fitzpatrick1-2/+5
Updates #1505 Signed-off-by: Brad Fitzpatrick <bradfitz@tailscale.com>
2021-03-15control/controlclient: cache Windows versionBrad Fitzpatrick1-0/+9
To atone for 1d7f9d5b4a59b3e, the revert of 4224b3f73110f6f. At least it's fast again, even if it's shelling out to cmd.exe (once now). Updates #1478 Signed-off-by: Brad Fitzpatrick <bradfitz@tailscale.com>
2021-03-15Revert "control/controlclient: use API to get Windows version number"Brad Fitzpatrick2-33/+15
This reverts commit 4224b3f73110f6f0c6268eb1ae943bc24cf89baf. From https://github.com/tailscale/tailscale/pull/1494#discussion_r594852889 ... > Actually, I want all four numbers back. I spent the evening > debugging an issue for a user running an old version of Windows > and then going to to > https://en.wikipedia.org/wiki/Windows_10_version_history_(version_1809) > and reading all the revision notes in the footnotes of that wikipedia > page. > > I'm going to revert this for now for Tailscale 1.6. We can land it > again later when we figure out how to get the fourth numbers. Updates #1478