Mirror of tailscale/tailscale@github.com
Go to file
Andrew Dunham e107977f75 wgengine/magicsock: disable SIO_UDP_NETRESET on Windows
By default, Windows sets the SIO_UDP_CONNRESET and SIO_UDP_NETRESET
options on created UDP sockets. These behaviours make the UDP socket
ICMP-aware; when the system gets an ICMP message (e.g. an "ICMP Port
Unreachable" message, in the case of SIO_UDP_CONNRESET), it will cause
the underlying UDP socket to throw an error. Confusingly, this can occur
even on reads, if the same UDP socket is used to write a packet that
triggers this response.

The Go runtime disabled the SIO_UDP_CONNRESET behavior in 3114bd6, but
did not change SIO_UDP_NETRESET–probably because that socket option
isn't documented particularly well.

Various other networking code seem to disable this behaviour, such as
the Godot game engine (godotengine/godot#22332) and the Eclipse TCF
agent (link below). Others appear to work around this by ignoring the
error returned (anacrolix/dht#16, among others).

For now, until it's clear whether this ends up in the upstream Go
implementation or not, let's also disable the SIO_UDP_NETRESET in a
similar manner to SIO_UDP_CONNRESET.

Eclipse TCF agent: https://gitlab.eclipse.org/eclipse/tcf/tcf.agent/-/blob/master/agent/tcf/framework/mdep.c

Updates #10976
Updates golang/go#68614

Signed-off-by: Andrew Dunham <andrew@du.nham.ca>
Change-Id: I70a2f19855f8dec1bfb82e63f6d14fc4a22ed5c3
2024-08-15 12:11:33 -04:00
.bencher
.github
appc
atomicfile
chirp
client client/tailscale: add LocalClient.OmitAuth for tests 2024-08-12 15:16:22 -07:00
clientupdate
cmd go.{mod,sum}: migrate from nhooyr.io/websocket to github.com/coder/websocket 2024-08-14 21:23:49 -07:00
control go.{mod,sum}: migrate from nhooyr.io/websocket to github.com/coder/websocket 2024-08-14 21:23:49 -07:00
derp go.{mod,sum}: migrate from nhooyr.io/websocket to github.com/coder/websocket 2024-08-14 21:23:49 -07:00
disco
docs
doctor
drive
envknob
gokrazy gokrazy,tstest/integration/nat: add Gokrazy appliance just for natlab 2024-08-13 15:26:12 -07:00
health wgengine/magicsock: log when a ReceiveFunc fails 2024-08-14 10:34:55 -07:00
hostinfo
internal
ipn ipn/localapi: only flush relevant data in multiFilePostResponseWriter.Flush() 2024-08-14 12:28:40 -05:00
jsondb
k8s-operator cmd/k8s-operator,k8s-operator/sessionrecording: support recording kubectl exec sessions over WebSockets (#12947) 2024-08-14 17:57:50 +01:00
kube
licenses go.{mod,sum}: migrate from nhooyr.io/websocket to github.com/coder/websocket 2024-08-14 21:23:49 -07:00
log
logpolicy cmd/tta, vnet: add host firewall, env var support, more tests 2024-08-12 15:32:12 -07:00
logtail
metrics
net go.{mod,sum}: migrate from nhooyr.io/websocket to github.com/coder/websocket 2024-08-14 21:23:49 -07:00
omit
packages/deb
paths
portlist
posture
prober
proxymap
publicapi
release
safesocket
safeweb
scripts
sessionrecording
smallzstd
ssh/tailssh
syncs
tailcfg
taildrop
tempfork
tka
tool
tsconst cmd/tailscale/cli: support passing network lock keys via files 2024-08-14 09:18:34 -07:00
tsd
tsnet
tstest gokrazy,tstest/integration/nat: add Gokrazy appliance just for natlab 2024-08-13 15:26:12 -07:00
tstime
tsweb tsweb: fix TestStdHandler_ConnectionClosedDuringBody flake (#13046) 2024-08-12 16:30:32 +01:00
types
util fix #13076: codegen error when using anonymous struct 2024-08-13 23:41:39 -05:00
version
wf
wgengine wgengine/magicsock: disable SIO_UDP_NETRESET on Windows 2024-08-15 12:11:33 -04:00
words
.gitattributes
.gitignore
.golangci.yml
ALPINE.txt
AUTHORS
CODEOWNERS
CODE_OF_CONDUCT.md
Dockerfile go.{mod,sum}: migrate from nhooyr.io/websocket to github.com/coder/websocket 2024-08-14 21:23:49 -07:00
Dockerfile.base
LICENSE
Makefile
PATENTS
README.md
SECURITY.md
VERSION.txt
api.md
build_dist.sh
build_docker.sh
flake.lock
flake.nix go.mod.sri: update SRI hash for go.mod changes 2024-08-14 21:30:13 -07:00
go.mod go.{mod,sum}: migrate from nhooyr.io/websocket to github.com/coder/websocket 2024-08-14 21:23:49 -07:00
go.mod.sri go.mod.sri: update SRI hash for go.mod changes 2024-08-14 21:30:13 -07:00
go.sum go.{mod,sum}: migrate from nhooyr.io/websocket to github.com/coder/websocket 2024-08-14 21:23:49 -07:00
go.toolchain.branch
go.toolchain.rev
gomod_test.go
header.txt
pkgdoc_test.go
pull-toolchain.sh
shell.nix go.mod.sri: update SRI hash for go.mod changes 2024-08-14 21:30:13 -07:00
staticcheck.conf
update-flake.sh
version-embed.go
version_test.go

README.md

Tailscale

https://tailscale.com

Private WireGuard® networks made easy

Overview

This repository contains the majority of Tailscale's open source code. Notably, it includes the tailscaled daemon and the tailscale CLI tool. The tailscaled daemon runs on Linux, Windows, macOS, and to varying degrees on FreeBSD and OpenBSD. The Tailscale iOS and Android apps use this repo's code, but this repo doesn't contain the mobile GUI code.

Other Tailscale repos of note:

For background on which parts of Tailscale are open source and why, see https://tailscale.com/opensource/.

Using

We serve packages for a variety of distros and platforms at https://pkgs.tailscale.com.

Other clients

The macOS, iOS, and Windows clients use the code in this repository but additionally include small GUI wrappers. The GUI wrappers on non-open source platforms are themselves not open source.

Building

We always require the latest Go release, currently Go 1.22. (While we build releases with our Go fork, its use is not required.)

go install tailscale.com/cmd/tailscale{,d}

If you're packaging Tailscale for distribution, use build_dist.sh instead, to burn commit IDs and version info into the binaries:

./build_dist.sh tailscale.com/cmd/tailscale
./build_dist.sh tailscale.com/cmd/tailscaled

If your distro has conventions that preclude the use of build_dist.sh, please do the equivalent of what it does in your distro's way, so that bug reports contain useful version information.

Bugs

Please file any issues about this code or the hosted service on the issue tracker.

Contributing

PRs welcome! But please file bugs. Commit messages should reference bugs.

We require Developer Certificate of Origin Signed-off-by lines in commits.

See git log for our commit message style. It's basically the same as Go's style.

About Us

Tailscale is primarily developed by the people at https://github.com/orgs/tailscale/people. For other contributors, see:

WireGuard is a registered trademark of Jason A. Donenfeld.