summaryrefslogtreecommitdiffhomepage
path: root/cmd/tinyderpclient
diff options
context:
space:
mode:
authorBrad Fitzpatrick <bradfitz@tailscale.com>2025-06-19 10:29:32 -0700
committerBrad Fitzpatrick <bradfitz@tailscale.com>2025-06-19 10:29:32 -0700
commitf6a1b149df3ff08408a0ad0b2d41f2a7a85200cd (patch)
tree0a899dc30b1410b249a0da526f21545f72a8f9ae /cmd/tinyderpclient
parent583f740c0b583081b0c1a39f92e349c49c0c4a41 (diff)
downloadtailscale-bradfitz/tinyderpclient.tar.xz
tailscale-bradfitz/tinyderpclient.zip
Change-Id: Idcc360abdcc723fcf5ccef9d539056c68b7aa2b2 Signed-off-by: Brad Fitzpatrick <bradfitz@tailscale.com>
Diffstat (limited to 'cmd/tinyderpclient')
-rw-r--r--cmd/tinyderpclient/tinyderpclient.go39
1 files changed, 39 insertions, 0 deletions
diff --git a/cmd/tinyderpclient/tinyderpclient.go b/cmd/tinyderpclient/tinyderpclient.go
new file mode 100644
index 000000000..746a216ff
--- /dev/null
+++ b/cmd/tinyderpclient/tinyderpclient.go
@@ -0,0 +1,39 @@
+package main
+
+import (
+ "context"
+ "encoding/json"
+ "log"
+ "maps"
+ "net/http"
+ "slices"
+
+ "tailscale.com/derp/derphttp"
+ "tailscale.com/net/netmon"
+ "tailscale.com/tailcfg"
+ "tailscale.com/types/key"
+)
+
+func main() {
+ dm := &tailcfg.DERPMap{}
+ res, err := http.Get("https://controlplane.tailscale.com/derpmap/default")
+ if err != nil {
+ log.Fatalf("fetching DERPMap: %v", err)
+ }
+ defer res.Body.Close()
+ if err := json.NewDecoder(res.Body).Decode(dm); err != nil {
+ log.Fatalf("decoding DERPMap: %v", err)
+ }
+
+ region := slices.Sorted(maps.Keys(dm.Regions))[0]
+
+ netMon := netmon.NewStatic()
+ rc := derphttp.NewRegionClient(key.NewNode(), log.Printf, netMon, func() *tailcfg.DERPRegion {
+ return dm.Regions[region]
+ })
+ defer rc.Close()
+
+ if err := rc.Connect(context.Background()); err != nil {
+ log.Fatalf("rc.Connect: %v", err)
+ }
+}