From 404dd026243b963051dda8f126002e7783541b25 Mon Sep 17 00:00:00 2001 From: Brad Fitzpatrick Date: Mon, 4 Nov 2024 07:56:09 -0800 Subject: [PATCH] cmd/lopower: flesh out README Change-Id: Iece542369f4124a3e7e46653211b081bce601a29 Signed-off-by: Brad Fitzpatrick --- cmd/lopower/README.md | 13 +++++++++++++ cmd/lopower/lopower.svg | 1 + 2 files changed, 14 insertions(+) create mode 100644 cmd/lopower/lopower.svg diff --git a/cmd/lopower/README.md b/cmd/lopower/README.md index c955a718c..8a8404de3 100644 --- a/cmd/lopower/README.md +++ b/cmd/lopower/README.md @@ -10,6 +10,10 @@ Some small devices such as ESP32 microcontrollers [support WireGuard](https://gi Tailscale LOPOWER is a proxy that you run nearby that bridges a low-power WireGuard-speaking device on one side to Tailscale on the other side. That way network traffic from the low-powered device never hits the network unencrypted but is still able to communicate to/from other Tailscale devices on your Tailnet. +## Diagram + + + ## Features * Runs separate Wireguard server with separate keys (unknown to the Tailscale control plane) that proxy on to Tailscale @@ -24,3 +28,12 @@ Tailscale LOPOWER is a proxy that you run nearby that bridges a low-power WireGu * this runs in userspace using gVisor's netstack. That means it's portable (and doesn't require kernel/system configuration), but that does mean it doesn't operate at a packet level but rather it stitches together two separate TCP (or UDP) flows and doesn't support IP protocols such as SCTP or other things that aren't TCP or UDP. * the standard WireGuard configuration doesn't support specifying DNS search domains, so resolving bare names like the `go` in `http://go/foo` won't work and you need to resolve names using the fully qualified `go.your-tailnet.ts.net` names. * since it's based on userspace tsnet mode, it doesn't pick up your system DNS configuration (yet?) and instead resolves non-tailnet DNS names using either your "Override DNS" tailnet settings for the global DNS resolver, or else defaults to `8.8.8.8` and `1.1.1.1` (using DoH) if that isn't set. + +## TODO + +* provisioning more than one low-powered device is possible, but requires manual config file edits. It should be possible to enroll multuple devices (including QR code support) easily. +* incoming connections (from Tailscale to `lopower`) don't yet forward to the low-powered devices. When there's only one low-powered device, the mapping policy is obvious. When there are multiple, it's not as obvious. Maybe the answer is supporting [4via6 subnet routers](https://tailscale.com/kb/1201/4via6-subnets). + +## Installing + +* git clone this repo, switch to `lp` branch, `go install ./cmd/lopower` and see `lopower --help`. diff --git a/cmd/lopower/lopower.svg b/cmd/lopower/lopower.svg new file mode 100644 index 000000000..4da1c60b1 --- /dev/null +++ b/cmd/lopower/lopower.svg @@ -0,0 +1 @@ + \ No newline at end of file