Lab Map for Kathará
A VSCode extension that renders an interactive network topology map for Kathará labs directly in the editor.
It reads lab.conf, *.startup, etc/bind/ and etc/resolv.conf files and builds a live graph showing machines, LAN segments, IP addresses, MAC addresses, MTU settings, static routes, and DNS roles — all without leaving VSCode.
Features
Interactive topology graph
- Machines and LAN nodes rendered with Cytoscape.js
- Node colors follow the Catppuccin palette and reflect DNS role at a glance
- Pan, zoom, and drag nodes to explore the topology
| Element |
Shows |
| Machine node |
DNS role badge · interfaces (eth / IP / MAC / MTU) · routing table · DNS zones · NS/A records · missing A-record warnings · recursion subnets · DNS resolver |
| LAN node |
Calculated subnet · connected machines |
| Physical link |
Interface name · IP · MAC · LAN |
| Static route |
Source · destination · prefix |
Edge types
| Style |
Meaning |
| Gray solid |
Physical link (normal MTU) |
| Amber dashed |
Physical link with non-default MTU (≠ 1500) |
| Pink dashed arrow |
Static route overlay |
DNS role detection
Parses named.conf, named.conf.options, zone database files inside etc/bind/, and etc/resolv.conf to automatically assign roles:
| Color |
Role |
| Yellow |
Root SOA |
| Peach |
TLD SOA |
| Cyan |
SOA (authoritative) |
| Purple border |
Local Name Server (recursive resolver) |
| Green border |
Web server |
| Blue |
DNS client / Router |
DNS Graph panel
Click DNS Graph in the toolbar to open a dedicated side panel showing the DNS delegation hierarchy as an interactive top-down graph (dagre layout):
- SOA nodes rendered with a filled background in their role color, with a two-line label showing zone/FQDN and
machineName (IP)
- Local Name Server nodes have a colored dashed border, also with FQDN and IP in the label
- Client nodes show FQDN (if resolvable), IP, and role badges (
[WEB SERVER], [CLIENT], [RESOLVER])
- Hover any node to see a detailed tooltip including role, FQDN, IPs, DNS record table (SOA / NS / A rows), missing A-record entries highlighted in red, recursion subnets, and root hint IP
- Drag the left edge of the panel to resize it freely
DNS Hierarchy panel
Click DNS Hierarchy in the toolbar to open a text-based tree view of the DNS delegation chain:
├─ / └─ connectors with zone names and role badges (ROOT NAME SERVER, TLD AUTHORITATIVE, AUTHORITATIVE, LOCAL RESOLVER (LNS))
DATABASE (DB.X) header label per zone, followed by a full record table (SOA · NS · A rows)
- Missing A-record rows — hosts that share the zone's subnet but have no A record are shown in red italic as
– nessun record (IP) directly inside the zone's table
- LNS nodes show recursion subnets and root hint target in plain language
- Each LNS lists its clients as indented sub-rows with FQDN, IP, role badges (
[WEB SERVER], [CLIENT], [RESOLVER]), and resolver IP
- Hosts with no A record anywhere in DNS are flagged with
⚠ nessun record A nel DNS
- Drag the left edge of the panel to resize it freely
Node search
Press Ctrl+F to open the search bar. You can search by:
- Machine or LAN name — e.g.
www, lcom, A
- IP address — partial or full, with or without CIDR prefix (e.g.
1.1.1, 2.2.2.4, 1.1.1.3/24)
- MAC address — partial match in
00:xx format (e.g. aa:bb, 00:50)
Matching nodes are highlighted, everything else is faded, and the view auto-pans to the result(s).
Auto-refresh
The map updates automatically whenever you save a lab.conf, *.startup, etc/bind/**, or etc/resolv.conf file.
Multi-lab workspace
If you have multiple Kathará labs open as workspace folders, the map loads the lab from the folder of your last active editor file. Simply open any file from the target lab and click the status bar button.
Usage
- Open a folder containing a Kathará lab (must have a
lab.conf at the root or in a subfolder)
- Click
$(circuit-board) Kathara Map in the status bar, or run Kathara: Show Network Map from the Command Palette (Ctrl+Shift+P)
- The map opens in a side panel
Supported Kathará features
| Feature |
Parsed from |
| Machine declarations |
lab.conf |
| LAN assignments |
lab.conf (machine[N]="LAN") |
| IP addresses (CIDR) |
*.startup (ip addr add) |
| MAC addresses |
*.startup (ip link set ... address) |
| MTU |
*.startup (ip link set ... mtu) |
| Default gateway |
*.startup (ip route add default via) |
| Static routes |
*.startup (ip route add <dst> via <gw>) |
| DNS zones (BIND9) |
<machine>/etc/bind/named.conf + zone db files |
| Recursion ACL |
<machine>/etc/bind/named.conf.options |
| DNS resolver |
<machine>/etc/resolv.conf (nameserver) |
Requirements
- VSCode 1.85 or later
- A Kathará lab folder with a
lab.conf file
No Python, no Docker, no Kathará installation required — the extension only reads files. All assets (Cytoscape.js, dagre, fonts) are bundled and work fully offline.
Extension settings
This extension does not add any settings to VSCode.
Known limitations
- Routing daemon configurations (OSPF, BGP, RIP via Quagga/FRR) are not yet parsed
iptables / NAT rules are not shown
- Only BIND9 DNS configurations are supported
License
MIT
Disclaimer
This extension is an independent, community-built tool and is not affiliated with, endorsed by, or officially associated with the Kathará project or its maintainers. Kathará is developed by the KatharaFramework team. All trademarks and project names belong to their respective owners.