Notes from the network

Engineering lessons, automation, and lab builds.

A searchable knowledge base of networking, automation and infrastructure articles — design notes, troubleshooting write-ups and reproducible labs, written down so they’re easy to find the next time they matter.

Featured posts

View all →

A Reproducible Home Lab with Containerlab and FRR

Spin up a multi-vendor topology in seconds, version it in Git, and tear it down without leaving anything behind. The full setup, start to finish.

|

6 min read

Idempotent Network Config with Ansible and Jinja2

How to structure roles and templates so a second run is a no-op — plus the validation guardrails that stop a bad render from ever reaching a device.

|

8 min read

Designing a Leaf-Spine Fabric Without the Hand-Waving

A practical walk through underlay addressing, BGP design choices and the trade-offs that actually bite you once the fabric is carrying production traffic.

|

6 min read

Recent posts

Simulating Link Failure and Latency with tc and netem

Make your lab behave like a real WAN. Add jitter, drop packets and watch convergence behave the way it will in production.

|

9 min read

Out-of-Band Management That You’ll Actually Be Glad You Built

Console servers, a separate path, and the failure modes a dedicated OOB network quietly saves you from at 3am.

|

6 min read

From SSH Scripts to a Real Source of Truth with NetBox

Why a database beats a folder of YAML, and a migration path you can take one device type at a time without a big-bang cutover.

|

11 min read

Learning Byte 001: BGP Foundations and First eBGP Peering

Encode intent at the edge and let the core stay simple. A community scheme that has survived several network redesigns.

|

12 min read

Junos PyEZ Foundations

Turn messy CLI scrape into clean structured data, then feed it straight into a report without writing a single regex by hand.

|

15 min read

Chasing an Intermittent MTU Black Hole Across a VXLAN Overlay

A long debugging session reduced to the three commands and one packet capture that finally pointed at the real culprit.

|

7 min read

Built for engineers

Articles include copy-pasteable, syntax-highlighted snippets — labelled by filename so you always know where the code belongs.

collect_bgp_state.py
# Pull BGP neighbor state from a device and flag anything not Established
from netmiko import ConnectHandler

def bgp_summary(host, creds):
    conn = ConnectHandler(host=host, **creds)
    rows = conn.send_command("show bgp summary", use_textfsm=True)
    down = [r for r in rows if r["state"] != "Established"]
    return {"host": host, "total": len(rows), "down": down}