You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
tailscale/wgengine/magicsock
James Tucker 8d1249550a net/netcheck,wgengine/magicsock: add potential workaround for Palo Alto DIPP misbehavior
Palo Alto firewalls have a typically hard NAT, but also have a mode
called Persistent DIPP that is supposed to provide consistent port
mapping suitable for STUN resolution of public ports. Persistent DIPP
works initially on most Palo Alto firewalls, but some models/software
versions have a bug which this works around.

The bug symptom presents as follows:

- STUN sessions resolve a consistent public IP:port to start with
- Much later netchecks report the same IP:Port for a subset of
  sessions, most often the users active DERP, and/or the port related
  to sustained traffic.
- The broader set of DERPs in a full netcheck will now consistently
  observe a new IP:Port.
- After this point of observation, new inbound connections will only
  succeed to the new IP:Port observed, and existing/old sessions will
  only work to the old binding.

In this patch we now advertise the lowest latency global endpoint
discovered as we always have, but in addition any global endpoints that
are observed more than once in a single netcheck report. This should
provide viable endpoints for potential connection establishment across
a NAT with this behavior.

Updates tailscale/corp#19106

Signed-off-by: James Tucker <james@tailscale.com>
2 years ago
..
batching_conn.go wgengine/magicsock: improve don't fragment bit set/get support 2 years ago
blockforever_conn.go wgengine/magicsock: improve don't fragment bit set/get support 2 years ago
debughttp.go all: remove LenIter, use Go 1.22 range-over-int instead 2 years ago
debugknobs.go all: cleanup unused code, part 2 (#10670) 2 years ago
debugknobs_stubs.go wgengine/magicsock: replace CanPMTUD() with ShouldPMTUD() 2 years ago
derp.go health, wgengine/magicsock: remove last of health package globals 2 years ago
derp_test.go net/netcheck,wgengine/magicsock: align DERP frame receive time heuristics 2 years ago
discopingpurpose_string.go wgengine/magicsock: implement probing of UDP path lifetime (#10844) 2 years ago
endpoint.go wgengine/magicsock: prefer link-local addresses to private ones 2 years ago
endpoint_default.go all: adjust some build tags for plan9 2 years ago
endpoint_stub.go all: adjust some build tags for plan9 2 years ago
endpoint_test.go wgengine/magicsock: implement probing of UDP path lifetime (#10844) 2 years ago
endpoint_tracker.go wgengine/magicsock: only cache N most recent endpoints per-Addr 2 years ago
endpoint_tracker_test.go all: use Go 1.22 range-over-int 2 years ago
magicsock.go net/netcheck,wgengine/magicsock: add potential workaround for Palo Alto DIPP misbehavior 2 years ago
magicsock_default.go wgengine/magicsock: delete unused stuff 2 years ago
magicsock_linux.go wgengine/magicsock: simplify tryEnableUDPOffload() (#9872) 2 years ago
magicsock_test.go net/netcheck, wgengine/magicsock: make netmon.Monitor required 2 years ago
magicsock_unix_test.go all: update copyright and license headers 3 years ago
peermap.go wgengine/magicsock: allow disco communication without known endpoints 2 years ago
peermtu.go magicsock: mute noisy expected peer mtu related error (#10870) 2 years ago
peermtu_darwin.go wgengine/magicsock: improve don't fragment bit set/get support 2 years ago
peermtu_linux.go wgengine/magicsock: improve don't fragment bit set/get support 2 years ago
peermtu_stubs.go magicsock: mute noisy expected peer mtu related error (#10870) 2 years ago
peermtu_unix.go wgengine/magicsock: replace CanPMTUD() with ShouldPMTUD() 2 years ago
rebinding_conn.go wgengine/magicsock: improve don't fragment bit set/get support 2 years ago