<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Torbjorn.dev</title><link>https://torbjorn.dev/</link><description>Recent content on Torbjorn.dev</description><language>en-us</language><copyright>This work is licensed under a Creative Commons Attribution-ShareAlike 4.0 International License.</copyright><lastBuildDate>Wed, 01 Apr 2026 10:00:00 +0000</lastBuildDate><atom:link href="https://torbjorn.dev/index.xml" rel="self" type="application/rss+xml"/><item><title>Moving to Forgejo on Hetzner 🏗️</title><link>https://torbjorn.dev/blog/forgejo-on-hetzner/</link><pubDate>Wed, 01 Apr 2026 10:00:00 +0000</pubDate><guid>https://torbjorn.dev/blog/forgejo-on-hetzner/</guid><description>&lt;p&gt;&lt;img src="https://torbjorn.dev/img/blog/forgejo-migration/intro.png" alt="A hermit crab moving from a corporate shell into a hand-forged metal one"&gt;&lt;/p&gt;
&lt;p&gt;I recently moved my git repositories off GitHub and onto a self-hosted &lt;a href="https://forgejo.org"&gt;Forgejo&lt;/a&gt; instance running on a Hetzner VPS.
The whole thing costs €4.49/month and took an afternoon to set up.&lt;/p&gt;
&lt;p&gt;In this post I&amp;rsquo;ll walk through the deployment, the reasoning behind it and migration steps. This is meant as inspiration, not a batteries-included guide. Adapt it to your own needs.&lt;/p&gt;</description></item><item><title>Gleaning DNS resolver behavior 🕵️</title><link>https://torbjorn.dev/blog/resinfo/</link><pubDate>Sun, 01 Mar 2026 10:00:00 +0000</pubDate><guid>https://torbjorn.dev/blog/resinfo/</guid><description>&lt;p&gt;&lt;img src="https://torbjorn.dev/img/blog/resinfo/dig-resinfo.png" alt="Query response to check.my.dns.resinfo.net"&gt;&lt;/p&gt;
&lt;p&gt;You probably trigger your first query to a DNS resolver before putting socks on in the morning (and so do I).&lt;/p&gt;
&lt;p&gt;What happens when you open &amp;ldquo;lkml.org&amp;rdquo; in your browser is fairly predictable, but what happens when said request hits the resolver varies widely.
This is usually opaque to both you, the user, and the DNS client.
&lt;a href="https://datatracker.ietf.org/doc/html/rfc9606/"&gt;RFC 9606&lt;/a&gt; with its RESINFO record is intended to solve this, but it is about as widely implemented as &lt;a href="https://datatracker.ietf.org/doc/html/rfc2549"&gt;RFC 2549&lt;/a&gt;.&lt;/p&gt;</description></item><item><title>Tuning Vibe CLI for Network Engineering 🔧🌐</title><link>https://torbjorn.dev/blog/mistral-vibe-cli-for-network-engineering/</link><pubDate>Tue, 16 Dec 2025 10:00:00 +0000</pubDate><guid>https://torbjorn.dev/blog/mistral-vibe-cli-for-network-engineering/</guid><description>&lt;div style='width: 100%;'&gt;
&lt;img style='margin: auto; display: block;' src="https://torbjorn.dev/img/blog/mistral-vibe-cli-network-engineering/mistral-vibe-cli-intro.png" class="full-img" alt=""&gt;
&lt;/div&gt;
&lt;p&gt;&lt;a href="https://github.com/mistralai/mistral-vibe"&gt;Vibe CLI&lt;/a&gt; is Mistral&amp;rsquo;s answer to Claude Code and OpenAI Codex. Out of the box it&amp;rsquo;s optimised for software development, not network engineering. But with the some configuration tweaking it&amp;rsquo;s surprisingly capable for network tasks.&lt;/p&gt;
&lt;p&gt;&lt;a href="#summary"&gt;TL;DR&lt;/a&gt;&lt;/p&gt;
&lt;h2 id="model-selection"&gt;Model selection&lt;/h2&gt;
&lt;p&gt;Vibe defaults to Devstral. It does quite a good job for most things but certain complex tasks do better with reasoning. My general &amp;ldquo;strategy&amp;rdquo; is to use Devstral until it seems to get stumped or otherwise performs poorly, then switch to Magistral.&lt;/p&gt;</description></item><item><title>Building your own Containerlab node kinds 🛠️</title><link>https://torbjorn.dev/blog/creating-clab-node-kinds/</link><pubDate>Wed, 29 Oct 2025 12:07:52 +0000</pubDate><guid>https://torbjorn.dev/blog/creating-clab-node-kinds/</guid><description>&lt;p&gt;Over the last few weeks I&amp;rsquo;ve added several new node types to containerlab to cover my own lab needs. The process has been surprisingly straightforward after I got familiar with the codebase, and I figure others probably have devices they&amp;rsquo;d like to add too. This post will guide you through the basics of creating vrnetlab-based node kinds for containerlab - it&amp;rsquo;s easier than you might think.&lt;/p&gt;
&lt;p&gt;The node kinds I have contributed thus far are the following:&lt;/p&gt;</description></item><item><title>Containerlab Cisco images simplified 🐳✨</title><link>https://torbjorn.dev/blog/cml-nodes-in-clab/</link><pubDate>Sun, 26 Oct 2025 22:21:47 +0000</pubDate><guid>https://torbjorn.dev/blog/cml-nodes-in-clab/</guid><description>&lt;div style='width: 100%;'&gt;
&lt;img style='margin: auto; display: block;' src="https://torbjorn.dev/img/blog/cml-nodes-in-clab/cisco-vm_clab.png" class="full-img" alt=""&gt;
&lt;/div&gt;
&lt;p&gt;Running Cisco VMs in containerlab can feel surprisingly unintuitive if you&amp;rsquo;re coming from tools like EVE-NG or CML. This post will walk you through the first crucial step: building the images.&lt;/p&gt;
&lt;p&gt;&lt;a href="#summary"&gt;TL;DR&lt;/a&gt;&lt;/p&gt;
&lt;h2 id="vrnetlab"&gt;vrnetlab&lt;/h2&gt;
&lt;p&gt;Vrnetlab is the glue that allows us to join VMs to _container_lab.
It does quite a few useful things:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Configures &amp;amp; runs VMs inside containers&lt;/li&gt;
&lt;li&gt;Enables &amp;ldquo;container native&amp;rdquo; networking&lt;/li&gt;
&lt;li&gt;Exposes serial to telnet on port 5000&lt;/li&gt;
&lt;li&gt;Loads configuration on startup&lt;/li&gt;
&lt;li&gt;Checks node state &amp;amp; health&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;In sum this enables us to deploy containerlab nodes in a declarative and predictable manner.&lt;/p&gt;</description></item><item><title>EEM in Catalyst Center templates 📅👨‍💼</title><link>https://torbjorn.dev/blog/eem-cc-templates/</link><pubDate>Sat, 05 Oct 2024 17:23:26 +0000</pubDate><guid>https://torbjorn.dev/blog/eem-cc-templates/</guid><description>&lt;p&gt;Introducing Catalyst Center templating to brownfield environments often require dynamic configuration outside of what jinja can offer.
I will cover a few scenarios below that demonstrates when and how EEM applets can assist you in overcoming some limitations in CC templating.&lt;/p&gt;
&lt;p&gt;&lt;a href="#summary"&gt;TL;DR&lt;/a&gt;&lt;/p&gt;
&lt;h2 id="why-eem"&gt;Why EEM?&lt;/h2&gt;
&lt;p&gt;Jinja templates on the Catalyst Center are flexible enough to cover most scenarios where dynamic configuration is required, but it has a few notable limitations.
The main ones I face regularly are the lack of access to inventory variables &amp;amp; interactive commands in onboarding templates, and when your desired configuration requires referencing operational data.&lt;/p&gt;</description></item><item><title>PNP Licence level change 🔀🪪</title><link>https://torbjorn.dev/blog/pnp-licence-level/</link><pubDate>Fri, 20 Sep 2024 13:05:22 +0000</pubDate><guid>https://torbjorn.dev/blog/pnp-licence-level/</guid><description>&lt;div style='width: 100%;'&gt;
&lt;img style='margin: auto; display: block;' src="https://torbjorn.dev/img/blog/pnp-license-change/pnp-dnac.png" class="large-img" alt=""&gt;
&lt;/div&gt;
&lt;p&gt;IOS-XE routers are currently not being shipped with the ordered license level applied.
This becomes an issue whenever you need non-default licensing level features during PNP onboarding(DMVPN spokes for example).
In this post I will cover the simplest way I have found to remediate this.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Note:&lt;/strong&gt; This method does not work for changing license level from essentials to advantage on Catalyst 9000 series switches.&lt;/p&gt;
&lt;p&gt;&lt;a href="#summary"&gt;TL;DR&lt;/a&gt;&lt;/p&gt;
&lt;h2 id="the-problem"&gt;The problem&lt;/h2&gt;
&lt;p&gt;Onboarding templates are quite limited in functionality. They don&amp;rsquo;t allow for any interactive commands such as reload and only permits you to push the full config in one go.
It is hence not possible to simply set the license level directly in the onboarding template. Solving this will hence require some form of on-box or off-box automation.
I will cover doing this on-box with EEM in this post.&lt;/p&gt;</description></item><item><title>EVE-NG Netplan configuration 🌐🙆</title><link>https://torbjorn.dev/blog/eve-ng-netplan/</link><pubDate>Thu, 27 Jun 2024 17:18:34 +0000</pubDate><guid>https://torbjorn.dev/blog/eve-ng-netplan/</guid><description>&lt;div style='width: 100%;'&gt;
&lt;img style='margin: auto; display: block;' src="https://torbjorn.dev/img/blog/eve-ng-netplan/netplan-eve.png" class="full-img" alt=""&gt;
&lt;/div&gt;
&lt;p&gt;If you&amp;rsquo;re like me you found the introduction of &lt;a href="https://netplan.io/"&gt;Netplan&lt;/a&gt; to Ubuntu a fresh of breath air.
YAML is ubiquitous these days and is very convenient wherever manual modification is expected/required.
Why EVE-NG decides to stick with legacy configuration 7 years after the introduction is hence beyond me.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;NOTE:&lt;/strong&gt; You will likely not get the same level of support from EVE-NG (if any) by converting to Netplan configuration&lt;/p&gt;</description></item><item><title>Deploying Hugo site to Bunny.net 🐰</title><link>https://torbjorn.dev/blog/hugo-on-bunny-net/</link><pubDate>Wed, 20 Mar 2024 17:04:51 +0000</pubDate><guid>https://torbjorn.dev/blog/hugo-on-bunny-net/</guid><description>&lt;p&gt;&lt;img src="https://torbjorn.dev/img/blog/hugo-on-bunny-net/hugo-bunny.png" alt="Splash image with logos of gohugo and bunny.net"&gt;&lt;/p&gt;
&lt;p&gt;As part of simplifying my personal tech-stack I found &lt;a href="https://bunny.net"&gt;Bunny.net&lt;/a&gt; to best fit the hosting needs for my static websites. It&amp;rsquo;s good, it&amp;rsquo;s fast &amp;amp; is&amp;rsquo;s cheap - a rare contradiction to RFC 1925!&lt;/p&gt;
&lt;p&gt;In this post I will cover automated site deployments with the following stack:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Bunny Storage &amp;amp; CDN&lt;/li&gt;
&lt;li&gt;Github Actions&lt;/li&gt;
&lt;li&gt;Terraform&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;a href="#summary"&gt;TL;DR&lt;/a&gt;&lt;/p&gt;
&lt;h2 id="bunnynet-infrastructure"&gt;Bunny.net infrastructure&lt;/h2&gt;
&lt;p&gt;To serve our website with Bunny we need two things:&lt;/p&gt;</description></item><item><title>CML Autoshutdown nodes 🤖</title><link>https://torbjorn.dev/blog/cml-autoshutdown/</link><pubDate>Sun, 25 Feb 2024 09:22:12 +0000</pubDate><guid>https://torbjorn.dev/blog/cml-autoshutdown/</guid><description>&lt;p&gt;If you manage a shared CML instance you probably have to remind your coworkers regularly to shut their labs down regularly to free up the node count. This is unfortunately not something that can be automatically handled out of the box, so we&amp;rsquo;ll have to make our own fix for this.&lt;/p&gt;
&lt;h2 id="the-solution"&gt;The solution&lt;/h2&gt;
&lt;p&gt;The easiest way to do this is to shut down all running labs each night. This isn&amp;rsquo;t perfect, but people quickly learn to save their configs after losing progress once or twice. We will accomplish this with a python script and a cronjob&lt;/p&gt;</description></item><item><title>Ubuntu, SecureCRT &amp; Telnet links 🐧🔗</title><link>https://torbjorn.dev/blog/ubuntu-securecrt-telnet-links/</link><pubDate>Thu, 15 Feb 2024 19:13:07 +0100</pubDate><guid>https://torbjorn.dev/blog/ubuntu-securecrt-telnet-links/</guid><description>&lt;p&gt;&lt;img src="https://torbjorn.dev/img/blog/scrt-ubnt/scrt-ubnt.png" alt="SecureCRT &amp;amp; Ubuntu logos"&gt;&lt;/p&gt;
&lt;p&gt;SecureCRT will not open any SSH/Telnet links by default in Ubuntu 22.04. If you&amp;rsquo;ve found this writeup you have probably discovered this already. This article will hopefully save you some time and effort.&lt;/p&gt;
&lt;p&gt;&lt;a href="#tldr"&gt;TL;DR&lt;/a&gt;&lt;/p&gt;
&lt;h2 id="explaination"&gt;Explaination&lt;/h2&gt;
&lt;p&gt;The problem can be split into two parts:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Enabling SecureCRT to open links&lt;/li&gt;
&lt;li&gt;Ensuring SecureCRT is used for opening said links&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="desktop-entry"&gt;Desktop entry&lt;/h3&gt;
&lt;p&gt;Ubuntu uses &lt;a href="https://specifications.freedesktop.org/desktop-entry-spec/latest/"&gt;desktop entries&lt;/a&gt; to specify how a program should be launched. These are configuration files which among other things define which icon to use, description and which arguments the program accepts.&lt;/p&gt;</description></item><item><title>My CCIE - EI v1.1 Lab setup 🧫⚙️</title><link>https://torbjorn.dev/blog/ccie-ei-lab-v2/</link><pubDate>Sat, 13 Jan 2024 00:01:59 +0200</pubDate><guid>https://torbjorn.dev/blog/ccie-ei-lab-v2/</guid><description>&lt;p&gt;One of the first hurdles one has to overcome in achieving the CCIE - EI is getting access to a proper lab environment.
This post covers how I have solved this for the CCIE EI v1.1.&lt;/p&gt;
&lt;h2 id="hardware--software"&gt;Hardware &amp;amp; Software&lt;/h2&gt;
&lt;p&gt;The new &lt;a href="https://learningcontent.cisco.com/documents/marketing/exam-topics/CCIEEIv1.1-equipment_and_SW.pdf"&gt;equipment and software list&lt;/a&gt; has some major changes. The most important changes are as follows:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;The DNAC is bumped to a much improved v2.3&lt;/li&gt;
&lt;li&gt;The DNAC is now a lot easier to run virtualized!&lt;/li&gt;
&lt;li&gt;The vEdges are fully replaced by cEdges&lt;/li&gt;
&lt;li&gt;The CSR 1000v is replaced by the C8Kv&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="virtual-machines"&gt;Virtual machines&lt;/h3&gt;
&lt;p&gt;These images are included in Cisco Modeling Labs:&lt;/p&gt;</description></item><item><title>Catlyst 8000v cEdge support in EVE-ng 🧭🥼</title><link>https://torbjorn.dev/blog/eve-c8000vcm/</link><pubDate>Thu, 28 Sep 2023 01:43:02 +0200</pubDate><guid>https://torbjorn.dev/blog/eve-c8000vcm/</guid><description>&lt;div style='width: 100%;'&gt;
&lt;img style='margin: auto; display: block;' src="https://torbjorn.dev/img/blog/eve-ng_c8000vcm/eve-c8000v.png" class="full-img" alt=""&gt;
&lt;/div&gt;
&lt;p&gt;When you spend copious amounts of time labbing it quickly becomes tedious to reset lab devices manually.
Especially so when you have multiple config-sets for labbing different technologies and scenarios.
This is enough reason alone to make EVE-ng the superior network labbing platform with its startup-configs feature.&lt;/p&gt;
&lt;p&gt;EVE-ng does however not support config import/export for all nodes out of the box.
After resetting the cEdges in my lab to my base config N times i thought to myself &amp;ldquo;This is just a c8000v in a different mode, adding config export/import should be a quick fix.&amp;rdquo;.
&lt;em&gt;I was wrong&lt;/em&gt;.&lt;/p&gt;</description></item><item><title>My CCIE - EI Lab setup 🧪🥼</title><link>https://torbjorn.dev/blog/ccie-ei-lab/</link><pubDate>Thu, 23 Sep 2021 00:01:59 +0200</pubDate><guid>https://torbjorn.dev/blog/ccie-ei-lab/</guid><description>&lt;p&gt;One of the first hurdles one has to overcome in achieving the CCIE - EI has been getting access to a proper lab environment.
At the time of writing I have not found any reputable &amp;ldquo;rack rental&amp;rdquo; provider for the CCIE - EI. Hence I found it neccessary to build my own.&lt;/p&gt;
&lt;p&gt;&lt;a href="#the-end-result"&gt;Click here&lt;/a&gt; if you want to go straight to the inventory list.&lt;/p&gt;
&lt;h2 id="hardware--software"&gt;Hardware &amp;amp; Software&lt;/h2&gt;
&lt;p&gt;Cisco has released &lt;a href="https://learningnetwork.cisco.com/s/article/ccie-enterprise-infrastructure-equipment-and-software-list"&gt;the equipment and software list&lt;/a&gt; for the CCIE - EI Pods for the exam. This is the logical starting point for any lab build. I will break down my choices of lab software choices by the points on this list.&lt;/p&gt;</description></item><item><title>Hello world! 👋</title><link>https://torbjorn.dev/blog/hello-world/</link><pubDate>Sun, 22 Aug 2021 01:51:26 +0200</pubDate><guid>https://torbjorn.dev/blog/hello-world/</guid><description>&lt;p&gt;After being over a year in the making, this website is finally live. 🎉&lt;/p&gt;
&lt;p&gt;A lot has happened since the first commit for this site: A pandemic hit, I moved, and I became a father of two. I should have settled for a simple Wordpress site&amp;hellip;&lt;/p&gt;
&lt;h2 id="goals"&gt;Goals&lt;/h2&gt;
&lt;p&gt;This site was made with a few goals in mind:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Having a single place to refer to when sharing information.&lt;/li&gt;
&lt;li&gt;Assist me in learning through writing longer-form articles about technology.&lt;/li&gt;
&lt;li&gt;Being able to publish to a platform that I own and control.&lt;/li&gt;
&lt;li&gt;Functioning as an extension of my CV/Resume&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Whether I am able to fulfill my wishes through this site is yet to be seen.
I am hoping to be able to publish a post on this site on a bi-weekly basis.&lt;/p&gt;</description></item></channel></rss>