Skip to content

Commit 073f21e

Browse files
committed
docs: link the tailscale comparison, and diagram who calls whom
1 parent 0c37c36 commit 073f21e

1 file changed

Lines changed: 41 additions & 20 deletions

File tree

README.md

Lines changed: 41 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -266,9 +266,10 @@ something you're working on.
266266
least one side. pai-sho works when neither machine has open inbound ports.
267267

268268
[WireGuard](https://www.wireguard.com/) has no control plane at all. You put
269-
peers in a config file by public key, and a peer entry needs an `Endpoint` with
270-
a routable address, so someone has to solve reachability. If both machines are
271-
behind NAT, you are standing up a bounce host.
269+
peers in a [config file](https://www.wireguard.com/quickstart/) by public key,
270+
and a peer entry needs an `Endpoint` with a routable address, so someone has to
271+
solve reachability. If both machines are behind NAT, you are standing up a bounce
272+
host.
272273

273274
[dumbpipe](https://github.com/n0-computer/dumbpipe) is the direct inspiration.
274275
[pigeons](https://pigeons.computer), SSH over iroh from the same team, is where
@@ -279,31 +280,51 @@ pai-sho's connection handling comes from.
279280
You probably should use [Tailscale](https://tailscale.com). It solves this
280281
problem well, and there is a company behind it.
281282

282-
**No account.** Both punch through NAT with help from third-party infrastructure:
283-
Tailscale's DERP relays, and n0's relays here. A Tailscale node registers with
284-
`controlplane.tailscale.com`, which decides membership and hands each node a
285-
filtered list of the peers it may see. Your box phones Tailscale, and Tailscale
286-
introduces the two of you. A pai-sho box dials your laptop by public key.
287-
Discovery is a lookup, and the relay is a pipe that cannot read what it carries.
288-
Nothing in that path can add a peer to your set, and there is nothing to sign up
289-
for.
283+
**No account.** Both [punch through NAT](https://tailscale.com/blog/how-nat-traversal-works)
284+
with third-party help: Tailscale's [DERP relays](https://tailscale.com/kb/1232/derp-servers),
285+
and [n0's relays](https://www.iroh.computer/docs/concepts/relay) here. The
286+
difference is who your box calls.
287+
288+
```mermaid
289+
flowchart LR
290+
subgraph ts [Tailscale]
291+
direction LR
292+
tb[box] --> tc["controlplane.tailscale.com<br>decides membership"]
293+
tl[your laptop] --> tc
294+
end
295+
subgraph ps [pai-sho]
296+
direction LR
297+
pb[box] --> pl[your laptop]
298+
pb -. "cannot read" .-> pr[relay]
299+
pr -. "cannot read" .-> pl
300+
end
301+
```
302+
303+
A Tailscale node registers with the
304+
[coordination server](https://tailscale.com/blog/how-tailscale-works), which
305+
hands it a filtered list of the peers it may see. A pai-sho box dials your laptop
306+
by public key, [resolved by discovery](https://www.iroh.computer/docs/concepts/discovery).
307+
Nothing in that path can add a peer to your set.
290308

291309
**Specific ports, not a whole machine.** Tailscale gives a peer an IP, and
292-
everything listening on it is reachable unless an ACL says otherwise. Default
293-
allow, then narrow it. pai-sho grants one port at a time to one key, and a peer
294-
with no grants sees nothing. Day to day the two feel much the same, since you
295-
type a name and a port either way.
310+
everything listening on it is reachable unless an
311+
[ACL](https://tailscale.com/kb/1018/acls) says otherwise. Default allow, then
312+
narrow it. pai-sho grants one port at a time to one key, and a peer with no
313+
grants sees nothing. Day to day the two feel much the same, since you type a name
314+
and a port either way.
296315

297316
**Less to install.** Without `--tun`, pai-sho binds loopback addresses. On Linux
298317
that needs no network device and no privilege, because `127.0.0.0/8` already
299-
routes to `lo`. Tailscale needs a tun device, or its userspace mode, which gives
318+
routes to `lo`. Tailscale needs a tun device, or its
319+
[userspace mode](https://tailscale.com/kb/1112/userspace-networking), which gives
300320
you a proxy rather than real listeners. `--tun` puts pai-sho in the same
301321
position, so this only holds on loopback.
302322

303-
**The ops story is worse.** Tailscale keeps one policy file for the whole
304-
tailnet, so who-can-reach-what is a thing you read in a single place. pai-sho's
305-
answer is "which command did you run on which machine," and there is no central
306-
view of it. A web UI would help. It does not exist.
323+
**The ops story is worse.** Tailscale keeps one
324+
[policy file](https://tailscale.com/kb/1337/policy-syntax) for the whole tailnet,
325+
so who-can-reach-what is a thing you read in a single place. pai-sho's answer is
326+
"which command did you run on which machine," and there is no central view of it.
327+
A web UI would help. It does not exist.
307328

308329
## More
309330

0 commit comments

Comments
 (0)