@@ -266,9 +266,10 @@ something you're working on.
266266least 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.
279280You probably should use [ Tailscale] ( https://tailscale.com ) . It solves this
280281problem 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
298317that 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
300320you a proxy rather than real listeners. ` --tun ` puts pai-sho in the same
301321position, 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