Changelog
This page mirrors CHANGELOG.md of the collection repository.
0.4.0 — 2026-11-11
Section titled “0.4.0 — 2026-11-11”dns: new role that runs CoreDNS on the host network. It answersdns_records(names with IPv4 and IPv6 addresses,dns_ttl) for the clients indns_allow(all others are REFUSED) and forwards everything else todns_upstreams, cached fordns_cacheseconds. Records are served from a managed hosts file (not the host’s/etc/hosts), and changes to them apply without a restart. It binds onlydns_bind(wildcard addresses are refused), plus the node’s Tailscale addresses withdns_bind_tailscale. Further variables:dns_image,dns_dir,dns_project,dns_log_queries,dns_cpus,dns_memory. The container is read-only without capabilities exceptNET_BIND_SERVICEand cannot gain privileges, and is recreated when the Corefile or the compose file changes.dns_allowmust not contain0.0.0.0/0or::/0.base:base_nonlocal_bind(andbase_sshd_listen_addresses) now also setsnet.ipv6.ip_nonlocal_bind, so services can bind IPv6 addresses that are not up yet. It is skipped on a kernel without IPv6 (ipv6.disable=1).traefik:traefik_acme_challenge: httpissues certificates with HTTP-01 ontraefik_acme_http_entrypoint(an entrypoint on host port 80), one per router host, without a DNS API. The cert resolver is named after the challenge (dnsorhttp);dnsstays the default.base: the static route unit is started by the role itself, not only by a handler, so a run that failed after writing the script no longer leaves the routes unapplied.
0.3.0 — 2026-11-10
Section titled “0.3.0 — 2026-11-10”traefik: entrypoints takehost_port, the port published on the host (default:port), so two entrypoints can share a host port on different bind addresses. A redirect to such an entrypoint goes to itshost_port.traefik: entrypoints takemiddlewares, which every router on the entrypoint gets; not allowed together withredirect_to.traefik:traefik_docker_allow_empty_servicessets the Docker provider’sallowEmptyServices, so containers without a healthy server keep their router (Traefik v3 answers them with 500, not 503).traefik: optional error pages (traefik_error_pages_*, off by default). The role writesdynamic/error-pages.ymlwith the middlewareserror-pages-errorsanderror-pages-compress, which it attaches to the listed entrypoints, routers that answer with a fixed page (catch-all for unknown hosts, guards for names that must not be served on an entrypoint) and the serviceerror-pages. Turning the feature off removes the file after Traefik has restarted without the middlewares.traefik: the error pages container (traefik_error_pages_image, defaultnoixdev/error-pages:1) runs in the Traefik compose project as serviceerror-pages: read-only, as 65532, without capabilities, with the image’s healthcheck, CPU and memory limits and a volume on/datafor maintenance mode.traefik_error_pages_envsets its environment (default themeglass, languagesen,de). Withtraefik_error_pages_container: falseit is not run andtraefik_error_pages_urlpoints at a service elsewhere.
0.2.0 — 2026-11-10
Section titled “0.2.0 — 2026-11-10”- Role
fail2ban: journal backend, nftables bans,sshdandrecidivejails, extra jails. - Role
crowdsec: CrowdSec and the iptables firewall bouncer from the official repository (key fingerprint checked), collections, acquisitions, allowlist parser,INPUTandDOCKER-USERchains, optional console enrollment. - Shared
security_allowlist, read byfail2banandcrowdsec, so management networks are never banned; entries are checked to be IP addresses or CIDRs. base: the sshd hardening drop-in now also enforces public-key-only authentication, connection and session limits, client keepalives, no agent forwarding, tunnels or gateway ports,LogLevel VERBOSEand modern key exchange, cipher and MAC lists. New variablesbase_sshd_permit_root_login,base_sshd_allow_users,base_sshd_allow_tcp_forwardingand others; see the role’s argument specs.- Roles
base,docker,tailscale,traefik,portainer,pulsix_manager,pulsix_worker. - Supported on Ubuntu 24.04 and 26.04; host roles are tested on both (
tests/host/run.sh).