Brad Fitzpatrick
37903a9056
wgengine/magicsock: fix occasional deadlock on Conn.Close on c.derpStarted
...
The deadlock was:
* Conn.Close was called, which acquired c.mu
* Then this goroutine scheduled:
if firstDerp {
startGate = c.derpStarted
go func() {
dc.Connect(ctx)
close(c.derpStarted)
}()
}
* The getRegion hook for that derphttp.Client then ran, which also
tries to acquire c.mu.
This change makes that hook first see if we're already in a closing
state and then it can pretend that region doesn't exist.
2020-07-27 12:27:10 -07:00
Brad Fitzpatrick
38b0c3eea2
version: new week, new version
2020-07-27 10:20:58 -07:00
Brad Fitzpatrick
43e2efe441
go mod tidy
2020-07-27 10:20:30 -07:00
Brad Fitzpatrick
fe68841dc7
wgengine/magicsock: log better with less spam on transition to stopped state
...
Required a minor test update too, which now needs a private key to get far
enough to test the thing being tested.
2020-07-27 10:19:17 -07:00
Brad Fitzpatrick
69f3ceeb7c
derp/derphttp: don't return all nil from dialRegion when STUNOnly nodes
2020-07-27 10:10:10 -07:00
Brad Fitzpatrick
e298327ba8
wgengine/magicsock: remove overkill, slow reflect.DeepEqual of NetworkMap
...
No need to allocate or compare all the fields we don't care about.
2020-07-25 19:37:08 -07:00
Brad Fitzpatrick
be3ca5cbfd
control/controlclient: remove unused, slow, often-not-what-you-want NetworkMap.Equal
2020-07-25 19:36:39 -07:00
Brad Fitzpatrick
4970e771ab
wgengine: add debug knob to disable the watchdog during debugging
...
It launches goroutines and interferes with panic-based debugging,
obscuring stacks.
2020-07-25 12:59:53 -07:00
Brad Fitzpatrick and Brad Fitzpatrick
16a9cfe2f4
wgengine: configure wireguard peers lazily, as needed
...
wireguard-go uses 3 goroutines per peer (with reasonably large stacks
& buffers).
Rather than tell wireguard-go about all our peers, only tell it about
peers we're actively communicating with. That means we need hooks into
magicsock's packet receiving path and tstun's packet sending path to
lazily create a wireguard peer on demand from the network map.
This frees up lots of memory for iOS (where we have almost nothing
left for larger domains with many users).
We should ideally do this in wireguard-go itself one day, but that'd
be a pretty big change.
Signed-off-by: Brad Fitzpatrick <bradfitz@tailscale.com >
2020-07-24 12:50:15 -07:00
Brad Fitzpatrick
5066b824a6
wgengine/magicsock: don't log about disco ping timeouts if we have a working address
...
Signed-off-by: Brad Fitzpatrick <bradfitz@tailscale.com >
2020-07-24 11:21:50 -07:00
Brad Fitzpatrick
648268192b
go.mod: bump wireguard-go
2020-07-24 08:54:17 -07:00
Brad Fitzpatrick
a89d610a3d
wgengine/tstun: move sync.Pool to package global
...
sync.Pools should almost always be packate globals, even though in this
case we only have exactly 1 TUN device anyway, so it matters less.
Still, it's unusual to see a Pool that's not a package global, so move it.
2020-07-24 08:29:36 -07:00
Brad Fitzpatrick
05a79d79ae
control/controlclient: rewrite, test NetworkMap.ConciseDiffFrom
...
It stood out a lot in hello.ipn.dev's profiles for generating a lot of
garbage (and thus GC CPU).
2020-07-23 10:50:06 -07:00
Brad Fitzpatrick
48fc9026e9
tailcfg: optimize Node.Equal allocs a bit
...
Noticed while working on something else.
2020-07-23 10:47:49 -07:00
Brad Fitzpatrick
3b0514ef6d
control/controlclient: rename uflags, give it a type, remove dead code
2020-07-23 08:38:14 -07:00
Brad Fitzpatrick
32ecdea157
control/controlclient: generate wireguard config w/o WgQuick text indirection
2020-07-23 08:30:09 -07:00
Brad Fitzpatrick
2545575dd5
cmd/tailscale: default to not reporting daemon version
...
That's what I meant to do when I added "tailscale version" but
apparently I didn't.
2020-07-22 14:05:51 -07:00
Brad Fitzpatrick
de11f90d9d
ipn: remove unused parameter to func LoadPrefs, fix godoc subject
2020-07-22 10:35:35 -07:00
Brad Fitzpatrick
f26b409bd5
tempfork: add lite fork of net/http/pprof w/o html/template or reflect
2020-07-21 16:17:03 -07:00
Brad Fitzpatrick and Brad Fitzpatrick
6095a9b423
cmd/tailscale: add "version" subcommand
...
Fixes #448
Signed-off-by: Brad Fitzpatrick <bradfitz@tailscale.com >
2020-07-21 12:23:33 -07:00
Brad Fitzpatrick
f745e1c058
version: new week, new version
2020-07-20 20:55:47 -07:00
Brad Fitzpatrick and Brad Fitzpatrick
ca2428ecaf
tailcfg: add Hostinfo.OSVersion, DeviceModel
...
Signed-off-by: Brad Fitzpatrick <bradfitz@tailscale.com >
2020-07-20 16:10:06 -07:00
Brad Fitzpatrick
d8e67ca2ab
safesocket: gofmt
...
gofmt differences between versions :(
2020-07-20 14:40:19 -07:00
Brad Fitzpatrick
f562c35c0d
safesocket: support connecting to Mac TCP server from within App Sandbox
2020-07-20 14:23:50 -07:00
Brad Fitzpatrick
f267a7396f
metrics: add LabelMap.GetFloat
2020-07-19 12:31:12 -07:00
Brad Fitzpatrick
c06d2a8513
wgengine/magicsock: fix typo in comment
2020-07-18 13:57:26 -07:00
Brad Fitzpatrick
bf195cd3d8
wgengine/magicsock: reduce log verbosity of discovery messages
...
Don't log heartbeat pings & pongs. Track the reason for pings and then
only log the ping/pong traffic if it was for initial path discovery.
2020-07-18 13:54:00 -07:00
Brad Fitzpatrick
7cf50f6c84
go.sum: update
2020-07-18 13:43:11 -07:00
Brad Fitzpatrick
52969bdfb0
derp: fix atomic padding on 32-bit again
...
Broken by earlier OnlyDisco addition.
2020-07-16 13:38:21 -07:00
Brad Fitzpatrick
a6559a8924
wgengine/magicsock: run test DERP in mode where only disco packets allowed
...
So we don't accidentally pass a NAT traversal test by having DERP pick up our slack
when we really just wanted DERP as an OOB messaging channel.
2020-07-16 12:58:35 -07:00
Brad Fitzpatrick and Brad Fitzpatrick
75e1cc1dd5
github/workflows: add go vet ./... step
2020-07-16 09:15:09 -07:00
Brad Fitzpatrick
10ac066013
all: fix vet warnings
2020-07-16 08:39:38 -07:00
Brad Fitzpatrick and Brad Fitzpatrick
d74c9aa95b
wgengine/magicsock: update comment, fix earlier commit
...
https://github.com/tailscale/tailscale/commit/891898525c12630b0f896cb9142ff5274e07afc2 had a continue that meant the didCopy synchronization never ran.
Signed-off-by: Brad Fitzpatrick <bradfitz@tailscale.com >
2020-07-16 08:29:38 -07:00
Brad Fitzpatrick
c976264bd1
wgengine/magicsock: gofmt
2020-07-16 08:15:27 -07:00
Brad Fitzpatrick and Brad Fitzpatrick
1f923124bf
ipn/ipnserver: support simultaneous connections
...
Signed-off-by: Brad Fitzpatrick <bradfitz@tailscale.com >
2020-07-15 21:39:09 -07:00
Brad Fitzpatrick
a2267aae99
wgengine: only launch pingers for peers predating the discovery protocol
...
Peers advertising a discovery key know how to speak the discovery
protocol and do their own heartbeats to get through NATs and keep NATs
open. No need for the pinger except for with legacy peers.
2020-07-15 21:08:26 -07:00
Brad Fitzpatrick
cdfea347d0
wgengine: update for tailscale/wireguard-go API changes
...
* update to new HandshakeDone signature
* use new Device.IpcGetOperationFiltered call to avoid sending allowed_ips
See https://github.com/tailscale/wireguard-go/commit/dd6c1c8fe14c1af4fc8ef599ff99c302e289b553
2020-07-15 20:30:45 -07:00
Brad Fitzpatrick
44baa3463f
cmd/tailscale/cli: add initial predicate func ActLikeCLI
2020-07-15 18:56:07 -07:00
Brad Fitzpatrick
723b9eecb0
net/interfaces: set SysProcAttr.HideWindow to prevent cmd.exe flash on Windows
2020-07-15 12:43:48 -07:00
Brad Fitzpatrick
df674d4189
atomicfile: don't Chmod on windows
...
Not supported.
2020-07-15 12:31:40 -07:00
Brad Fitzpatrick
7ba148e54e
cmd/tailscale: make tailscale status -active also filter in -json mode
2020-07-15 09:28:37 -07:00
Brad Fitzpatrick
60f4982f9b
cmd/tailscale: move code into new reusable cmd/tailscale/cli package
...
cmd/tailscale's package main is now just a few lines.
This'll let us embed the CLI in the Mac and Windows clients.
Updates #541
2020-07-15 07:58:29 -07:00
Brad Fitzpatrick and Brad Fitzpatrick
bcbd41102c
atomicfile: use ioutil.TempFile, sync
...
Signed-off-by: Brad Fitzpatrick <bradfitz@tailscale.com >
2020-07-14 21:58:06 -07:00
Brad Fitzpatrick
969206fe88
version: new week, new date
2020-07-13 11:52:03 -07:00
Brad Fitzpatrick
e589c76e98
cmd/tailscaled: don't require --socket path on windows
2020-07-13 11:30:46 -07:00
Brad Fitzpatrick
c1d9e41bef
cmd/tailscaled: use "Tailscale" as default TUN device name on Windows
...
That's what's used in the Windows GUI version and seems special. If we don't use
that, Windows tries to rename it and fails.
2020-07-13 09:23:57 -07:00
Brad Fitzpatrick
f98706bdb3
paths, cmd/tailscaled: on Windows, don't try to migrate from legacy relay.conf
...
Avoids confusing logspam on Windows.
2020-07-13 08:59:54 -07:00
Brad Fitzpatrick
6255ce55df
Revert "version: don't have a third version number form for xcode"
...
This reverts commit 5280d039c4 .
Turns out to not be possible. The semver form and the human readable
form both must of form x.y.z.
2020-07-12 14:45:06 -07:00
Brad Fitzpatrick
6c74065053
wgengine/magicsock, tstest/natlab: start hooking up natlab to magicsock
...
Also adds ephemeral port support to natlab.
Work in progress.
Pairing with @danderson.
2020-07-10 14:32:58 -07:00
Brad Fitzpatrick
edcbb5394e
go.sum: update
2020-07-10 14:31:29 -07:00
Brad Fitzpatrick and Brad Fitzpatrick
7815633821
github: also run 32-bit tests on Linux
...
Signed-off-by: Brad Fitzpatrick <bradfitz@tailscale.com >
2020-07-10 08:43:12 -07:00
Brad Fitzpatrick
98ffd78251
go.mod: bump wireguard-go dep
2020-07-09 21:46:44 -07:00
Brad Fitzpatrick
dba9b96908
version: remove quoting around version name
...
I added them earlier while fighting our redo+xcode build which wasn't
picking up these files on incremental builds. It still isn't, but now I've
verified with full builds that no quotes is correct.
2020-07-09 14:38:23 -07:00
Brad Fitzpatrick
96994ec431
control/controlclient: fix a couple more data races
2020-07-09 11:42:43 -07:00
Brad Fitzpatrick
0551bec95b
cmd/tailscale: add -active flag to 'tailscale status' to filter out inactive peers
2020-07-09 10:38:18 -07:00
Brad Fitzpatrick
96d806789f
ipn: add Notify.LocalTCPPort field for macOS Network Extension to use
...
We want the macOS Network Extension to share fate with the UI frontend,
so we need the backend to know when the frontend disappears.
One easy way to do that is to reuse the existing TCP server it's
already running (for tailscale status clietns).
We now tell the frontend our ephemeral TCP port number, and then have
the UI connect to it, so the backend can know when it disappears.
There are likely Swift ways of doing this, but I couldn't find them
quickly enough, so I reached for the hammer I knew.
2020-07-09 09:11:23 -07:00
Brad Fitzpatrick
bd59bba8e6
wgengine/magicsock: stop discoEndpoint timers on Close
...
And add some defensive early returns on c.closed.
2020-07-08 16:51:17 -07:00
Brad Fitzpatrick
a8b95571fb
ipn, control/controlclient: fix some data races
...
More remain.
Fixes tailscale/corp#432
2020-07-08 16:51:17 -07:00
Brad Fitzpatrick
de875a4d87
wgengine/magicsock: remove DisableSTUNForTesting
2020-07-08 15:50:41 -07:00
Brad Fitzpatrick
ecf5d69c7c
net/netcheck: add missing comment asked for in earlier code review
2020-07-08 15:26:56 -07:00
Brad Fitzpatrick
3984f9be2f
ipn, ipn/ipnserver: add support for serving in error-message-only mode
...
So Windows service failures can be propagated to the Windows UI client.
2020-07-08 14:20:01 -07:00
Brad Fitzpatrick and Brad Fitzpatrick
5280d039c4
version: don't have a third version number form for xcode
...
Our primary version format is git describe --long --abbrev=9.
Our Apple scheme is:
(major+100).minor.(patch*10,000+gitDescribeCommits).
This CL gets rid of the third, which was:
major.minor.(patch*10,000+gitDescribeCommits).
Now the "About" box in the macOS app shows the same version that we
show on pkgs.tailscale.com, userz, changelog, etc.
This will be more important once/if we get standalone DMG downloads
for macOS on pkgs.tailscale.com.
Fixes tailscale/corp#364
2020-07-07 21:49:58 -07:00
Brad Fitzpatrick
0d481030f3
tailcfg: use ? for portmap summary to match netcheck
2020-07-07 18:54:50 -07:00
Brad Fitzpatrick
ce1b52bb71
wgengine/monitor: fix other potential crashes on Linux
...
Never return "nil, nil" anymore. The caller expected a usable
interface now. I missed some of these earlier.
Also, handle address deletion now.
Updates #532
2020-07-07 11:08:16 -07:00
Brad Fitzpatrick
4b75a27969
wgengine/monitor: fix crash on Linux on type 21 messages
...
Fixes #532
2020-07-07 10:45:25 -07:00
Brad Fitzpatrick
c1cabe75dc
derp: fix server struct fielfd alignment on 32-bit
...
Mostly so the GitHub CI will pass on 32-bit.
2020-07-07 09:08:15 -07:00
Brad Fitzpatrick
724ad13fe1
wgengine/tstun: fix alignment of 64-bit atomic field
...
We had a test for it, but no 32-bit builder apparently. :(
Fixes #529
2020-07-07 08:28:40 -07:00
Brad Fitzpatrick and Brad Fitzpatrick
4db60a8436
wgengine/monitor: parse Linux netlink messages, ignore our own events
...
Fixes tailscale/corp#412 ("flood of link change events at start-up")
Signed-off-by: Brad Fitzpatrick <bradfitz@tailscale.com >
2020-07-06 22:42:01 -07:00
Brad Fitzpatrick
742b8b44a8
net/tsaddr: new package to hold Tailscale-specific IPs/ranges
...
And update existing callers with (near) duplicated cases.
2020-07-06 22:33:29 -07:00
Brad Fitzpatrick and Brad Fitzpatrick
5c6d8e3053
netcheck, tailcfg, interfaces, magicsock: survey UPnP, NAT-PMP, PCP
...
Don't do anything with UPnP, NAT-PMP, PCP yet, but see how common they
are in the wild.
Signed-off-by: Brad Fitzpatrick <bradfitz@tailscale.com >
2020-07-06 15:25:35 -07:00
Brad Fitzpatrick
6196b7e658
wgengine/magicsock: change API to not permit disco key changes
...
Generate the disco key ourselves and give out the public half instead.
Fixes #525
2020-07-06 12:10:39 -07:00
Brad Fitzpatrick
32156330a8
net/interfaces: add func LikelyHomeRouterIP
...
For discovering where we might direct NAT-PMP/PCP/UPnP queries at in
the future.
2020-07-06 10:38:00 -07:00
Brad Fitzpatrick
c3c607e78a
util/lineread: add little package to read lines from files/Readers
2020-07-06 10:34:33 -07:00
Brad Fitzpatrick
cf74e9039e
net/netcheck: add an informative payload in the netcheck UDP helper packets
...
Per comment from @normanr:
https://github.com/tailscale/tailscale/commit/0a5ab533c1b8853774587a471ab9c8a0949b1eac#r40401954
Updates #188
2020-07-06 09:55:11 -07:00
Brad Fitzpatrick
0a5ab533c1
net/netcheck: send dummy packet out to help airport extreme in hairpin check
...
At least the Apple Airport Extreme doesn't allow hairpin
sends from a private socket until it's seen traffic from
that src IP:port to something else out on the internet.
See https://github.com/tailscale/tailscale/issues/188#issuecomment-600728643
And it seems that even sending to a likely-filtered RFC 5737
documentation-only IPv4 range is enough to set up the mapping.
So do that for now. In the future we might want to classify networks
that do and don't require this separately. But for now help it.
I've confirmed that this is enough to fix the hairpin check on Avery's
home network, even using the RFC 5737 IP.
Fixes #188
2020-07-06 08:24:22 -07:00
Brad Fitzpatrick
b9a95e6ce1
go.sum: add missing lines
2020-07-06 08:23:44 -07:00
Brad Fitzpatrick and Brad Fitzpatrick
0fc15dcbd5
version: explicitly use 9 hex digits in git describe version number
...
So it doesn't vary based on who's doing the release with which version
of git.
Fixes tailscale/corp#419
2020-07-03 22:28:45 -07:00
Brad Fitzpatrick
5132edacf7
wgengine/magicsock: fix data race from undocumented wireguard-go requirement
...
Endpoints need to be Stringers apparently.
Fixes tailscale/corp#422
2020-07-03 22:27:52 -07:00
Brad Fitzpatrick
9fbe8d7cf2
go.mod: bump wireguard
2020-07-03 14:09:29 -07:00
Brad Fitzpatrick
c9089c82e8
control/controlclient, tailcfg: turn active route discovery on by default
...
Updates #483
2020-07-03 13:55:33 -07:00
Brad Fitzpatrick
3f74859bb0
version: new month, new date string
2020-07-03 13:47:09 -07:00
Brad Fitzpatrick
630379a1d0
cmd/tailscale: add tailscale status region name, last write, consistently star
...
There's a lot of confusion around what tailscale status shows, so make it better:
show region names, last write time, and put stars around DERP too if active.
Now stars are always present if activity, and always somewhere.
2020-07-03 13:44:22 -07:00
Brad Fitzpatrick
0ea51872c9
types/logger: add rateFreePrefix rate-limiting-exempt log format prefixes
...
Per conversation with @danderson.
2020-07-03 13:09:32 -07:00
Brad Fitzpatrick
9a8700b02a
wgengine/magicsock: add discoEndpoint heartbeat
...
Updates #483
2020-07-03 12:43:39 -07:00
Brad Fitzpatrick
9f930ef2bf
wgengine/magicsock: remove the discoEndpoint.timers map
...
It ended up being more complicated than it was worth.
2020-07-03 11:45:41 -07:00
Brad Fitzpatrick
f5f3885b5b
wgengine/magicsock: bunch of misc discovery path cleanups
...
* fix tailscale status for peers using discovery
* as part of that, pull out disco address selection into reusable
and testable discoEndpoint.addrForSendLocked
* truncate ping/pong logged hex txids in half to eliminate noise
* move a bunch of random time constants into named constants
with docs
* track a history of per-endpoint pong replies for future use &
status display
* add "send" and " got" prefix to discovery message logging
immediately before the frame type so it's easier to read than
searching for the "<-" or "->" arrows earlier in the line; but keep
those as the more reasily machine readable part for later.
Updates #483
2020-07-03 11:26:22 -07:00
Brad Fitzpatrick
7883e5c5e7
go.mod: restore staticcheck module, make it stick around, go mod tidy
...
It kept coming & going as different people ran go mod tidy and others
ran staticcheck.
Make it stop going away with go mod tidy by adding a dep to it.
2020-07-02 22:55:14 -07:00
Brad Fitzpatrick
6c70cf7222
wgengine/magicsock: stop ping timeout timer on pong receipt, misc log cleanup
...
Updates #483
2020-07-02 22:54:57 -07:00
Brad Fitzpatrick
97910ce712
tstest/natlab: remove unused PacketConner type
2020-07-02 14:50:04 -07:00
Brad Fitzpatrick
14b4213c17
tstest/natlab: add missing tests from earlier commits
...
Now you can actually see that packet delivery works.
Pairing with @danderson
2020-07-02 14:19:43 -07:00
Brad Fitzpatrick
3f4f1cfe66
tstest/natlab: basic NAT-free packet delivery works
...
Pairing with @danderson
2020-07-02 14:18:36 -07:00
Brad Fitzpatrick
a477e70632
tstest/natlab: network address allocation
...
Pairing with @danderson
2020-07-02 13:39:41 -07:00
Brad Fitzpatrick
bb1a9e4700
tstest/natlab: bit more of in-memory network testing package
...
Pairing with @danderson
2020-07-02 13:02:13 -07:00
Brad Fitzpatrick
23c93da942
tstest/natlab: start of in-memory network testing package
...
Pairing with @danderson
2020-07-02 12:36:12 -07:00
Brad Fitzpatrick
c52905abaa
wgengine/magicsock: log less on no-op disco route switches
...
Also, renew trustBestAddrUntil even if latency isn't better.
2020-07-02 11:39:05 -07:00
Brad Fitzpatrick
847b6f039b
disco: simplify expression, appease staticcheck
...
Was:
disco/disco.go:164:10: unnecessary use of fmt.Sprintf (S1039)
2020-07-02 10:52:23 -07:00
Brad Fitzpatrick
57e8931160
control/controlclient: fix copy/paste-o in debug knob accessor
...
Introduced in a975e86bb8 .
Only affected TS_DEBUG_* env users.
2020-07-02 10:51:23 -07:00
Brad Fitzpatrick
0f0ed3dca0
wgengine/magicsock: clean up discovery logging
...
Updates #483
2020-07-02 10:48:13 -07:00
Brad Fitzpatrick
056fbee4ef
wgengine/magicsock: add TS_DEBUG_OMIT_LOCAL_ADDRS knob to force STUN use only
...
For debugging.
2020-07-02 09:53:10 -07:00
Brad Fitzpatrick
6233fd7ac3
control/controlclient: don't truncate AuthURL in log
...
It's useful to copy/paste directly from there, without using tailscale up.
If it's truncated for some specific reason, it doesn't say why.
2020-07-02 09:45:08 -07:00