<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Posts on Thomas Peters</title><link>https://www.sirmysterion.com/posts/</link><description>Recent content in Posts on Thomas Peters</description><generator>Hugo -- gohugo.io</generator><language>en</language><copyright>&lt;a href="https://creativecommons.org/licenses/by-nc/4.0/" target="_blank" rel="noopener"&gt;CC BY-NC 4.0&lt;/a&gt;</copyright><lastBuildDate>Sun, 08 Feb 2026 00:00:00 +0000</lastBuildDate><atom:link href="https://www.sirmysterion.com/posts/index.xml" rel="self" type="application/rss+xml"/><item><title>Multi-Homed Spine-Leaf Kubernetes</title><link>https://www.sirmysterion.com/posts/20260208-multihomed-kubernetes/</link><pubDate>Sun, 08 Feb 2026 00:00:00 +0000</pubDate><guid>https://www.sirmysterion.com/posts/20260208-multihomed-kubernetes/</guid><description>&lt;h1 id="overview"&gt;Overview&lt;/h1&gt;
&lt;p&gt;In my pursuit to learn more and migrate my existing Proxmox-based infrastructure to Kubernetes, I faced the issue of physical redundancy.
While having three nodes does provide failover there are still other single points of failure, primarily my physical network topology.
I have previously been able to work with L2 RSTP in Proxmox using Open vSwitch to add redundancy as well as mixing and prioritizing network port speeds.
Talos Linux and Cilium did not seem willing to participate in RSTP, so I needed to resort to other methods, Link Aggregation was my next approach.
But I was quickly dissuaded by LACP&amp;rsquo;s inability to bond ports of unlike speed and Cilium&amp;rsquo;s eBPF binding to the raw interface
instead of the virtual Bond. The next idea on the list that I could think of was a full Layer3 Routed Spine-Leaf topology setup.&lt;/p&gt;</description><content type="html"><![CDATA[<h1 id="overview">Overview</h1>
<p>In my pursuit to learn more and migrate my existing Proxmox-based infrastructure to Kubernetes, I faced the issue of physical redundancy.
While having three nodes does provide failover there are still other single points of failure, primarily my physical network topology.
I have previously been able to work with L2 RSTP in Proxmox using Open vSwitch to add redundancy as well as mixing and prioritizing network port speeds.
Talos Linux and Cilium did not seem willing to participate in RSTP, so I needed to resort to other methods, Link Aggregation was my next approach.
But I was quickly dissuaded by LACP&rsquo;s inability to bond ports of unlike speed and Cilium&rsquo;s eBPF binding to the raw interface
instead of the virtual Bond. The next idea on the list that I could think of was a full Layer3 Routed Spine-Leaf topology setup.</p>
<h1 id="planning">Planning</h1>
<p>Recently acquiring another 10GB capable Mikrotik switch, I finally had a proper dual uplink from each of my physical servers to the core
network and ability to maintain cluster connectivity during switch maintenance.</p>
<p>The following is an overview of the physical network topology utilizing Mikrotik Network and Talos + Cilium Nodes.</p>
<pre class="mermaid">graph TB
    subgraph "Edge / WAN"
        R1["R1 Edge Router<br/>AS 65534<br/>2001:db8:abcd:e00a::5009<br/>2001:db8:abcd:e00b::5009"]
    end

    subgraph "Spine Layer"
        TOR1["TOR1 Spine RR<br/>AS 65534<br/>Router-ID: 0.3.0.9<br/>Cluster-ID: 5.0.0.9<br/>2001:db8:abcd:e00a::1/64"]
        TOR2["TOR2 Spine RR<br/>AS 65534<br/>Router-ID: 0.3.5.4<br/>Cluster-ID: 5.0.0.9<br/>2001:db8:abcd:e00b::1/64"]
    end

    subgraph "Kubernetes Nodes"
        Node1["Node 1<br/>e0b0::/64 Pod Subnet"]
        Node2["Node 2<br/>e0b1::/64 Pod Subnet"]
        NodeX["..."]
        NodeN["Node N<br/>e0bf::/64 Pod Subnet"]
    end

    R1 -. iBGP + Default Originate .-> TOR1
    R1 -. iBGP + Default Originate .-> TOR2

    TOR1 -- iBGP RR --> Node1
    TOR1 -- iBGP RR --> Node2
    TOR1 -- iBGP RR --> NodeN

    TOR2 -- iBGP RR --> Node1
    TOR2 -- iBGP RR --> Node2
    TOR2 -- iBGP RR --> NodeN

    style R1 fill:#1e3a5f,stroke:#4fc3f7,stroke-width:2px,color:#fff
    style TOR1 fill:#3e2723,stroke:#ffab91,stroke-width:2px,color:#fff
    style TOR2 fill:#3e2723,stroke:#ffab91,stroke-width:2px,color:#fff
    style Node1 fill:#1b5e20,stroke:#81c784,stroke-width:2px,color:#fff
    style Node2 fill:#1b5e20,stroke:#81c784,stroke-width:2px,color:#fff
    style NodeN fill:#1b5e20,stroke:#81c784,stroke-width:2px,color:#fff
</pre>
<h1 id="mikrotik">Mikrotik</h1>
<p>One of the first hurdles was understanding Mikrotik&rsquo;s L3 Hardware Offloading capabilities and how to properly address and logically
configure each of the switches. Until this point, I had avoided using switches to route due to their poor IPv6 compatibility or
due to the throughput limitations of the hardware. Finding proper offloading capability that also supports IPv6 and not just IPv4 in recent RouterOS
firmware has been exciting. In the end both Mikrotik&rsquo;s hardware offloading may not see a lot of use as they are acting as BGP
route reflectors.</p>
<h1 id="cilium">Cilium</h1>
<p>Previously I had already succeeded in using Cilium&rsquo;s Native Routing and a BGP connection to my WAN Router for full routing. Adding the Multi-Homed
aspect was to fix the issue with inter-node communications during WAN router interruptions, whether from the router itself rebooting or intermediate
switch failures. While working through Cilium&rsquo;s support for link-local BGP connections, I had to wrap my head around managing host node connectivity
as well as Cilium containers using the clusterPodNets subnets to communicate. The first issue was the bootstrap paradox: adding a loopback interface
in Talos that could still be reachable before Cilium and BGP were able to peer and advertise the loopback IP.</p>
<h1 id="summary">Summary</h1>
<p>There are still improvements to be made and testing to be done on how tolerant this setup is to losing its physical uplinks. I have already found that
the BGPPeerConfig timers need to be tweaked and research into possibly implementing BGP BFD for faster link failure detection.</p>
<h2 id="notes">Notes</h2>
<h3 id="addressing-plan">Addressing Plan:</h3>



<div class="goat svg-container ">
  
    <svg
      xmlns="http://www.w3.org/2000/svg"
      font-family="Menlo,Lucida Console,monospace"
      
        viewBox="0 0 464 217"
      >
      <g transform='translate(8,16)'>
<path d='M 200,112 L 208,96' fill='none' stroke='currentColor'></path>
<text text-anchor='middle' x='0' y='4' fill='currentColor' style='font-size:1em'>2</text>
<text text-anchor='middle' x='8' y='4' fill='currentColor' style='font-size:1em'>0</text>
<text text-anchor='middle' x='8' y='20' fill='currentColor' style='font-size:1em'>├</text>
<text text-anchor='middle' x='8' y='36' fill='currentColor' style='font-size:1em'>│</text>
<text text-anchor='middle' x='8' y='52' fill='currentColor' style='font-size:1em'>│</text>
<text text-anchor='middle' x='8' y='68' fill='currentColor' style='font-size:1em'>│</text>
<text text-anchor='middle' x='8' y='84' fill='currentColor' style='font-size:1em'>├</text>
<text text-anchor='middle' x='8' y='100' fill='currentColor' style='font-size:1em'>│</text>
<text text-anchor='middle' x='8' y='116' fill='currentColor' style='font-size:1em'>│</text>
<text text-anchor='middle' x='8' y='132' fill='currentColor' style='font-size:1em'>└</text>
<text text-anchor='middle' x='16' y='4' fill='currentColor' style='font-size:1em'>0</text>
<text text-anchor='middle' x='16' y='20' fill='currentColor' style='font-size:1em'>─</text>
<text text-anchor='middle' x='16' y='84' fill='currentColor' style='font-size:1em'>─</text>
<text text-anchor='middle' x='16' y='132' fill='currentColor' style='font-size:1em'>─</text>
<text text-anchor='middle' x='24' y='4' fill='currentColor' style='font-size:1em'>1</text>
<text text-anchor='middle' x='24' y='20' fill='currentColor' style='font-size:1em'>2</text>
<text text-anchor='middle' x='24' y='84' fill='currentColor' style='font-size:1em'>2</text>
<text text-anchor='middle' x='24' y='132' fill='currentColor' style='font-size:1em'>2</text>
<text text-anchor='middle' x='32' y='4' fill='currentColor' style='font-size:1em'>:</text>
<text text-anchor='middle' x='32' y='20' fill='currentColor' style='font-size:1em'>0</text>
<text text-anchor='middle' x='32' y='36' fill='currentColor' style='font-size:1em'>├</text>
<text text-anchor='middle' x='32' y='52' fill='currentColor' style='font-size:1em'>├</text>
<text text-anchor='middle' x='32' y='68' fill='currentColor' style='font-size:1em'>└</text>
<text text-anchor='middle' x='32' y='84' fill='currentColor' style='font-size:1em'>0</text>
<text text-anchor='middle' x='32' y='100' fill='currentColor' style='font-size:1em'>├</text>
<text text-anchor='middle' x='32' y='116' fill='currentColor' style='font-size:1em'>└</text>
<text text-anchor='middle' x='32' y='132' fill='currentColor' style='font-size:1em'>0</text>
<text text-anchor='middle' x='32' y='148' fill='currentColor' style='font-size:1em'>├</text>
<text text-anchor='middle' x='32' y='164' fill='currentColor' style='font-size:1em'>├</text>
<text text-anchor='middle' x='32' y='180' fill='currentColor' style='font-size:1em'>├</text>
<text text-anchor='middle' x='32' y='196' fill='currentColor' style='font-size:1em'>└</text>
<text text-anchor='middle' x='40' y='4' fill='currentColor' style='font-size:1em'>d</text>
<text text-anchor='middle' x='40' y='20' fill='currentColor' style='font-size:1em'>0</text>
<text text-anchor='middle' x='40' y='36' fill='currentColor' style='font-size:1em'>─</text>
<text text-anchor='middle' x='40' y='52' fill='currentColor' style='font-size:1em'>─</text>
<text text-anchor='middle' x='40' y='68' fill='currentColor' style='font-size:1em'>─</text>
<text text-anchor='middle' x='40' y='84' fill='currentColor' style='font-size:1em'>0</text>
<text text-anchor='middle' x='40' y='100' fill='currentColor' style='font-size:1em'>─</text>
<text text-anchor='middle' x='40' y='116' fill='currentColor' style='font-size:1em'>2</text>
<text text-anchor='middle' x='40' y='132' fill='currentColor' style='font-size:1em'>0</text>
<text text-anchor='middle' x='40' y='148' fill='currentColor' style='font-size:1em'>─</text>
<text text-anchor='middle' x='40' y='164' fill='currentColor' style='font-size:1em'>─</text>
<text text-anchor='middle' x='40' y='180' fill='currentColor' style='font-size:1em'>─</text>
<text text-anchor='middle' x='40' y='196' fill='currentColor' style='font-size:1em'>─</text>
<text text-anchor='middle' x='48' y='4' fill='currentColor' style='font-size:1em'>b</text>
<text text-anchor='middle' x='48' y='20' fill='currentColor' style='font-size:1em'>1</text>
<text text-anchor='middle' x='48' y='36' fill='currentColor' style='font-size:1em'>2</text>
<text text-anchor='middle' x='48' y='52' fill='currentColor' style='font-size:1em'>2</text>
<text text-anchor='middle' x='48' y='68' fill='currentColor' style='font-size:1em'>2</text>
<text text-anchor='middle' x='48' y='84' fill='currentColor' style='font-size:1em'>1</text>
<text text-anchor='middle' x='48' y='100' fill='currentColor' style='font-size:1em'>2</text>
<text text-anchor='middle' x='48' y='116' fill='currentColor' style='font-size:1em'>0</text>
<text text-anchor='middle' x='48' y='132' fill='currentColor' style='font-size:1em'>1</text>
<text text-anchor='middle' x='48' y='148' fill='currentColor' style='font-size:1em'>2</text>
<text text-anchor='middle' x='48' y='164' fill='currentColor' style='font-size:1em'>2</text>
<text text-anchor='middle' x='48' y='180' fill='currentColor' style='font-size:1em'>.</text>
<text text-anchor='middle' x='48' y='196' fill='currentColor' style='font-size:1em'>2</text>
<text text-anchor='middle' x='56' y='4' fill='currentColor' style='font-size:1em'>8</text>
<text text-anchor='middle' x='56' y='20' fill='currentColor' style='font-size:1em'>:</text>
<text text-anchor='middle' x='56' y='36' fill='currentColor' style='font-size:1em'>0</text>
<text text-anchor='middle' x='56' y='52' fill='currentColor' style='font-size:1em'>0</text>
<text text-anchor='middle' x='56' y='68' fill='currentColor' style='font-size:1em'>0</text>
<text text-anchor='middle' x='56' y='84' fill='currentColor' style='font-size:1em'>:</text>
<text text-anchor='middle' x='56' y='100' fill='currentColor' style='font-size:1em'>0</text>
<text text-anchor='middle' x='56' y='116' fill='currentColor' style='font-size:1em'>0</text>
<text text-anchor='middle' x='56' y='132' fill='currentColor' style='font-size:1em'>:</text>
<text text-anchor='middle' x='56' y='148' fill='currentColor' style='font-size:1em'>0</text>
<text text-anchor='middle' x='56' y='164' fill='currentColor' style='font-size:1em'>0</text>
<text text-anchor='middle' x='56' y='180' fill='currentColor' style='font-size:1em'>.</text>
<text text-anchor='middle' x='56' y='196' fill='currentColor' style='font-size:1em'>0</text>
<text text-anchor='middle' x='64' y='4' fill='currentColor' style='font-size:1em'>:</text>
<text text-anchor='middle' x='64' y='20' fill='currentColor' style='font-size:1em'>d</text>
<text text-anchor='middle' x='64' y='36' fill='currentColor' style='font-size:1em'>0</text>
<text text-anchor='middle' x='64' y='52' fill='currentColor' style='font-size:1em'>0</text>
<text text-anchor='middle' x='64' y='68' fill='currentColor' style='font-size:1em'>0</text>
<text text-anchor='middle' x='64' y='84' fill='currentColor' style='font-size:1em'>d</text>
<text text-anchor='middle' x='64' y='100' fill='currentColor' style='font-size:1em'>0</text>
<text text-anchor='middle' x='64' y='116' fill='currentColor' style='font-size:1em'>1</text>
<text text-anchor='middle' x='64' y='132' fill='currentColor' style='font-size:1em'>d</text>
<text text-anchor='middle' x='64' y='148' fill='currentColor' style='font-size:1em'>0</text>
<text text-anchor='middle' x='64' y='164' fill='currentColor' style='font-size:1em'>0</text>
<text text-anchor='middle' x='64' y='180' fill='currentColor' style='font-size:1em'>.</text>
<text text-anchor='middle' x='64' y='196' fill='currentColor' style='font-size:1em'>0</text>
<text text-anchor='middle' x='72' y='4' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='72' y='20' fill='currentColor' style='font-size:1em'>b</text>
<text text-anchor='middle' x='72' y='36' fill='currentColor' style='font-size:1em'>1</text>
<text text-anchor='middle' x='72' y='52' fill='currentColor' style='font-size:1em'>1</text>
<text text-anchor='middle' x='72' y='68' fill='currentColor' style='font-size:1em'>1</text>
<text text-anchor='middle' x='72' y='84' fill='currentColor' style='font-size:1em'>b</text>
<text text-anchor='middle' x='72' y='100' fill='currentColor' style='font-size:1em'>1</text>
<text text-anchor='middle' x='72' y='116' fill='currentColor' style='font-size:1em'>:</text>
<text text-anchor='middle' x='72' y='132' fill='currentColor' style='font-size:1em'>b</text>
<text text-anchor='middle' x='72' y='148' fill='currentColor' style='font-size:1em'>1</text>
<text text-anchor='middle' x='72' y='164' fill='currentColor' style='font-size:1em'>1</text>
<text text-anchor='middle' x='72' y='196' fill='currentColor' style='font-size:1em'>1</text>
<text text-anchor='middle' x='80' y='4' fill='currentColor' style='font-size:1em'>b</text>
<text text-anchor='middle' x='80' y='20' fill='currentColor' style='font-size:1em'>8</text>
<text text-anchor='middle' x='80' y='36' fill='currentColor' style='font-size:1em'>:</text>
<text text-anchor='middle' x='80' y='52' fill='currentColor' style='font-size:1em'>:</text>
<text text-anchor='middle' x='80' y='68' fill='currentColor' style='font-size:1em'>:</text>
<text text-anchor='middle' x='80' y='84' fill='currentColor' style='font-size:1em'>8</text>
<text text-anchor='middle' x='80' y='100' fill='currentColor' style='font-size:1em'>:</text>
<text text-anchor='middle' x='80' y='116' fill='currentColor' style='font-size:1em'>d</text>
<text text-anchor='middle' x='80' y='132' fill='currentColor' style='font-size:1em'>8</text>
<text text-anchor='middle' x='80' y='148' fill='currentColor' style='font-size:1em'>:</text>
<text text-anchor='middle' x='80' y='164' fill='currentColor' style='font-size:1em'>:</text>
<text text-anchor='middle' x='80' y='196' fill='currentColor' style='font-size:1em'>:</text>
<text text-anchor='middle' x='88' y='4' fill='currentColor' style='font-size:1em'>c</text>
<text text-anchor='middle' x='88' y='20' fill='currentColor' style='font-size:1em'>:</text>
<text text-anchor='middle' x='88' y='36' fill='currentColor' style='font-size:1em'>d</text>
<text text-anchor='middle' x='88' y='52' fill='currentColor' style='font-size:1em'>d</text>
<text text-anchor='middle' x='88' y='68' fill='currentColor' style='font-size:1em'>d</text>
<text text-anchor='middle' x='88' y='84' fill='currentColor' style='font-size:1em'>:</text>
<text text-anchor='middle' x='88' y='100' fill='currentColor' style='font-size:1em'>d</text>
<text text-anchor='middle' x='88' y='116' fill='currentColor' style='font-size:1em'>b</text>
<text text-anchor='middle' x='88' y='132' fill='currentColor' style='font-size:1em'>:</text>
<text text-anchor='middle' x='88' y='148' fill='currentColor' style='font-size:1em'>d</text>
<text text-anchor='middle' x='88' y='164' fill='currentColor' style='font-size:1em'>d</text>
<text text-anchor='middle' x='88' y='196' fill='currentColor' style='font-size:1em'>d</text>
<text text-anchor='middle' x='96' y='4' fill='currentColor' style='font-size:1em'>d</text>
<text text-anchor='middle' x='96' y='20' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='96' y='36' fill='currentColor' style='font-size:1em'>b</text>
<text text-anchor='middle' x='96' y='52' fill='currentColor' style='font-size:1em'>b</text>
<text text-anchor='middle' x='96' y='68' fill='currentColor' style='font-size:1em'>b</text>
<text text-anchor='middle' x='96' y='84' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='96' y='100' fill='currentColor' style='font-size:1em'>b</text>
<text text-anchor='middle' x='96' y='116' fill='currentColor' style='font-size:1em'>8</text>
<text text-anchor='middle' x='96' y='132' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='96' y='148' fill='currentColor' style='font-size:1em'>b</text>
<text text-anchor='middle' x='96' y='164' fill='currentColor' style='font-size:1em'>b</text>
<text text-anchor='middle' x='96' y='196' fill='currentColor' style='font-size:1em'>b</text>
<text text-anchor='middle' x='104' y='4' fill='currentColor' style='font-size:1em'>:</text>
<text text-anchor='middle' x='104' y='20' fill='currentColor' style='font-size:1em'>b</text>
<text text-anchor='middle' x='104' y='36' fill='currentColor' style='font-size:1em'>8</text>
<text text-anchor='middle' x='104' y='52' fill='currentColor' style='font-size:1em'>8</text>
<text text-anchor='middle' x='104' y='68' fill='currentColor' style='font-size:1em'>8</text>
<text text-anchor='middle' x='104' y='84' fill='currentColor' style='font-size:1em'>b</text>
<text text-anchor='middle' x='104' y='100' fill='currentColor' style='font-size:1em'>8</text>
<text text-anchor='middle' x='104' y='116' fill='currentColor' style='font-size:1em'>:</text>
<text text-anchor='middle' x='104' y='132' fill='currentColor' style='font-size:1em'>b</text>
<text text-anchor='middle' x='104' y='148' fill='currentColor' style='font-size:1em'>8</text>
<text text-anchor='middle' x='104' y='164' fill='currentColor' style='font-size:1em'>8</text>
<text text-anchor='middle' x='104' y='196' fill='currentColor' style='font-size:1em'>8</text>
<text text-anchor='middle' x='112' y='4' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='112' y='20' fill='currentColor' style='font-size:1em'>c</text>
<text text-anchor='middle' x='112' y='36' fill='currentColor' style='font-size:1em'>:</text>
<text text-anchor='middle' x='112' y='52' fill='currentColor' style='font-size:1em'>:</text>
<text text-anchor='middle' x='112' y='68' fill='currentColor' style='font-size:1em'>:</text>
<text text-anchor='middle' x='112' y='84' fill='currentColor' style='font-size:1em'>c</text>
<text text-anchor='middle' x='112' y='100' fill='currentColor' style='font-size:1em'>:</text>
<text text-anchor='middle' x='112' y='116' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='112' y='132' fill='currentColor' style='font-size:1em'>c</text>
<text text-anchor='middle' x='112' y='148' fill='currentColor' style='font-size:1em'>:</text>
<text text-anchor='middle' x='112' y='164' fill='currentColor' style='font-size:1em'>:</text>
<text text-anchor='middle' x='112' y='196' fill='currentColor' style='font-size:1em'>:</text>
<text text-anchor='middle' x='120' y='4' fill='currentColor' style='font-size:1em'>0</text>
<text text-anchor='middle' x='120' y='20' fill='currentColor' style='font-size:1em'>d</text>
<text text-anchor='middle' x='120' y='36' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='120' y='52' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='120' y='68' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='120' y='84' fill='currentColor' style='font-size:1em'>d</text>
<text text-anchor='middle' x='120' y='100' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='120' y='116' fill='currentColor' style='font-size:1em'>b</text>
<text text-anchor='middle' x='120' y='132' fill='currentColor' style='font-size:1em'>d</text>
<text text-anchor='middle' x='120' y='148' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='120' y='164' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='120' y='196' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='128' y='4' fill='currentColor' style='font-size:1em'>0</text>
<text text-anchor='middle' x='128' y='20' fill='currentColor' style='font-size:1em'>:</text>
<text text-anchor='middle' x='128' y='36' fill='currentColor' style='font-size:1em'>b</text>
<text text-anchor='middle' x='128' y='52' fill='currentColor' style='font-size:1em'>b</text>
<text text-anchor='middle' x='128' y='68' fill='currentColor' style='font-size:1em'>b</text>
<text text-anchor='middle' x='128' y='84' fill='currentColor' style='font-size:1em'>:</text>
<text text-anchor='middle' x='128' y='100' fill='currentColor' style='font-size:1em'>b</text>
<text text-anchor='middle' x='128' y='116' fill='currentColor' style='font-size:1em'>c</text>
<text text-anchor='middle' x='128' y='132' fill='currentColor' style='font-size:1em'>:</text>
<text text-anchor='middle' x='128' y='148' fill='currentColor' style='font-size:1em'>b</text>
<text text-anchor='middle' x='128' y='164' fill='currentColor' style='font-size:1em'>b</text>
<text text-anchor='middle' x='128' y='196' fill='currentColor' style='font-size:1em'>b</text>
<text text-anchor='middle' x='136' y='4' fill='currentColor' style='font-size:1em'>0</text>
<text text-anchor='middle' x='136' y='20' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='136' y='36' fill='currentColor' style='font-size:1em'>c</text>
<text text-anchor='middle' x='136' y='52' fill='currentColor' style='font-size:1em'>c</text>
<text text-anchor='middle' x='136' y='68' fill='currentColor' style='font-size:1em'>c</text>
<text text-anchor='middle' x='136' y='84' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='136' y='100' fill='currentColor' style='font-size:1em'>c</text>
<text text-anchor='middle' x='136' y='116' fill='currentColor' style='font-size:1em'>d</text>
<text text-anchor='middle' x='136' y='132' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='136' y='148' fill='currentColor' style='font-size:1em'>c</text>
<text text-anchor='middle' x='136' y='164' fill='currentColor' style='font-size:1em'>c</text>
<text text-anchor='middle' x='136' y='196' fill='currentColor' style='font-size:1em'>c</text>
<text text-anchor='middle' x='144' y='4' fill='currentColor' style='font-size:1em'>:</text>
<text text-anchor='middle' x='144' y='20' fill='currentColor' style='font-size:1em'>0</text>
<text text-anchor='middle' x='144' y='36' fill='currentColor' style='font-size:1em'>d</text>
<text text-anchor='middle' x='144' y='52' fill='currentColor' style='font-size:1em'>d</text>
<text text-anchor='middle' x='144' y='68' fill='currentColor' style='font-size:1em'>d</text>
<text text-anchor='middle' x='144' y='84' fill='currentColor' style='font-size:1em'>0</text>
<text text-anchor='middle' x='144' y='100' fill='currentColor' style='font-size:1em'>d</text>
<text text-anchor='middle' x='144' y='116' fill='currentColor' style='font-size:1em'>:</text>
<text text-anchor='middle' x='144' y='132' fill='currentColor' style='font-size:1em'>0</text>
<text text-anchor='middle' x='144' y='148' fill='currentColor' style='font-size:1em'>d</text>
<text text-anchor='middle' x='144' y='164' fill='currentColor' style='font-size:1em'>d</text>
<text text-anchor='middle' x='144' y='196' fill='currentColor' style='font-size:1em'>d</text>
<text text-anchor='middle' x='152' y='4' fill='currentColor' style='font-size:1em'>:</text>
<text text-anchor='middle' x='152' y='20' fill='currentColor' style='font-size:1em'>0</text>
<text text-anchor='middle' x='152' y='36' fill='currentColor' style='font-size:1em'>:</text>
<text text-anchor='middle' x='152' y='52' fill='currentColor' style='font-size:1em'>:</text>
<text text-anchor='middle' x='152' y='68' fill='currentColor' style='font-size:1em'>:</text>
<text text-anchor='middle' x='152' y='84' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='152' y='100' fill='currentColor' style='font-size:1em'>:</text>
<text text-anchor='middle' x='152' y='116' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='152' y='132' fill='currentColor' style='font-size:1em'>b</text>
<text text-anchor='middle' x='152' y='148' fill='currentColor' style='font-size:1em'>:</text>
<text text-anchor='middle' x='152' y='164' fill='currentColor' style='font-size:1em'>:</text>
<text text-anchor='middle' x='152' y='196' fill='currentColor' style='font-size:1em'>:</text>
<text text-anchor='middle' x='160' y='4' fill='currentColor' style='font-size:1em'>/</text>
<text text-anchor='middle' x='160' y='20' fill='currentColor' style='font-size:1em'>0</text>
<text text-anchor='middle' x='160' y='36' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='160' y='52' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='160' y='68' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='160' y='84' fill='currentColor' style='font-size:1em'>0</text>
<text text-anchor='middle' x='160' y='100' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='160' y='116' fill='currentColor' style='font-size:1em'>0</text>
<text text-anchor='middle' x='160' y='132' fill='currentColor' style='font-size:1em'>0</text>
<text text-anchor='middle' x='160' y='148' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='160' y='164' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='160' y='196' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='168' y='4' fill='currentColor' style='font-size:1em'>5</text>
<text text-anchor='middle' x='168' y='20' fill='currentColor' style='font-size:1em'>:</text>
<text text-anchor='middle' x='168' y='36' fill='currentColor' style='font-size:1em'>0</text>
<text text-anchor='middle' x='168' y='52' fill='currentColor' style='font-size:1em'>0</text>
<text text-anchor='middle' x='168' y='68' fill='currentColor' style='font-size:1em'>0</text>
<text text-anchor='middle' x='168' y='84' fill='currentColor' style='font-size:1em'>:</text>
<text text-anchor='middle' x='168' y='100' fill='currentColor' style='font-size:1em'>0</text>
<text text-anchor='middle' x='168' y='116' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='168' y='132' fill='currentColor' style='font-size:1em'>:</text>
<text text-anchor='middle' x='168' y='148' fill='currentColor' style='font-size:1em'>0</text>
<text text-anchor='middle' x='168' y='164' fill='currentColor' style='font-size:1em'>0</text>
<text text-anchor='middle' x='168' y='196' fill='currentColor' style='font-size:1em'>0</text>
<text text-anchor='middle' x='176' y='4' fill='currentColor' style='font-size:1em'>6</text>
<text text-anchor='middle' x='176' y='20' fill='currentColor' style='font-size:1em'>:</text>
<text text-anchor='middle' x='176' y='36' fill='currentColor' style='font-size:1em'>0</text>
<text text-anchor='middle' x='176' y='52' fill='currentColor' style='font-size:1em'>0</text>
<text text-anchor='middle' x='176' y='68' fill='currentColor' style='font-size:1em'>0</text>
<text text-anchor='middle' x='176' y='84' fill='currentColor' style='font-size:1em'>:</text>
<text text-anchor='middle' x='176' y='100' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='176' y='116' fill='currentColor' style='font-size:1em'>1</text>
<text text-anchor='middle' x='176' y='132' fill='currentColor' style='font-size:1em'>:</text>
<text text-anchor='middle' x='176' y='148' fill='currentColor' style='font-size:1em'>b</text>
<text text-anchor='middle' x='176' y='164' fill='currentColor' style='font-size:1em'>b</text>
<text text-anchor='middle' x='176' y='196' fill='currentColor' style='font-size:1em'>b</text>
<text text-anchor='middle' x='184' y='20' fill='currentColor' style='font-size:1em'>/</text>
<text text-anchor='middle' x='184' y='36' fill='currentColor' style='font-size:1em'>0</text>
<text text-anchor='middle' x='184' y='52' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='184' y='68' fill='currentColor' style='font-size:1em'>b</text>
<text text-anchor='middle' x='184' y='84' fill='currentColor' style='font-size:1em'>/</text>
<text text-anchor='middle' x='184' y='100' fill='currentColor' style='font-size:1em'>0</text>
<text text-anchor='middle' x='184' y='116' fill='currentColor' style='font-size:1em'>:</text>
<text text-anchor='middle' x='184' y='132' fill='currentColor' style='font-size:1em'>/</text>
<text text-anchor='middle' x='184' y='148' fill='currentColor' style='font-size:1em'>0</text>
<text text-anchor='middle' x='184' y='164' fill='currentColor' style='font-size:1em'>1</text>
<text text-anchor='middle' x='184' y='196' fill='currentColor' style='font-size:1em'>f</text>
<text text-anchor='middle' x='192' y='20' fill='currentColor' style='font-size:1em'>6</text>
<text text-anchor='middle' x='192' y='36' fill='currentColor' style='font-size:1em'>:</text>
<text text-anchor='middle' x='192' y='52' fill='currentColor' style='font-size:1em'>:</text>
<text text-anchor='middle' x='192' y='68' fill='currentColor' style='font-size:1em'>:</text>
<text text-anchor='middle' x='192' y='84' fill='currentColor' style='font-size:1em'>6</text>
<text text-anchor='middle' x='192' y='100' fill='currentColor' style='font-size:1em'>:</text>
<text text-anchor='middle' x='192' y='116' fill='currentColor' style='font-size:1em'>:</text>
<text text-anchor='middle' x='192' y='132' fill='currentColor' style='font-size:1em'>6</text>
<text text-anchor='middle' x='192' y='148' fill='currentColor' style='font-size:1em'>:</text>
<text text-anchor='middle' x='192' y='164' fill='currentColor' style='font-size:1em'>:</text>
<text text-anchor='middle' x='192' y='196' fill='currentColor' style='font-size:1em'>:</text>
<text text-anchor='middle' x='200' y='20' fill='currentColor' style='font-size:1em'>0</text>
<text text-anchor='middle' x='200' y='36' fill='currentColor' style='font-size:1em'>:</text>
<text text-anchor='middle' x='200' y='52' fill='currentColor' style='font-size:1em'>:</text>
<text text-anchor='middle' x='200' y='68' fill='currentColor' style='font-size:1em'>:</text>
<text text-anchor='middle' x='200' y='84' fill='currentColor' style='font-size:1em'>0</text>
<text text-anchor='middle' x='200' y='100' fill='currentColor' style='font-size:1em'>:</text>
<text text-anchor='middle' x='200' y='132' fill='currentColor' style='font-size:1em'>0</text>
<text text-anchor='middle' x='200' y='148' fill='currentColor' style='font-size:1em'>:</text>
<text text-anchor='middle' x='200' y='164' fill='currentColor' style='font-size:1em'>:</text>
<text text-anchor='middle' x='200' y='196' fill='currentColor' style='font-size:1em'>:</text>
<text text-anchor='middle' x='208' y='36' fill='currentColor' style='font-size:1em'>/</text>
<text text-anchor='middle' x='208' y='52' fill='currentColor' style='font-size:1em'>/</text>
<text text-anchor='middle' x='208' y='68' fill='currentColor' style='font-size:1em'>/</text>
<text text-anchor='middle' x='208' y='116' fill='currentColor' style='font-size:1em'>6</text>
<text text-anchor='middle' x='208' y='148' fill='currentColor' style='font-size:1em'>/</text>
<text text-anchor='middle' x='208' y='164' fill='currentColor' style='font-size:1em'>/</text>
<text text-anchor='middle' x='208' y='196' fill='currentColor' style='font-size:1em'>/</text>
<text text-anchor='middle' x='216' y='20' fill='currentColor' style='font-size:1em'>-</text>
<text text-anchor='middle' x='216' y='36' fill='currentColor' style='font-size:1em'>6</text>
<text text-anchor='middle' x='216' y='52' fill='currentColor' style='font-size:1em'>6</text>
<text text-anchor='middle' x='216' y='68' fill='currentColor' style='font-size:1em'>6</text>
<text text-anchor='middle' x='216' y='84' fill='currentColor' style='font-size:1em'>-</text>
<text text-anchor='middle' x='216' y='100' fill='currentColor' style='font-size:1em'>1</text>
<text text-anchor='middle' x='216' y='116' fill='currentColor' style='font-size:1em'>4</text>
<text text-anchor='middle' x='216' y='132' fill='currentColor' style='font-size:1em'>-</text>
<text text-anchor='middle' x='216' y='148' fill='currentColor' style='font-size:1em'>6</text>
<text text-anchor='middle' x='216' y='164' fill='currentColor' style='font-size:1em'>6</text>
<text text-anchor='middle' x='216' y='196' fill='currentColor' style='font-size:1em'>6</text>
<text text-anchor='middle' x='224' y='36' fill='currentColor' style='font-size:1em'>4</text>
<text text-anchor='middle' x='224' y='52' fill='currentColor' style='font-size:1em'>4</text>
<text text-anchor='middle' x='224' y='68' fill='currentColor' style='font-size:1em'>4</text>
<text text-anchor='middle' x='224' y='100' fill='currentColor' style='font-size:1em'>0</text>
<text text-anchor='middle' x='224' y='148' fill='currentColor' style='font-size:1em'>4</text>
<text text-anchor='middle' x='224' y='164' fill='currentColor' style='font-size:1em'>4</text>
<text text-anchor='middle' x='224' y='196' fill='currentColor' style='font-size:1em'>4</text>
<text text-anchor='middle' x='232' y='20' fill='currentColor' style='font-size:1em'>M</text>
<text text-anchor='middle' x='232' y='84' fill='currentColor' style='font-size:1em'>C</text>
<text text-anchor='middle' x='232' y='100' fill='currentColor' style='font-size:1em'>8</text>
<text text-anchor='middle' x='232' y='116' fill='currentColor' style='font-size:1em'>-</text>
<text text-anchor='middle' x='232' y='132' fill='currentColor' style='font-size:1em'>c</text>
<text text-anchor='middle' x='240' y='20' fill='currentColor' style='font-size:1em'>G</text>
<text text-anchor='middle' x='240' y='36' fill='currentColor' style='font-size:1em'>-</text>
<text text-anchor='middle' x='240' y='52' fill='currentColor' style='font-size:1em'>-</text>
<text text-anchor='middle' x='240' y='68' fill='currentColor' style='font-size:1em'>-</text>
<text text-anchor='middle' x='240' y='84' fill='currentColor' style='font-size:1em'>L</text>
<text text-anchor='middle' x='240' y='132' fill='currentColor' style='font-size:1em'>l</text>
<text text-anchor='middle' x='240' y='148' fill='currentColor' style='font-size:1em'>-</text>
<text text-anchor='middle' x='240' y='164' fill='currentColor' style='font-size:1em'>-</text>
<text text-anchor='middle' x='240' y='196' fill='currentColor' style='font-size:1em'>-</text>
<text text-anchor='middle' x='248' y='20' fill='currentColor' style='font-size:1em'>M</text>
<text text-anchor='middle' x='248' y='84' fill='currentColor' style='font-size:1em'>U</text>
<text text-anchor='middle' x='248' y='100' fill='currentColor' style='font-size:1em'>-</text>
<text text-anchor='middle' x='248' y='116' fill='currentColor' style='font-size:1em'>C</text>
<text text-anchor='middle' x='248' y='132' fill='currentColor' style='font-size:1em'>u</text>
<text text-anchor='middle' x='256' y='20' fill='currentColor' style='font-size:1em'>T</text>
<text text-anchor='middle' x='256' y='36' fill='currentColor' style='font-size:1em'>N</text>
<text text-anchor='middle' x='256' y='52' fill='currentColor' style='font-size:1em'>T</text>
<text text-anchor='middle' x='256' y='68' fill='currentColor' style='font-size:1em'>T</text>
<text text-anchor='middle' x='256' y='84' fill='currentColor' style='font-size:1em'>S</text>
<text text-anchor='middle' x='256' y='116' fill='currentColor' style='font-size:1em'>i</text>
<text text-anchor='middle' x='256' y='132' fill='currentColor' style='font-size:1em'>s</text>
<text text-anchor='middle' x='256' y='148' fill='currentColor' style='font-size:1em'>N</text>
<text text-anchor='middle' x='256' y='164' fill='currentColor' style='font-size:1em'>N</text>
<text text-anchor='middle' x='256' y='196' fill='currentColor' style='font-size:1em'>N</text>
<text text-anchor='middle' x='264' y='36' fill='currentColor' style='font-size:1em'>O</text>
<text text-anchor='middle' x='264' y='52' fill='currentColor' style='font-size:1em'>O</text>
<text text-anchor='middle' x='264' y='68' fill='currentColor' style='font-size:1em'>O</text>
<text text-anchor='middle' x='264' y='84' fill='currentColor' style='font-size:1em'>T</text>
<text text-anchor='middle' x='264' y='100' fill='currentColor' style='font-size:1em'>c</text>
<text text-anchor='middle' x='264' y='116' fill='currentColor' style='font-size:1em'>l</text>
<text text-anchor='middle' x='264' y='132' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='264' y='148' fill='currentColor' style='font-size:1em'>o</text>
<text text-anchor='middle' x='264' y='164' fill='currentColor' style='font-size:1em'>o</text>
<text text-anchor='middle' x='264' y='196' fill='currentColor' style='font-size:1em'>o</text>
<text text-anchor='middle' x='272' y='36' fill='currentColor' style='font-size:1em'>D</text>
<text text-anchor='middle' x='272' y='52' fill='currentColor' style='font-size:1em'>R</text>
<text text-anchor='middle' x='272' y='68' fill='currentColor' style='font-size:1em'>R</text>
<text text-anchor='middle' x='272' y='84' fill='currentColor' style='font-size:1em'>E</text>
<text text-anchor='middle' x='272' y='100' fill='currentColor' style='font-size:1em'>l</text>
<text text-anchor='middle' x='272' y='116' fill='currentColor' style='font-size:1em'>i</text>
<text text-anchor='middle' x='272' y='132' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='272' y='148' fill='currentColor' style='font-size:1em'>d</text>
<text text-anchor='middle' x='272' y='164' fill='currentColor' style='font-size:1em'>d</text>
<text text-anchor='middle' x='272' y='196' fill='currentColor' style='font-size:1em'>d</text>
<text text-anchor='middle' x='280' y='36' fill='currentColor' style='font-size:1em'>E</text>
<text text-anchor='middle' x='280' y='52' fill='currentColor' style='font-size:1em'>1</text>
<text text-anchor='middle' x='280' y='68' fill='currentColor' style='font-size:1em'>2</text>
<text text-anchor='middle' x='280' y='84' fill='currentColor' style='font-size:1em'>R</text>
<text text-anchor='middle' x='280' y='100' fill='currentColor' style='font-size:1em'>u</text>
<text text-anchor='middle' x='280' y='116' fill='currentColor' style='font-size:1em'>u</text>
<text text-anchor='middle' x='280' y='132' fill='currentColor' style='font-size:1em'>r</text>
<text text-anchor='middle' x='280' y='148' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='280' y='164' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='280' y='196' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='288' y='100' fill='currentColor' style='font-size:1em'>s</text>
<text text-anchor='middle' x='288' y='116' fill='currentColor' style='font-size:1em'>m</text>
<text text-anchor='middle' x='288' y='132' fill='currentColor' style='font-size:1em'>P</text>
<text text-anchor='middle' x='296' y='36' fill='currentColor' style='font-size:1em'>l</text>
<text text-anchor='middle' x='296' y='100' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='296' y='132' fill='currentColor' style='font-size:1em'>o</text>
<text text-anchor='middle' x='296' y='148' fill='currentColor' style='font-size:1em'>1</text>
<text text-anchor='middle' x='296' y='164' fill='currentColor' style='font-size:1em'>2</text>
<text text-anchor='middle' x='296' y='196' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='304' y='36' fill='currentColor' style='font-size:1em'>o</text>
<text text-anchor='middle' x='304' y='100' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='304' y='116' fill='currentColor' style='font-size:1em'>L</text>
<text text-anchor='middle' x='304' y='132' fill='currentColor' style='font-size:1em'>d</text>
<text text-anchor='middle' x='312' y='36' fill='currentColor' style='font-size:1em'>o</text>
<text text-anchor='middle' x='312' y='100' fill='currentColor' style='font-size:1em'>r</text>
<text text-anchor='middle' x='312' y='116' fill='currentColor' style='font-size:1em'>o</text>
<text text-anchor='middle' x='312' y='132' fill='currentColor' style='font-size:1em'>N</text>
<text text-anchor='middle' x='312' y='148' fill='currentColor' style='font-size:1em'>P</text>
<text text-anchor='middle' x='312' y='164' fill='currentColor' style='font-size:1em'>P</text>
<text text-anchor='middle' x='312' y='196' fill='currentColor' style='font-size:1em'>P</text>
<text text-anchor='middle' x='320' y='36' fill='currentColor' style='font-size:1em'>p</text>
<text text-anchor='middle' x='320' y='100' fill='currentColor' style='font-size:1em'>_</text>
<text text-anchor='middle' x='320' y='116' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='320' y='132' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='320' y='148' fill='currentColor' style='font-size:1em'>o</text>
<text text-anchor='middle' x='320' y='164' fill='currentColor' style='font-size:1em'>o</text>
<text text-anchor='middle' x='320' y='196' fill='currentColor' style='font-size:1em'>o</text>
<text text-anchor='middle' x='328' y='36' fill='currentColor' style='font-size:1em'>b</text>
<text text-anchor='middle' x='328' y='100' fill='currentColor' style='font-size:1em'>s</text>
<text text-anchor='middle' x='328' y='116' fill='currentColor' style='font-size:1em'>d</text>
<text text-anchor='middle' x='328' y='132' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='328' y='148' fill='currentColor' style='font-size:1em'>d</text>
<text text-anchor='middle' x='328' y='164' fill='currentColor' style='font-size:1em'>d</text>
<text text-anchor='middle' x='328' y='196' fill='currentColor' style='font-size:1em'>d</text>
<text text-anchor='middle' x='336' y='36' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='336' y='100' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='336' y='116' fill='currentColor' style='font-size:1em'>B</text>
<text text-anchor='middle' x='336' y='132' fill='currentColor' style='font-size:1em'>s</text>
<text text-anchor='middle' x='344' y='36' fill='currentColor' style='font-size:1em'>c</text>
<text text-anchor='middle' x='344' y='100' fill='currentColor' style='font-size:1em'>r</text>
<text text-anchor='middle' x='344' y='116' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='344' y='148' fill='currentColor' style='font-size:1em'>S</text>
<text text-anchor='middle' x='344' y='164' fill='currentColor' style='font-size:1em'>S</text>
<text text-anchor='middle' x='344' y='196' fill='currentColor' style='font-size:1em'>S</text>
<text text-anchor='middle' x='352' y='36' fill='currentColor' style='font-size:1em'>k</text>
<text text-anchor='middle' x='352' y='100' fill='currentColor' style='font-size:1em'>v</text>
<text text-anchor='middle' x='352' y='116' fill='currentColor' style='font-size:1em'>l</text>
<text text-anchor='middle' x='352' y='148' fill='currentColor' style='font-size:1em'>u</text>
<text text-anchor='middle' x='352' y='164' fill='currentColor' style='font-size:1em'>u</text>
<text text-anchor='middle' x='352' y='196' fill='currentColor' style='font-size:1em'>u</text>
<text text-anchor='middle' x='360' y='100' fill='currentColor' style='font-size:1em'>i</text>
<text text-anchor='middle' x='360' y='116' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='360' y='148' fill='currentColor' style='font-size:1em'>b</text>
<text text-anchor='middle' x='360' y='164' fill='currentColor' style='font-size:1em'>b</text>
<text text-anchor='middle' x='360' y='196' fill='currentColor' style='font-size:1em'>b</text>
<text text-anchor='middle' x='368' y='100' fill='currentColor' style='font-size:1em'>c</text>
<text text-anchor='middle' x='368' y='116' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='368' y='148' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='368' y='164' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='368' y='196' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='376' y='100' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='376' y='116' fill='currentColor' style='font-size:1em'>c</text>
<text text-anchor='middle' x='376' y='148' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='376' y='164' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='376' y='196' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='384' y='100' fill='currentColor' style='font-size:1em'>S</text>
<text text-anchor='middle' x='384' y='116' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='384' y='148' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='384' y='164' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='384' y='196' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='392' y='100' fill='currentColor' style='font-size:1em'>u</text>
<text text-anchor='middle' x='392' y='116' fill='currentColor' style='font-size:1em'>r</text>
<text text-anchor='middle' x='400' y='100' fill='currentColor' style='font-size:1em'>b</text>
<text text-anchor='middle' x='408' y='100' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='408' y='116' fill='currentColor' style='font-size:1em'>I</text>
<text text-anchor='middle' x='416' y='100' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='416' y='116' fill='currentColor' style='font-size:1em'>P</text>
<text text-anchor='middle' x='424' y='100' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='424' y='116' fill='currentColor' style='font-size:1em'>P</text>
<text text-anchor='middle' x='432' y='100' fill='currentColor' style='font-size:1em'>s</text>
<text text-anchor='middle' x='432' y='116' fill='currentColor' style='font-size:1em'>o</text>
<text text-anchor='middle' x='440' y='116' fill='currentColor' style='font-size:1em'>o</text>
<text text-anchor='middle' x='448' y='116' fill='currentColor' style='font-size:1em'>l</text>
</g>

    </svg>
  
</div>
<h2 id="configuring-tor1-spine-switch">Configuring TOR1 Spine Switch</h2>
<pre tabindex="0"><code class="language-routeros" data-lang="routeros"># Enable L3 Hardware offloading if available
/interface/ethernet/switch set 0 l3-hw-offloading=yes
/interface/ethernet/switch/port set [find] l3-hw-offloading=yes

# Add Routed Interface and static address on TOR1
/interface/vlan add interface=bridge vlan-id=901 name=901-Spine
/ipv6/address add address=2001:db8:abcd:e00a::1 advertise=yes interface=901-Spine
/ipv6/nd set [ find default=yes ] advertise-dns=yes dns=2606:4700:4700::64,2606:4700:4700::6400 hop-limit=64 other-configuration=yes ra-delay=0s
/ipv6/nd add advertise-dns=yes interface=901-Spine other-configuration=yes

# Configure iBGP Route Reflector
/routing/bgp/instance add as=65534 name=spine-rr router-id=0.3.0.9 cluster-id=5.0.0.9

# Add BGP Connection Templates
/routing/bgp/template add as=65534 name=spine-template

# Add iBGP Connection for dynamic listener for K8s nodes on VLAN901-Spine
/routing/bgp/connection add instance=spine-rr local.role=ibgp-rr listen=yes local.address=2001:db8:abcd:e00a::1 name=nodes-dynamic remote.address=2001:db8:abcd:e00a::/64 template=spine-template
</code></pre><h2 id="configuring-tor2-spine-switch">Configuring TOR2 Spine Switch</h2>
<pre tabindex="0"><code class="language-routeros" data-lang="routeros"># Enable L3 Hardware offloading if available
/interface/ethernet/switch set 0 l3-hw-offloading=yes
/interface/ethernet/switch/port set [find] l3-hw-offloading=yes

# Add Routed Interface and static address on TOR2
/interface/vlan add interface=bridge vlan-id=902 name=902-Spine
/ipv6/address add address=2001:db8:abcd:e00b::1 advertise=yes interface=902-Spine
/ipv6/nd set [ find default=yes ] advertise-dns=yes dns=2606:4700:4700::64,2606:4700:4700::6400 hop-limit=64 other-configuration=yes ra-delay=0s
/ipv6/nd add advertise-dns=yes interface=902-Spine other-configuration=yes

# Configure iBGP Route Reflector
/routing/bgp/instance add as=65534 name=spine-rr router-id=0.3.5.4 cluster-id=5.0.0.9

# Add BGP Connection Templates
/routing/bgp/template add as=65534 name=spine-template

# Add iBGP Connection for dynamic listener for K8s nodes on VLAN902-Spine
/routing/bgp/connection add instance=spine-rr local.role=ibgp-rr listen=yes local.address=2001:db8:abcd:e00b::1 name=nodes-dynamic remote.address=2001:db8:abcd:e00b::/64 template=spine-template
</code></pre><h2 id="configure-r1-edge-leaf-wan-router">Configure R1 Edge Leaf WAN Router</h2>
<pre tabindex="0"><code class="language-routeros" data-lang="routeros"># Add routed interface and static address to both Spine Switches
/interface/vlan add interface=bridge vlan-id=901 name=901-Spine
/interface/vlan add interface=bridge vlan-id=902 name=902-Spine
/ipv6 address add address=2001:db8:abcd:e00a::5009 advertise=no interface=901-Spine
/ipv6 address add address=2001:db8:abcd:e00b::5009 advertise=no interface=902-Spine

# Add BGP Connection Templates
/routing/bgp/template add as=65534 name=spine-connection-template
/routing/bgp/instance add as=65534 name=edge router-id=5.0.0.9

# Add iBGP Connection to both Spine Switches
/routing/bgp/connection add instance=edge local.address=2001:db8:abcd:e00a::5009 .role=ibgp name=to-TOR1 output.default-originate=if-installed remote.address=2001:db8:abcd:e00a::1 template=spine-template
/routing/bgp/connection add instance=edge local.address=2001:db8:abcd:e00b::5009 .role=ibgp name=to-TOR2 output.default-originate=if-installed remote.address=2001:db8:abcd:e00b::1 template=spine-template
</code></pre><h2 id="cilium-bgp-configuration">Cilium BGP Configuration</h2>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-yaml" data-lang="yaml"><span style="display:flex;"><span><span style="color:#f92672">apiVersion</span>: <span style="color:#ae81ff">cilium.io/v2</span>
</span></span><span style="display:flex;"><span><span style="color:#f92672">kind</span>: <span style="color:#ae81ff">CiliumLoadBalancerIPPool</span>
</span></span><span style="display:flex;"><span><span style="color:#f92672">metadata</span>:
</span></span><span style="display:flex;"><span>  <span style="color:#f92672">name</span>: <span style="color:#ae81ff">cluster-v6-pool</span>
</span></span><span style="display:flex;"><span><span style="color:#f92672">spec</span>:
</span></span><span style="display:flex;"><span>  <span style="color:#f92672">blocks</span>:
</span></span><span style="display:flex;"><span>    - <span style="color:#f92672">cidr</span>: <span style="color:#ae81ff">2001</span>:<span style="color:#ae81ff">db8:abcd:e0a1::/64</span>
</span></span><span style="display:flex;"><span>---
</span></span><span style="display:flex;"><span><span style="color:#f92672">apiVersion</span>: <span style="color:#ae81ff">cilium.io/v2</span>
</span></span><span style="display:flex;"><span><span style="color:#f92672">kind</span>: <span style="color:#ae81ff">CiliumBGPClusterConfig</span>
</span></span><span style="display:flex;"><span><span style="color:#f92672">metadata</span>:
</span></span><span style="display:flex;"><span>  <span style="color:#f92672">name</span>: <span style="color:#ae81ff">cilium-bgp</span>
</span></span><span style="display:flex;"><span><span style="color:#f92672">spec</span>:
</span></span><span style="display:flex;"><span>  <span style="color:#f92672">bgpInstances</span>:
</span></span><span style="display:flex;"><span>    - <span style="color:#f92672">localASN</span>: <span style="color:#ae81ff">65534</span>
</span></span><span style="display:flex;"><span>      <span style="color:#f92672">name</span>: <span style="color:#ae81ff">instance-65534</span>
</span></span><span style="display:flex;"><span>      <span style="color:#f92672">peers</span>:
</span></span><span style="display:flex;"><span>        - <span style="color:#f92672">name</span>: <span style="color:#ae81ff">peer-tor1</span>
</span></span><span style="display:flex;"><span>          <span style="color:#f92672">peerASN</span>: <span style="color:#ae81ff">65534</span>
</span></span><span style="display:flex;"><span>          <span style="color:#f92672">peerAddress</span>: <span style="color:#ae81ff">2001</span>:<span style="color:#ae81ff">db8:abcd:e00a::1</span> <span style="color:#75715e"># TOR1 Spine Router VLAN901</span>
</span></span><span style="display:flex;"><span>          <span style="color:#f92672">peerConfigRef</span>:
</span></span><span style="display:flex;"><span>            <span style="color:#f92672">name</span>: <span style="color:#ae81ff">cilium-peer</span>
</span></span><span style="display:flex;"><span>        - <span style="color:#f92672">name</span>: <span style="color:#ae81ff">peer-tor2</span>
</span></span><span style="display:flex;"><span>          <span style="color:#f92672">peerASN</span>: <span style="color:#ae81ff">65534</span>
</span></span><span style="display:flex;"><span>          <span style="color:#f92672">peerAddress</span>: <span style="color:#ae81ff">2001</span>:<span style="color:#ae81ff">db8:abcd:e00b::1</span> <span style="color:#75715e"># TOR2 Spine Router VLAN902</span>
</span></span><span style="display:flex;"><span>          <span style="color:#f92672">peerConfigRef</span>:
</span></span><span style="display:flex;"><span>            <span style="color:#f92672">name</span>: <span style="color:#ae81ff">cilium-peer</span>
</span></span><span style="display:flex;"><span>  <span style="color:#f92672">nodeSelector</span>:
</span></span><span style="display:flex;"><span>    <span style="color:#f92672">matchLabels</span>:
</span></span><span style="display:flex;"><span>      <span style="color:#f92672">kubernetes.io/arch</span>: <span style="color:#ae81ff">amd64</span>
</span></span><span style="display:flex;"><span>---
</span></span><span style="display:flex;"><span><span style="color:#f92672">apiVersion</span>: <span style="color:#ae81ff">cilium.io/v2</span>
</span></span><span style="display:flex;"><span><span style="color:#f92672">kind</span>: <span style="color:#ae81ff">CiliumBGPPeerConfig</span>
</span></span><span style="display:flex;"><span><span style="color:#f92672">metadata</span>:
</span></span><span style="display:flex;"><span>  <span style="color:#f92672">name</span>: <span style="color:#ae81ff">cilium-peer</span>
</span></span><span style="display:flex;"><span><span style="color:#f92672">spec</span>:
</span></span><span style="display:flex;"><span>  <span style="color:#f92672">families</span>:
</span></span><span style="display:flex;"><span>    - <span style="color:#f92672">advertisements</span>:
</span></span><span style="display:flex;"><span>        <span style="color:#f92672">matchLabels</span>:
</span></span><span style="display:flex;"><span>          <span style="color:#f92672">advertise</span>: <span style="color:#ae81ff">bgp</span>
</span></span><span style="display:flex;"><span>      <span style="color:#f92672">afi</span>: <span style="color:#ae81ff">ipv6</span>
</span></span><span style="display:flex;"><span>      <span style="color:#f92672">safi</span>: <span style="color:#ae81ff">unicast</span>
</span></span><span style="display:flex;"><span>  <span style="color:#f92672">gracefulRestart</span>:
</span></span><span style="display:flex;"><span>    <span style="color:#f92672">enabled</span>: <span style="color:#66d9ef">true</span>
</span></span><span style="display:flex;"><span>    <span style="color:#f92672">restartTimeSeconds</span>: <span style="color:#ae81ff">15</span>
</span></span><span style="display:flex;"><span>  <span style="color:#f92672">timers</span>:
</span></span><span style="display:flex;"><span>    <span style="color:#f92672">holdTimeSeconds</span>: <span style="color:#ae81ff">9</span>
</span></span><span style="display:flex;"><span>    <span style="color:#f92672">keepAliveTimeSeconds</span>: <span style="color:#ae81ff">3</span>
</span></span><span style="display:flex;"><span>---
</span></span><span style="display:flex;"><span><span style="color:#f92672">apiVersion</span>: <span style="color:#ae81ff">cilium.io/v2</span>
</span></span><span style="display:flex;"><span><span style="color:#f92672">kind</span>: <span style="color:#ae81ff">CiliumBGPAdvertisement</span>
</span></span><span style="display:flex;"><span><span style="color:#f92672">metadata</span>:
</span></span><span style="display:flex;"><span>  <span style="color:#f92672">labels</span>:
</span></span><span style="display:flex;"><span>    <span style="color:#f92672">advertise</span>: <span style="color:#ae81ff">bgp</span>
</span></span><span style="display:flex;"><span>  <span style="color:#f92672">name</span>: <span style="color:#ae81ff">bgp-advertisements</span>
</span></span><span style="display:flex;"><span><span style="color:#f92672">spec</span>:
</span></span><span style="display:flex;"><span>  <span style="color:#f92672">advertisements</span>:
</span></span><span style="display:flex;"><span>    - <span style="color:#f92672">advertisementType</span>: <span style="color:#ae81ff">Service</span>
</span></span><span style="display:flex;"><span>      <span style="color:#f92672">selector</span>:
</span></span><span style="display:flex;"><span>        <span style="color:#f92672">matchExpressions</span>: []
</span></span><span style="display:flex;"><span>      <span style="color:#f92672">service</span>:
</span></span><span style="display:flex;"><span>        <span style="color:#f92672">addresses</span>:
</span></span><span style="display:flex;"><span>          - <span style="color:#ae81ff">ClusterIP</span>
</span></span><span style="display:flex;"><span>          - <span style="color:#ae81ff">LoadBalancerIP</span>
</span></span><span style="display:flex;"><span>    - <span style="color:#f92672">advertisementType</span>: <span style="color:#ae81ff">CiliumPodIPPool</span>
</span></span><span style="display:flex;"><span>    - <span style="color:#f92672">advertisementType</span>: <span style="color:#ae81ff">PodCIDR</span>
</span></span><span style="display:flex;"><span>    - <span style="color:#f92672">advertisementType</span>: <span style="color:#ae81ff">Interface</span>
</span></span><span style="display:flex;"><span>      <span style="color:#f92672">interface</span>:
</span></span><span style="display:flex;"><span>        <span style="color:#f92672">name</span>: <span style="color:#ae81ff">dummy0</span>
</span></span></code></pre></div>]]></content></item><item><title>Custom IPv6 Dashboard</title><link>https://www.sirmysterion.com/posts/20251127-custom-ipv6-dashboard/</link><pubDate>Thu, 27 Nov 2025 00:00:00 +0000</pubDate><guid>https://www.sirmysterion.com/posts/20251127-custom-ipv6-dashboard/</guid><description>&lt;h2 id="librenms--custom-ipv6-client-dashboard"&gt;&lt;a href="https://gitlab.com/sirmysterion/librenms-ipv6-dashboard"&gt;LibreNMS + Custom IPv6 Client Dashboard&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;&lt;img src="https://www.sirmysterion.com/IPv6ClientDashboard.png" alt="IPv6ClientDashboard"&gt;&lt;/p&gt;
&lt;h3 id="the-problem"&gt;The Problem&lt;/h3&gt;
&lt;p&gt;The Network monitoring solutions that I have seen seem to be stuck in the past with IPv4 only networks, seemingly relying on ARP and Nmap scans of network blocks to find devices and services on the network.
From what I have heard, a single IPv6 Subnet with a /64 prefix has some 18 quintillion Addresses. That does not include the extra 64 thousand other subnets in the /48 that likely is assigned to location&lt;/p&gt;</description><content type="html"><![CDATA[<h2 id="librenms--custom-ipv6-client-dashboard"><a href="https://gitlab.com/sirmysterion/librenms-ipv6-dashboard">LibreNMS + Custom IPv6 Client Dashboard</a></h2>
<p><img src="/IPv6ClientDashboard.png" alt="IPv6ClientDashboard"></p>
<h3 id="the-problem">The Problem</h3>
<p>The Network monitoring solutions that I have seen seem to be stuck in the past with IPv4 only networks, seemingly relying on ARP and Nmap scans of network blocks to find devices and services on the network.
From what I have heard, a single IPv6 Subnet with a /64 prefix has some 18 quintillion Addresses. That does not include the extra 64 thousand other subnets in the /48 that likely is assigned to location</p>
<p>I have not done the math myself but scanning one address after another does not seem to be a good use of time. But good news! IPv6 neighbor discovery or ND tables do exist.
I have just not found anyone else but routers/switches using them. So time to build my own with my good buddy Claude.</p>
<h3 id="the-wish-list">The Wish list:</h3>
<ul>
<li>I want to know how many host clients are on my network.</li>
<li>I want to be able to find IPv6 Addresses based on MAC addresses and MAC address based on IPv6</li>
<li>I also would to know which port on my switches the device can be found.
<ul>
<li>This wont&rsquo; tell me down to the VM but it will tell me which VM Host to look at and which MAC Address to search for in the NIC config</li>
</ul>
</li>
</ul>
<h3 id="the-partial-solution">The Partial Solution</h3>
<p>LibreNMS has some nice out of the box features, adds SNMP Monitoring and a basic Network hardware neighbor map
Oh and there some nice uptime and health metrics in there.
MikroTik&rsquo;s RouterOS does not expose IPv6 neighbor tables via SNMP, so some more work was required.</p>
<h3 id="the-solution">The Solution:</h3>
<p>Built a custom stack combining:</p>
<ul>
<li>LibreNMS for base device/port discovery via SNMP</li>
<li>Custom sync service polling MikroTik REST APIs every 5 minutes
<ul>
<li>/rest/ipv6/neighbor for IPv6↔MAC mappings from routers</li>
<li>/rest/interface/bridge/host for MAC↔Port mappings from switches</li>
</ul>
</li>
<li>Python web dashboard with real-time filtering and multiple view modes (IPv6, MAC-grouped)</li>
</ul>
<h3 id="bonus-discovery">Bonus Discovery:</h3>
<p>During testing, found one switch had 28,000+ bridge table entries due to misconfigured VLAN trunking
That can&rsquo;t be right, am I getting mac flooding or a switching loop somewhere? Further investigation showed each of my 8 SFP+ ports on my CRS309 had ~4000 MAC addresses in the table.
Turns out that for every configured VLAN on a port creates a mac address entry for the ports own mac address. 4000 Vlans, by 8 ports. That&rsquo;s a lot of MAC Addresses.</p>
<pre tabindex="0"><code class="language-RouterOS" data-lang="RouterOS">/interface bridge vlan
add bridge=bridge tagged=all vlan-ids=2-3999
</code></pre><p>While Allowing VLANs 1-3999 to be tagged on the port makes it easy to trunk any VLAN I throw at it, I realistically am only using about 15
Once I sorted out the tagged VLANs to those in use, the host table went from 28,000 hosts to about 215.
And my REST API calls having to generate that many hosts went from 40+ seconds to sub second queries.</p>
<p>Sometimes the best monitoring tools reveal configuration issues you didn&rsquo;t know you had!</p>
<p>Tech Stack: Docker, Python, LibreNMS, MariaDB, MikroTik RouterOS v7+ REST API8</p>
]]></content></item><item><title>Where to Go From Here</title><link>https://www.sirmysterion.com/posts/20251117-where-to-go-from-here/</link><pubDate>Mon, 17 Nov 2025 00:00:00 +0000</pubDate><guid>https://www.sirmysterion.com/posts/20251117-where-to-go-from-here/</guid><description>&lt;p&gt;The website might have been rebooted, but everything is not working 100% yet. So far, it is running on Kubernetes hosted by Talos Linux in a 3-node cluster. The cluster is using distributed file storage backed by the &lt;a href="https://github.com/piraeusdatastore/piraeus-operator"&gt;Piraeus Operator&lt;/a&gt;, running in an IPv6-only environment using &lt;a href="https://cilium.io/"&gt;Cilium&lt;/a&gt; CNI with Gateway API enabled. Backups are running using a combination of &lt;a href="https://github.com/vmware-tanzu/velero"&gt;Velero&lt;/a&gt; and a local self-hosted &lt;a href="https://github.com/minio/minio"&gt;MinIO&lt;/a&gt;.&lt;/p&gt;
&lt;h2 id="outstanding-issues"&gt;Outstanding Issues&lt;/h2&gt;
&lt;p&gt;There are still a couple of issues to resolve:&lt;/p&gt;</description><content type="html"><![CDATA[<p>The website might have been rebooted, but everything is not working 100% yet. So far, it is running on Kubernetes hosted by Talos Linux in a 3-node cluster. The cluster is using distributed file storage backed by the <a href="https://github.com/piraeusdatastore/piraeus-operator">Piraeus Operator</a>, running in an IPv6-only environment using <a href="https://cilium.io/">Cilium</a> CNI with Gateway API enabled. Backups are running using a combination of <a href="https://github.com/vmware-tanzu/velero">Velero</a> and a local self-hosted <a href="https://github.com/minio/minio">MinIO</a>.</p>
<h2 id="outstanding-issues">Outstanding Issues</h2>
<p>There are still a couple of issues to resolve:</p>
<ol>
<li>
<p><strong>DNS64/NAT64</strong></p>
<ul>
<li>CoreDNS sometimes still gives out A records instead of DNS64 synthesized DNS records. As a result, some images fail to pull if they come from repositories with IPv4-only records.</li>
</ul>
</li>
<li>
<p><strong>IaC Deployment - Mostly Complete</strong></p>
<ul>
<li>There is a mix of Terraform, Helm, Kustomize, and ArgoCD. The <a href="https://gitlab.com/sirmysterion/homelab">homelab</a> repo needs some cleanup and consolidation to streamline the deployment process.</li>
</ul>
</li>
<li>
<p><strong>Virtualized Compute</strong></p>
<ul>
<li>Currently, Talos Linux is running in VMs inside of Proxmox. Next steps include replacing Proxmox with bare-metal Talos Linux and looking into KubeVirt for any remaining virtualized workloads.</li>
</ul>
</li>
<li>
<p><strong>IPv4 Accessibility</strong></p>
<ul>
<li>Using Cloudflare&rsquo;s proxy to serve IPv4-only clients from the IPv6-only ingress. This works but adds complexity and an external dependency when using anything but standard HTTP/HTTPS connections.</li>
</ul>
</li>
</ol>
<h2 id="the-good-news">The Good News</h2>
<p>But there is good news! We do have a full-stack Kubernetes cluster running. Backups have been tested, and my Immich app has been successfully restored (full documentation still needed).</p>
<p>LetsEncrypt Certificates and Gateway API have been working well! This website is a testament to that. (Disregard the Cloudflare SSL cert; I&rsquo;m using their proxy to simplify serving IPv4-only clients from my IPv6-only ingress.)</p>
<h2 id="whats-next">What&rsquo;s Next</h2>
<p>Upcoming posts will dive deeper into:</p>
<ul>
<li>The Talos Linux experience and migration from Proxmox</li>
<li>Gateway API configuration and best practices</li>
<li>KubeVirt - For added virtual machine management</li>
<li>Renovate - For Automated dependency updates</li>
<li>Disaster recovery testing with Velero
The infrastructure might not be perfect yet, but it&rsquo;s running production workloads and improving. Stay tuned for more technical deep dives as I work through each challenge.</li>
</ul>
]]></content></item><item><title>Website Reboot: Now on Self-Hosted Kubernetes!</title><link>https://www.sirmysterion.com/posts/20251111-blog-reboot/</link><pubDate>Tue, 11 Nov 2025 00:00:00 +0000</pubDate><guid>https://www.sirmysterion.com/posts/20251111-blog-reboot/</guid><description>&lt;p&gt;Welcome back! The blog is getting a fresh start, and this time it&amp;rsquo;s powered by self-hosted Kubernetes.&lt;/p&gt;
&lt;p&gt;After some time away, I&amp;rsquo;ve decided to reboot the blog with a new infrastructure approach. Rather than relying on traditional hosting or managed services, I&amp;rsquo;ve moved everything to a self-hosted Kubernetes cluster. This gives me complete control over the deployment pipeline, scaling, and infrastructure management.&lt;/p&gt;
&lt;h2 id="whats-new"&gt;What&amp;rsquo;s New&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Self-Hosted Kubernetes&lt;/strong&gt;: Running on my own hardware, giving me full control over the entire stack&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Modern CI/CD&lt;/strong&gt;: Automated deployments with proper containerization&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Infrastructure as Code&lt;/strong&gt;: Everything version controlled and reproducible&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Stay tuned for more posts about the technical details of the setup, lessons learned, and future projects. The blog is back and ready to go!&lt;/p&gt;</description><content type="html"><![CDATA[<p>Welcome back! The blog is getting a fresh start, and this time it&rsquo;s powered by self-hosted Kubernetes.</p>
<p>After some time away, I&rsquo;ve decided to reboot the blog with a new infrastructure approach. Rather than relying on traditional hosting or managed services, I&rsquo;ve moved everything to a self-hosted Kubernetes cluster. This gives me complete control over the deployment pipeline, scaling, and infrastructure management.</p>
<h2 id="whats-new">What&rsquo;s New</h2>
<ul>
<li><strong>Self-Hosted Kubernetes</strong>: Running on my own hardware, giving me full control over the entire stack</li>
<li><strong>Modern CI/CD</strong>: Automated deployments with proper containerization</li>
<li><strong>Infrastructure as Code</strong>: Everything version controlled and reproducible</li>
</ul>
<p>Stay tuned for more posts about the technical details of the setup, lessons learned, and future projects. The blog is back and ready to go!</p>
]]></content></item><item><title>Dynamic DNS with IPv6</title><link>https://www.sirmysterion.com/posts/20191017-dynamic-ipv6-ddns/</link><pubDate>Thu, 17 Oct 2019 00:00:00 +0000</pubDate><guid>https://www.sirmysterion.com/posts/20191017-dynamic-ipv6-ddns/</guid><description>&lt;p&gt;Being a Telus customer, there is native IPv6 available aslong as you play within their rules. I finally got around to building a system
to accommodate this setup. I am still determining how sticky the IPv6 lease from Telus is. Turns out that Telus offers a /56 Prefix as long
as your router only requests an IA-PD and not a IA-NA.&lt;/p&gt;
&lt;p&gt;Quite some time ago I was able to utilize this address space with My Ubiquity Router following [this guide.]
(&lt;a href="https://heald.ca/configuring-telus-optik-ipv6-ubiquiti-edgerouter/"&gt;https://heald.ca/configuring-telus-optik-ipv6-ubiquiti-edgerouter/&lt;/a&gt;) Only recently I looked into My EdgeRouter&amp;rsquo;s v6 firewall rules. While
lacking NETv6_interface address groups, the following rule allows for a Dynamic Prefix Destination rule for a EUI-64 address.
The mask is modified limit it to the 5th Prefix or hex&lt;/p&gt;</description><content type="html"><![CDATA[<p>Being a Telus customer, there is native IPv6 available aslong as you play within their rules. I finally got around to building a system
to accommodate this setup. I am still determining how sticky the IPv6 lease from Telus is. Turns out that Telus offers a /56 Prefix as long
as your router only requests an IA-PD and not a IA-NA.</p>
<p>Quite some time ago I was able to utilize this address space with My Ubiquity Router following [this guide.]
(<a href="https://heald.ca/configuring-telus-optik-ipv6-ubiquiti-edgerouter/">https://heald.ca/configuring-telus-optik-ipv6-ubiquiti-edgerouter/</a>) Only recently I looked into My EdgeRouter&rsquo;s v6 firewall rules. While
lacking NETv6_interface address groups, the following rule allows for a Dynamic Prefix Destination rule for a EUI-64 address.
The mask is modified limit it to the 5th Prefix or hex</p>
<pre tabindex="0"><code>set firewall ipv6-name IPv6-In rule 4 destination address ::5:224:2FFF:FE85:6E10/::00ff:ffff:ffff:ffff:ffff
</code></pre><p>Once I had figured out that the rule would work with a changing address the next problem was updating DNS. Using Cloudflare, it was easy enough
to find scripts to update the entries using their API. Updating my own on premise BIND DNS took a little longer. The following scripts were
added to my crontab and and be used as needed.</p>
<p>One of the main benefits of moving from my Static Hurricane Electric /48 was that I was now able to use Cloudflare&rsquo;s Proxy service and take
advantage of their NAT64 Service. While I had implemented my own NAT64/SIIT-DC Cloudflare was easier. I had come across an issue that was
little known; Cloudflare will provide DNS to free Hurricane Electric addresses but when you try and proxy them or use the NAT64 it will result
in a <a href="https://forums.he.net/index.php?topic=3805.0">generic error</a>.</p>
<h5 id="crontab">crontab:</h5>
<pre tabindex="0"><code>*/5 * * * * /root/Cloudflare.sh HOSTNAME.FQDN
*/5 * * * * /root/Bind.sh HOSTNAME.FQDN
</code></pre><p><a href="/blogRes/10/Cloudflare.sh">Cloudflare.sh</a><br>
<a href="/blogRes/10/Bind.sh">Bind.sh</a></p>
<hr>
<h5 id="sources">Sources:</h5>
<p>[Inbound Firewall rules with DHCPv6-PD] (<a href="https://community.ui.com/questions/Inbound-Firewall-rules-with-DHCPv6-PD/31aac051-4565-451c-89b2-8146a36724e8#comment/36880eb8-b3ef-4431-9e87-6049d2e720bb%29">https://community.ui.com/questions/Inbound-Firewall-rules-with-DHCPv6-PD/31aac051-4565-451c-89b2-8146a36724e8#comment/36880eb8-b3ef-4431-9e87-6049d2e720bb)</a>.</p>
]]></content></item><item><title>iBGP Madness</title><link>https://www.sirmysterion.com/posts/201908021-dn42-ibgp/</link><pubDate>Wed, 21 Aug 2019 00:00:00 +0000</pubDate><guid>https://www.sirmysterion.com/posts/201908021-dn42-ibgp/</guid><description>&lt;p&gt;in the struggle to get OSPFv3 functional between Wireguard Endpoints I ran into a few problems
Using CentOS 7 for the nodes I was seemingly unable to get the OSPF to converge. After many hours
of tweaking configs I landed at a solution. Not at all helped by the fact that Wireguard did not
like keeping the Link-Local Address persistent. The following is what I came up with do updated
the remote node with the correct Link-Local when the tunnel comes up as part of the pre-up
commands.&lt;/p&gt;</description><content type="html"><![CDATA[<p>in the struggle to get OSPFv3 functional between Wireguard Endpoints I ran into a few problems
Using CentOS 7 for the nodes I was seemingly unable to get the OSPF to converge. After many hours
of tweaking configs I landed at a solution. Not at all helped by the fact that Wireguard did not
like keeping the Link-Local Address persistent. The following is what I came up with do updated
the remote node with the correct Link-Local when the tunnel comes up as part of the pre-up
commands.</p>
<p>Replacing variables where necessary they should be easily adapted.</p>
<h5 id="etcwireguardupdatelocalsh">/etc/wireguard/updateLocal.sh</h5>
<pre tabindex="0"><code>#!/bin/bash
sed -i -r -e &#34;s/(define $1\s*=\s*).*/\1$2;/&#34; /etc/bird/bird.conf
birdc configure
</code></pre><h5 id="etcwireguardupdateus_sfo1sh">/etc/wireguard/updateUS_SFO1.sh</h5>
<pre tabindex="0"><code>#!/bin/bash
localNode=&#34;CA_YYC1&#34;
LinkLocal=&#34;$(ip addr show dn42-us-sfo1 | grep &#34;scope link&#34; |  cut -d &#34; &#34; -f6 | cut -d &#34;/&#34; -f1);&#34;
ssh root@dn42-us-sfo1 &#34;/etc/wireguard/updateLocal.sh $localNode $LinkLocal&#34;
</code></pre><hr>
<p>The following excerpt was added in BIRD routing Damon as the OSPFv3 configurations on the remote node:</p>
<pre tabindex="0"><code>interface &#34;dn42-us-sfo1&#34; {
  hello 5;
  cost 100;
  type nbma;  #nonbroadcast Network
  neighbors {
    CA_YYC1 eligible; # Defined Varable that is edited by above script
  };
};
</code></pre>]]></content></item><item><title>Wireguard P2P</title><link>https://www.sirmysterion.com/posts/201908021-dn42-wireguard/</link><pubDate>Wed, 21 Aug 2019 00:00:00 +0000</pubDate><guid>https://www.sirmysterion.com/posts/201908021-dn42-wireguard/</guid><description>&lt;p&gt;Recently after migrating my BGP edge router to a new VM I had issues with my Peers not coming up.
I had changed the way that the tunnels had come up but not in a way that I thought it would affect
the outcome. Turns out there is an extra option to get the destination set. Although hacky the
following added to the wg-quick configurations did the trick.&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;postup = ip -4 address del ${YourPeerIP} dev ${devName}
postup = ip -4 address add ${YourPeerIP} dev ${devName} peer ${peerIP}
&lt;/code&gt;&lt;/pre&gt;&lt;hr&gt;
&lt;h5 id="sources"&gt;Sources:&lt;/h5&gt;
&lt;p&gt;&lt;a href="https://www.wireguard.com"&gt;WireGuard&lt;/a&gt;&lt;/p&gt;</description><content type="html"><![CDATA[<p>Recently after migrating my BGP edge router to a new VM I had issues with my Peers not coming up.
I had changed the way that the tunnels had come up but not in a way that I thought it would affect
the outcome. Turns out there is an extra option to get the destination set. Although hacky the
following added to the wg-quick configurations did the trick.</p>
<pre tabindex="0"><code>postup = ip -4 address del ${YourPeerIP} dev ${devName}
postup = ip -4 address add ${YourPeerIP} dev ${devName} peer ${peerIP}
</code></pre><hr>
<h5 id="sources">Sources:</h5>
<p><a href="https://www.wireguard.com">WireGuard</a></p>
]]></content></item><item><title>Setting Windows Network Location</title><link>https://www.sirmysterion.com/posts/20190614-windowsfirewallzone/</link><pubDate>Fri, 14 Jun 2019 00:00:00 +0000</pubDate><guid>https://www.sirmysterion.com/posts/20190614-windowsfirewallzone/</guid><description>&lt;p&gt;Adding new interfaces or virtual interfaces such as VPN connections never seem to end up in
the right firewall zone. Windows no longer seems to have a GUI option to allow you to easily changes
these settings. Dropping to Powershell will still manage to get the Job done&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;PS C:\&amp;gt;Get-NetConnectionProfile
PS C:\&amp;gt;$Profile = Get-NetConnectionProfile -InterfaceAlias Ethernet1
PS C:\&amp;gt;$Profile.NetworkCategory = &amp;#34;Private&amp;#34;
PS C:\&amp;gt;Set-NetConnectionProfile -InputObject $Profile
&lt;/code&gt;&lt;/pre&gt;&lt;hr&gt;
&lt;h5 id="sources"&gt;Sources:&lt;/h5&gt;
&lt;p&gt;&lt;a href="https://serverfault.com/questions/639088/how-do-i-make-a-connection-private-on-windows-server-2012-r2"&gt;Server Fault&lt;/a&gt;&lt;/p&gt;</description><content type="html"><![CDATA[<p>Adding new interfaces or virtual interfaces such as VPN connections never seem to end up in
the right firewall zone. Windows no longer seems to have a GUI option to allow you to easily changes
these settings. Dropping to Powershell will still manage to get the Job done</p>
<pre tabindex="0"><code>PS C:\&gt;Get-NetConnectionProfile
PS C:\&gt;$Profile = Get-NetConnectionProfile -InterfaceAlias Ethernet1
PS C:\&gt;$Profile.NetworkCategory = &#34;Private&#34;
PS C:\&gt;Set-NetConnectionProfile -InputObject $Profile
</code></pre><hr>
<h5 id="sources">Sources:</h5>
<p><a href="https://serverfault.com/questions/639088/how-do-i-make-a-connection-private-on-windows-server-2012-r2">Server Fault</a></p>
]]></content></item><item><title>Migrating to Hugo</title><link>https://www.sirmysterion.com/posts/20190602-hugo-cms/</link><pubDate>Sun, 02 Jun 2019 00:00:00 +0000</pubDate><guid>https://www.sirmysterion.com/posts/20190602-hugo-cms/</guid><description>&lt;p&gt;While building your own Content Management System can be a good way to stretch your your programming skills, it may lack the finesse of a well thought out CMS system already in existence.
One of the things that I was looking to achieve was to create a CMS system that would export to static HTML. While I did have it running and working correctly. I never got the the &amp;ldquo;export&amp;rdquo; part&lt;/p&gt;</description><content type="html"><![CDATA[<p>While building your own Content Management System can be a good way to stretch your your programming skills, it may lack the finesse of a well thought out CMS system already in existence.
One of the things that I was looking to achieve was to create a CMS system that would export to static HTML. While I did have it running and working correctly. I never got the the &ldquo;export&rdquo; part</p>
<p>What you see now is running on Hugo&rsquo;s framework. I also managed to throw in some version control and automatic building and deployment. It took a little bit of work but following the links below I was able to coax my GitLab into playing nice with it&rsquo;s CI/CD work flow.</p>
<hr>
<h5 id="sources">Sources:</h5>
<p><a href="https://gohugo.io/">Hugo</a></p>
<p><a href="https://grh.am/2018/deploying-a-hugo-static-site-using-gitlab-ci-cd-and-ssh/">Deploying a Hugo Static Site Using GitLab, CI/CD, &amp; SSH</a></p>
<p><a href="https://medium.com/@tonywooster/docker-in-docker-in-gitlab-runners-220caeb708ca">Docker-in-Docker</a></p>
]]></content></item><item><title>Multiple IPv6 Router Advertisements</title><link>https://www.sirmysterion.com/posts/20190415-multiple-ipv6-router-advertisements/</link><pubDate>Mon, 15 Apr 2019 00:00:00 +0000</pubDate><guid>https://www.sirmysterion.com/posts/20190415-multiple-ipv6-router-advertisements/</guid><description>&lt;p&gt;First time I tried advertizing on the same network was not so
great, second time around when needing to advertize ULA and GUA
addresses it went a little bit better for me.&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;interface eth0 {
AdvSendAdvert on;
AdvDefaultLifetime 0;
prefix fd94:c9b4:7bda:1::/64 {
AdvOnLink on;
AdvAutonomous on;
};
route fd00::/8 {};
};
&lt;/code&gt;&lt;/pre&gt;&lt;hr&gt;
&lt;h5 id="sources"&gt;Sources:&lt;/h5&gt;
&lt;p&gt;&lt;a href="https://superuser.com/questions/1263626/subnet-with-two-ipv6-routers-how-to-get-default-route-correct"&gt;Subnet with Two IPv6 Routers&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Photo by Echo Grid on Unsplash&lt;/p&gt;</description><content type="html"><![CDATA[<p>First time I tried advertizing on the same network was not so
great, second time around when needing to advertize ULA and GUA
addresses it went a little bit better for me.</p>
<pre tabindex="0"><code>interface eth0 {
    AdvSendAdvert on;
    AdvDefaultLifetime 0;
    prefix fd94:c9b4:7bda:1::/64 {
        AdvOnLink on;
        AdvAutonomous on;
    };
    route fd00::/8 {};
};
</code></pre><hr>
<h5 id="sources">Sources:</h5>
<p><a href="https://superuser.com/questions/1263626/subnet-with-two-ipv6-routers-how-to-get-default-route-correct">Subnet with Two IPv6 Routers</a>.</p>
<p>Photo by Echo Grid on Unsplash</p>
]]></content></item><item><title>OpenVPN under Proxmox LXC</title><link>https://www.sirmysterion.com/posts/20181217-openvpn-under-lxc/</link><pubDate>Mon, 17 Dec 2018 00:00:00 +0000</pubDate><guid>https://www.sirmysterion.com/posts/20181217-openvpn-under-lxc/</guid><description>&lt;p&gt;First you may need to re-enable rc-local for Debian 9
Create new Systemd service with the following contents&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;nano /etc/systemd/system/rc-local.service
&lt;/code&gt;&lt;/pre&gt;&lt;pre tabindex="0"&gt;&lt;code&gt; [Unit]
Description=/etc/rc.local
ConditionPathExists=/etc/rc.local
[Service]
Type=forking
ExecStart=/etc/rc.local start
TimeoutSec=0
StandardOutput=tty
RemainAfterExit=yes
SysVStartPriority=99
[Install]
WantedBy=multi-user.target
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Modify /etc/rc.local to contain the following&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;#!/bin/sh -e
if ! [ -c /dev/net/tun ]; then
mkdir -p /dev/net
mknod -m 666 /dev/net/tun c 10 200
fi
# Shouldn\&amp;#39;t need this but this makes it work anyway
echo 1 &amp;gt; /proc/sys/net/ipv4/ip_forward
# VM Hack: Restart openvpn server so that it works
# (tun interface didn\&amp;#39;t exist at usual systemctl startup but it does now!)
systemctl restart openvpn@server.service
exit 0
&lt;/code&gt;&lt;/pre&gt;&lt;hr&gt;
&lt;h5 id="sources"&gt;Sources:&lt;/h5&gt;
&lt;p&gt;&lt;a href="https://www.itechlounge.net/2017/10/linux-how-to-add-rc-local-in-debian-9/"&gt;Re-enable rc.local Soruce&lt;/a&gt;&lt;/p&gt;</description><content type="html"><![CDATA[<p>First you may need to re-enable rc-local for Debian 9
Create new Systemd service with the following contents</p>
<pre tabindex="0"><code>nano /etc/systemd/system/rc-local.service
</code></pre><pre tabindex="0"><code>    [Unit]
    Description=/etc/rc.local
    ConditionPathExists=/etc/rc.local

    [Service]
    Type=forking
    ExecStart=/etc/rc.local start
    TimeoutSec=0
    StandardOutput=tty
    RemainAfterExit=yes
    SysVStartPriority=99

    [Install]
    WantedBy=multi-user.target
</code></pre><p>Modify /etc/rc.local to contain the following</p>
<pre tabindex="0"><code>#!/bin/sh -e
if ! [ -c /dev/net/tun ]; then
 mkdir -p /dev/net
 mknod -m 666 /dev/net/tun c 10 200
fi
# Shouldn\&#39;t need this but this makes it work anyway
echo 1 &gt; /proc/sys/net/ipv4/ip_forward
# VM Hack: Restart openvpn server so that it works
# (tun interface didn\&#39;t exist at usual systemctl startup but it does now!)
systemctl restart openvpn@server.service
exit 0
</code></pre><hr>
<h5 id="sources">Sources:</h5>
<p><a href="https://www.itechlounge.net/2017/10/linux-how-to-add-rc-local-in-debian-9/">Re-enable rc.local Soruce</a></p>
<p><a href="https://blog.davidmoodie.com/secure-openvpn-server-ubuntu-16-04-proxmox-container/">/dev/tun passthru Soruce</a></p>
]]></content></item><item><title>Ryzen P-State overclocking in Linux</title><link>https://www.sirmysterion.com/posts/20181125-ryzen-pstates-linux/</link><pubDate>Sun, 25 Nov 2018 00:00:00 +0000</pubDate><guid>https://www.sirmysterion.com/posts/20181125-ryzen-pstates-linux/</guid><description>&lt;p&gt;Creating a service that changes the default high performance clock speed of my
first generation ryzen&lt;/p&gt;
&lt;h3 id="systemd-service"&gt;Systemd Service&lt;/h3&gt;
&lt;p&gt;/etc/systemd/system/ryzen-overclock.service&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;[Unit]
Description=Ryzen Overclock
DefaultDependencies=no
After=sysinit.target local-fs.target
Before=basic.target
[Service]
Type=oneshot
ExecStart=/usr/local/bin/enable-pstates
[Install]
WantedBy=basic.target
&lt;/code&gt;&lt;/pre&gt;&lt;h3 id="script"&gt;Script&lt;/h3&gt;
&lt;p&gt;/usr/local/bin/enable-pstates&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code class="language-#!/bin/sh" data-lang="#!/bin/sh"&gt;## P0 = 3.800GHz, 1.3750v
zenstates.py -p 0 -f 98 -d 8 -v 1c
## List the result.
zenstates.py -l
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;a href="https://forum.level1techs.com/t/overclock-your-ryzen-cpu-from-linux/126025"&gt;Zenstates&lt;/a&gt;.&lt;/p&gt;</description><content type="html"><![CDATA[<p>Creating a service that changes the default high performance clock speed of my
first generation ryzen</p>
<h3 id="systemd-service">Systemd Service</h3>
<p>/etc/systemd/system/ryzen-overclock.service</p>
<pre tabindex="0"><code>[Unit]
Description=Ryzen Overclock
DefaultDependencies=no
After=sysinit.target local-fs.target
Before=basic.target

[Service]
Type=oneshot
ExecStart=/usr/local/bin/enable-pstates

[Install]
WantedBy=basic.target
</code></pre><h3 id="script">Script</h3>
<p>/usr/local/bin/enable-pstates</p>
<pre tabindex="0"><code class="language-#!/bin/sh" data-lang="#!/bin/sh">## P0 = 3.800GHz, 1.3750v
zenstates.py -p 0 -f 98 -d 8 -v 1c
## List the result.
zenstates.py -l
</code></pre><p><a href="https://forum.level1techs.com/t/overclock-your-ryzen-cpu-from-linux/126025">Zenstates</a>.</p>
]]></content></item><item><title>iDrac5 falling into obsolescence</title><link>https://www.sirmysterion.com/posts/20181122-idrac-legacy/</link><pubDate>Thu, 22 Nov 2018 00:00:00 +0000</pubDate><guid>https://www.sirmysterion.com/posts/20181122-idrac-legacy/</guid><description>&lt;p&gt;I recently had a remote server that did not come back after a reboot, Held out
in hopes that it would figure it’s self out but to no avail. Looked up the
information I needed to access iDrac and actually got into the web interface
with little issues. Found the remote console section and proceed to click the
launch button. And here is where the first issues started to crop up&lt;/p&gt;</description><content type="html"><![CDATA[<p>I recently had a remote server that did not come back after a reboot, Held out
in hopes that it would figure it’s self out but to no avail. Looked up the
information I needed to access iDrac and actually got into the web interface
with little issues. Found the remote console section and proceed to click the
launch button. And here is where the first issues started to crop up</p>
<p>Being that this one of the older servers I manage, All the server remote
management had to offer was iDrac 5. I was lucky enough to not need a java
install as often is the case, yet Google Chrome would play nice with the
Active-X Console. Well off to the trusty legacy browser IE it is. Once the
Active-X plugin got itself installed I actually got a view of what I was
dealing with only to be followed by a sinking feeling.</p>
<pre tabindex="0"><code>Foreign configuration(s) found on adapter. Press any key to continue
</code></pre><p>I go to press a key, Press the key again, Press and hold all the keys…..
Nothing. I had a windows into the issue but lacked any control to do anything
about it. After search around I finaly found it. The simple fix. Add the url
to the Trusted Site’s security list within IE. Refresh the Page, DONE!</p>
]]></content></item><item><title>BLOG POST GOING LIVE!!!</title><link>https://www.sirmysterion.com/posts/20181014-blog-post-going-live/</link><pubDate>Sun, 14 Oct 2018 00:00:00 +0000</pubDate><guid>https://www.sirmysterion.com/posts/20181014-blog-post-going-live/</guid><description>&lt;p&gt;Welcome to the new me! Well not quite but this should be the first official post of Blog.SirMysterion.com! Working on all the kinks at the moment.&lt;/p&gt;</description><content type="html">&lt;p>Welcome to the new me! Well not quite but this should be the first official post of Blog.SirMysterion.com! Working on all the kinks at the moment.&lt;/p>
</content></item></channel></rss>