A prefix-mode container's /112 block index was sha256(username)[0:4], so the suffix of its address was a global constant for a given name: "alice" got the same block on every host running this panel. An address therefore identified its owner to anyone who knew the scheme and could enumerate names — the opposite of what the random container hostname is for. The index now lives in users.ipv6_index (schema v19) and is random: - accounts that predate the column are seeded with the value they have been using, so no address moves and no container is touched; - vps add picks a free index and retries internally, with the UNIQUE index on the column as the backstop, so a name can no longer be refused for a reason as opaque as "your address is taken" (the old checkIPv6BlockCollision). A block containing the bridge gateway is skipped the same way. - deleting an account and recreating the same name yields a fresh random index, and so does a transfer: the value is per-host and stays out of the metadata. Add launches a container before creating its account row, so within that window the block can no longer be looked up by name: WireIPv6 and ConfigureContainerIPv6 now take the block/address the caller already picked. Blocks are also only meaningful in prefix mode, which the accessors now say. Verified on a live prefix-mode host: a user created before the change kept her address (panel and inside the container), a new user came up on a random block end to end (guest address, ndppd rule, Incus route), deleting and recreating a name produced a new random block, and a V4-only host still creates users with no index at all. Co-authored-by: CommandCodeBot <noreply@commandcode.ai>
Documentation
Technical documentation for vpsmgr. All docs are in English.
| Doc | What it covers |
|---|---|
| architecture.md | System design: components, storage, network, security, traffic, users and user groups, image, install/uninstall lifecycle |
| configuration.md | Full reference for /etc/vpsmgr/config.yaml |
| ipv6.md | IPv6 pass-through design: per-account blocks, prefix support, routing, installer flow |
| ipv6-ndp-responder.md | Why prefix mode replaced ndppd with an in-tree NDP responder, design hardening, and what to test at scale |
| web-ssh.md | The browser terminal: how it reaches a container, how a session survives a dropped connection, and how to disable it |
| development.md | Building, testing, releasing, conventions |
See also AGENTS.md at the repo root — short version aimed at AI coding agents.