tailscale/ipn
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
..
ipnauth all: use named pipes on windows 2022-11-30 04:05:26 +05:00
ipnlocal net/interfaces: redo how we get the default interface on macOS and iOS 2023-02-15 10:44:05 -07:00
ipnserver ipn/ipnserver: propagate http.Serve error 2022-12-15 15:01:56 +00:00
ipnstate ipn/ipnstate: add PeerStatus.KeyExpiry for tailscale status --json 2023-01-23 12:45:09 -08:00
localapi cmd/tailscale/cli: add debug set-expire command for testing 2023-01-23 19:12:26 -08:00
policy ipn/policy: treat DNS service as interesting so it's not filtered out 2021-12-03 12:55:54 -08:00
store go.mod: bump AWS SDK past a breaking API change of theirs 2023-01-20 10:14:56 -08:00
backend.go cmd/tailscale/cli: redact private key in debug netmap output by default 2023-01-03 10:06:24 -08:00
doc.go ipn: add WebServerConfig, add views 2022-11-09 06:17:45 -08:00
fake_test.go ipn/ipnlocal: add support for multiple user profiles 2022-11-11 10:45:47 +05:00
ipn_clone.go ipn,types/persist: add DisallowedTKAStateIDs, refactor as view type 2022-11-29 12:29:42 -08:00
ipn_view.go ipn,types/persist: add DisallowedTKAStateIDs, refactor as view type 2022-11-29 12:29:42 -08:00
prefs.go ipn: update comments that refer to Options.Prefs 2022-12-02 11:55:54 -08:00
prefs_test.go ipn: add ability to name profiles 2022-11-22 04:03:24 +05:00
serve.go cmd/tailscale/cli, ipn/localapi: add funnel status to status command (#6402) 2022-12-07 22:17:40 -05:00
store.go cmd/tailscale/cli, ipn: move serve CLI funcs on to ServeConfig (#6401) 2022-11-19 09:42:14 -05:00