<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>Abellana — Build Log</title>
    <link>https://blog.abellana.work/</link>
    <atom:link href="https://blog.abellana.work/feed.xml" rel="self" type="application/rss+xml"/>
    <description>An engineer&#x27;s build log — real infrastructure and systems work (clients and identifying details kept out) and the labs I build to go deeper. The why behind the systems, not just the what.</description>
    <language>en-us</language>
    <lastBuildDate>Sat, 13 Jun 2026 16:57:14 GMT</lastBuildDate>
    <item>
      <title>Cutover without downtime: migrating users while the old VPN stays up</title>
      <link>https://blog.abellana.work/posts/remote-access-cutover-without-downtime/</link>
      <guid isPermaLink="true">https://blog.abellana.work/posts/remote-access-cutover-without-downtime/</guid>
      <pubDate>Sat, 13 Jun 2026 12:00:00 +0000</pubDate>
      <description>The new mesh works — now move real people onto it without a bad day. This part is the discipline that makes a migration boring: a parallel pilot, simplified onboarding, wave-by-wave cutover with the old VPN as a live safety net, and backups you&#x27;ve actually restored.</description>
    </item>
    <item>
      <title>Routes and policy: giving the mesh the keys, one team at a time</title>
      <link>https://blog.abellana.work/posts/remote-access-routes-and-policy/</link>
      <guid isPermaLink="true">https://blog.abellana.work/posts/remote-access-routes-and-policy/</guid>
      <pubDate>Thu, 11 Jun 2026 12:00:00 +0000</pubDate>
      <description>An authenticated peer that can&#x27;t reach anything is useless. This part turns the gateway into a routing peer, advertises the internal network, pushes internal DNS, and replaces &#x27;connected = full access&#x27; with default-deny, group-based policy.</description>
    </item>
    <item>
      <title>The gateway: self-hosted NetBird behind Caddy, with a relay</title>
      <link>https://blog.abellana.work/posts/remote-access-self-hosted-netbird-gateway/</link>
      <guid isPermaLink="true">https://blog.abellana.work/posts/remote-access-self-hosted-netbird-gateway/</guid>
      <pubDate>Mon, 08 Jun 2026 12:00:00 +0000</pubDate>
      <description>Now the WireGuard control plane. This part stands up self-hosted NetBird on a DMZ gateway, fronts it with Caddy issuing TLS via DNS-01, points it at our SSO for auth, and adds a coturn relay for the peers that can&#x27;t connect directly.</description>
    </item>
    <item>
      <title>The identity spine: Keycloak in front of an existing directory</title>
      <link>https://blog.abellana.work/posts/remote-access-identity-spine/</link>
      <guid isPermaLink="true">https://blog.abellana.work/posts/remote-access-identity-spine/</guid>
      <pubDate>Thu, 04 Jun 2026 12:00:00 +0000</pubDate>
      <description>Before the mesh can ask &#x27;who are you?&#x27;, something has to answer authoritatively. This part stands up Keycloak as the SSO front door and federates the existing directory read-only — adding MFA without migrating a single user account.</description>
    </item>
    <item>
      <title>Why we&#x27;re tearing out a VPN that works</title>
      <link>https://blog.abellana.work/posts/remote-access-why-replace-the-vpn/</link>
      <guid isPermaLink="true">https://blog.abellana.work/posts/remote-access-why-replace-the-vpn/</guid>
      <pubDate>Sat, 30 May 2026 12:00:00 +0000</pubDate>
      <description>The old OpenVPN setup wasn&#x27;t broken — it was a pile of per-user certificates and a manual onboarding ritual. Here&#x27;s the case for replacing it with a self-hosted WireGuard mesh tied to our identity provider, and the one rule that makes the swap safe.</description>
    </item>
  </channel>
</rss>
