@@ -265,15 +265,48 @@ something you're working on.
265265[ SSH tunnels] ( https://www.ssh.com/academy/ssh/tunneling ) need inbound access on at
266266least one side. pai-sho works when neither machine has open inbound ports.
267267
268- [ WireGuard] ( https://www.wireguard.com/ ) , [ Tailscale ] ( https://tailscale.com ) , and
269- [ NetBird ] ( https://netbird.io/ ) are mesh VPNs that put every machine on a virtual
270- network. pai-sho is narrower: you expose specific ports, not the whole machine,
271- which keeps it easy to reason about exactly what is reachable .
268+ [ 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 .
272272
273273[ dumbpipe] ( https://github.com/n0-computer/dumbpipe ) is the direct inspiration.
274274[ pigeons] ( https://pigeons.computer ) , SSH over iroh from the same team, is where
275275pai-sho's connection handling comes from.
276276
277+ ### Why not Tailscale?
278+
279+ You probably should use [ Tailscale] ( https://tailscale.com ) . It solves this
280+ problem well, and there is a company behind it. Four things differ, and one is a
281+ point against pai-sho.
282+
283+ ** No account.** Both punch through NAT with help from third-party infrastructure:
284+ Tailscale's DERP relays, and n0's relays here. What differs is what that
285+ infrastructure is allowed to do. A Tailscale node registers with
286+ ` controlplane.tailscale.com ` , which decides membership and hands each node a
287+ filtered list of the peers it may see. Your box phones Tailscale, and Tailscale
288+ introduces the two of you. A pai-sho box dials your laptop by public key, with
289+ discovery as a lookup and the relay as a pipe that cannot read what it carries.
290+ Nothing in that path can add a peer to your set, and there is nothing to sign up
291+ for.
292+
293+ ** Specific ports, not a whole machine.** Tailscale gives a peer an IP, and
294+ everything listening on it is reachable unless an ACL says otherwise. Default
295+ allow, then narrow it. pai-sho grants one port at a time to one key, and a peer
296+ with no grants sees nothing. Day to day the two feel much the same, since you
297+ type a name and a port either way.
298+
299+ ** Less to install.** Without ` --tun ` , pai-sho binds loopback addresses. On Linux
300+ that needs no network device and no privilege, because ` 127.0.0.0/8 ` already
301+ routes to ` lo ` . Tailscale needs a tun device, or its userspace mode, which gives
302+ you a proxy rather than real listeners. This one is narrow: ` --tun ` puts pai-sho
303+ in the same position.
304+
305+ ** The ops story is worse.** Tailscale keeps one policy file for the whole
306+ tailnet, so who-can-reach-what is a thing you read in a single place. pai-sho's
307+ answer is "which command did you run on which machine," and there is no central
308+ view of it. A web UI would help. It does not exist.
309+
277310## More
278311
279312[ docs/scenarios.md] ( docs/scenarios.md ) works two flows end to end: a shared build
0 commit comments