You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Copy file name to clipboardExpand all lines: Cargo.toml
+1-1Lines changed: 1 addition & 1 deletion
Original file line number
Diff line number
Diff line change
@@ -2,7 +2,7 @@
2
2
name = "pai-sho"
3
3
version = "0.5.1-dev"
4
4
edition = "2021"
5
-
description = "Forward ports between your own machines, peer to peer over iroh. Neither side needs an account, a public IP, or an open inbound port. Only what you grant is reachable."
5
+
description = "Forward ports between your own machines, peer to peer over iroh. Neither side needs an account, a public IP, or an open inbound port. A port is reachable only by the peers you grant it to."
|`-a, --accept`|| Take up an invitation, or a peer's key, on startup (repeatable) |
182
185
|`-e, --expose`|| Expose port to the `--accept` peers (repeat or comma-separate) |
183
186
|`--key`|`~/.local/state/pai-sho/key`| Secret key path (created if missing) |
184
-
|`--tun`|| Put surfaces on a private TUN network (`utun` on macOS, a pre-created device like `ps0` on Linux); the resolver answers in-stack on`10.99.0.53:53`|
187
+
|`--tun`|| Put surfaces on a private TUN network (`utun` on macOS, a pre-created device like `ps0` on Linux); the resolver answers at`10.99.0.53:53`|
185
188
|`--resolver`|| Loopback mode, an alternative to `--tun`: serve the `*.pai-sho` resolver on this UDP address (e.g. `127.0.0.1:5353`) |
186
189
|`--name`|| This node's own name. The resolver answers `<name>.pai-sho` with `--host`, so a service reached locally and from a peer has one origin, which is what CORS needs |
187
190
|`--socket-owner`|| Username to own the control socket, chowned right after bind. Lets the CLI skip sudo when the daemon runs as root |
188
191
|`--socket-mode`|| Octal mode for the control socket, e.g. `660`|
189
192
190
193
## How it works
191
194
192
-
**Identity.** Each daemon has a stable key, an iroh endpoint ID backed by a
193
-
keypair at `--key`. Because it does not change, a launcher can bake one
194
-
operator key into every workload it boots.
195
+
**Identity.** Each daemon has a stable key: an iroh endpoint ID, backed by a
196
+
keypair stored at `--key`. Because it never changes, whatever boots your VMs can
197
+
hand each one your laptop's key ahead of time.
195
198
196
-
**Grants.** Access is default deny. A port becomes reachable only through a grant
197
-
that names the peers allowed to reach it, and is served to them alone. iroh
198
-
proves the connecting peer's key cryptographically, so a grant names a proven
199
-
identity, not a shareable address. You cannot hand out reach by leaking a string
199
+
**Grants.** A port is reachable only by the peers a grant names, and is served
200
+
to them alone. A grant names a key, and iroh proves the connecting peer holds
201
+
that key, so a peer cannot pass its access on to another machine
200
202
([ADR 0001](docs/adr/0001-directed-grants.md)).
201
203
202
204
**Invitations.** A connection from an unknown key is refused unless it carries a
203
-
code from `invite`. The code is spent on use, and the peer it admitted survives
204
-
restarts, so a reboot does not orphan a workload. An invitation is
205
+
code from `invite`. The code is spent on use, and the peer it admitted is
206
+
remembered across restarts. An invitation is
205
207
`<key>.<code>`: the key says who to dial, the code admits you. When you already
206
208
know a peer's key, `invite <key>` authorizes it with no secret created at all
207
209
([ADR 0006](docs/adr/0006-invitations.md),
@@ -220,18 +222,18 @@ the key comes from `pai-sho key` on the machine you are granting to.
220
222
221
223
**The network.** With `--tun`, the daemon runs its own TCP/IP stack on a private
222
224
network interface. The daemon sits at `10.99.0.1`, peers get addresses on
223
-
`10.99.1.x`, and the resolver answers in-stack on`10.99.0.53:53`. On Linux the
225
+
`10.99.1.x`, and the resolver answers at`10.99.0.53:53`. On Linux the
224
226
interface is created ahead of time and owned by the daemon's user, so the daemon
225
227
needs no elevated capability. On macOS the daemon creates a utun itself, which
226
228
needs root.
227
229
228
-
**Surfaces.** A peer's ports are addressed together at one address, under the
229
-
name you gave it, or a short form of its key if nothing named it. A peer is
230
-
projected automatically the first time it announces a granted port. Because each
231
-
peer owns its address, two peers can serve the same port without colliding.
232
-
`project` overrides the automatic choice (pin an address with `--ip`, rename with
233
-
`--as`), `unproject` takes a surface down, and projections survive a restart
234
-
([ADR 0004](docs/adr/0004-peer-surfaces.md)).
230
+
**Surfaces.** A peer's ports all live at one local address, under the name you
231
+
gave it, or the first eight characters of its key if you gave none. That address
232
+
with its ports is the peer's surface. It comes up by itself the first time the
233
+
peer announces a granted port. Each peer has its own address, so two peers can
234
+
both serve `8080`. `project` overrides the defaults (pin an address with `--ip`,
235
+
rename with `--as`), `unproject` takes a surface down, and projections survive a
0 commit comments