tailscale/ipn/ipnlocal
Mihai Parparita 6842c3c194 net/interfaces: redo how we get the default interface on macOS and iOS
With #6566 we added an external mechanism for getting the default
interface, and used it on macOS and iOS (see tailscale/corp#8201).
The goal was to be able to get the default physical interface even when
using an exit node (in which case the routing table would say that the
Tailscale utun* interface is the default).

However, the external mechanism turns out to be unreliable in some
cases, e.g. when multiple cellular interfaces are present/toggled (I
have occasionally gotten my phone into a state where it reports the pdp_ip1
interface as the default, even though it can't actually route traffic).

It was observed that `ifconfig -v` on macOS reports an "effective interface"
for the Tailscale utn* interface, which seems promising. By examining
the ifconfig source code, it turns out that this is done via a
SIOCGIFDELEGATE ioctl syscall. Though this is a private API, it appears
to have been around for a long time (e.g. it's in the 10.13 xnu release
at https://opensource.apple.com/source/xnu/xnu-4570.41.2/bsd/net/if_types.h.auto.html)
and thus is unlikely to go away.

We can thus use this ioctl if the routing table says that a utun*
interface is the default, and go back to the simpler mechanism that
we had before #6566.

Updates #7184
Updates #7188

Signed-off-by: Mihai Parparita <mihai@tailscale.com>
(cherry picked from commit fa932fefe7)
2023-02-15 10:44:05 -07:00
..
c2n.go envknob, hostinfo, ipn/ipnlocal: add start of opt-in remote update support 2023-01-23 12:12:42 -08:00
cert.go ipn/{ipnlocal,localapi}: move most of cert.go to ipnlocal 2022-11-07 21:50:04 -08:00
cert_js.go ipn/ipnlocal, wgengine/netstack: start handling ports for future serving 2022-11-08 19:39:07 -08:00
cert_test.go ipn/{ipnlocal,localapi}: move most of cert.go to ipnlocal 2022-11-07 21:50:04 -08:00
dnsconfig_test.go ipn/ipnlocal: use ipn.PrefsView 2022-10-24 15:57:00 -07:00
expiry.go ipn/ipnlocal: handle more edge cases in netmap expiry timer 2023-02-08 15:59:07 -05:00
expiry_test.go ipn/ipnlocal: handle more edge cases in netmap expiry timer 2023-02-08 15:59:07 -05:00
local.go net/interfaces: redo how we get the default interface on macOS and iOS 2023-02-15 10:44:05 -07:00
local_test.go ipn/{ipnlocal,localapi}: ensure watcher is installed before /watch-ipn-bus/ responds with 200 2023-01-17 22:59:39 +00:00
loglines_test.go ipn/ipnlocal: add support for multiple user profiles 2022-11-11 10:45:47 +05:00
network-lock.go health,ipn/ipnlocal: report the node being locked out as a health issue 2023-01-04 16:20:47 -08:00
network-lock_test.go cmd/tailscale,tka: make KeyID return an error instead of panicking 2023-01-04 09:51:31 -08:00
peerapi.go ipn/ipnlocal: disallow unsigned peers from WoL 2023-01-10 15:54:48 -08:00
peerapi_h2c.go all: remove old +build tags 2022-11-04 07:25:42 -07:00
peerapi_macios_ext.go all: remove old +build tags 2022-11-04 07:25:42 -07:00
peerapi_test.go ipn/ipnlocal: improve redactErr to handle more cases 2022-12-06 19:37:15 -05:00
profiles.go ipn/ipnlocal: use presence of NodeID to identify logins 2023-02-07 09:11:28 -08:00
profiles_test.go ipn/ipnlocal: use presence of NodeID to identify logins 2023-02-07 09:11:28 -08:00
serve.go ipn/ipnlocal: [serve] listen on all-interfaces for macOS sandboxed (#6771) 2023-01-20 13:40:56 -05:00
serve_test.go ipn/ipnlocal: support serving files/directories too 2022-11-10 18:09:35 -08:00
ssh.go ssh/tailssh: add OpenBSD support for Tailscale SSH 2023-01-09 12:58:15 -08:00
ssh_stub.go ssh/tailssh: add OpenBSD support for Tailscale SSH 2023-01-09 12:58:15 -08:00
ssh_test.go ipn/ipnlocal: add support for multiple user profiles 2022-11-11 10:45:47 +05:00
state_test.go ipn/ipnlocal: use presence of NodeID to identify logins 2023-02-07 09:11:28 -08:00