<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom"><title>nunogrl.com - monitoring</title><link href="https://nunogrl.com/" rel="alternate"></link><link href="https://nunogrl.com/categories/monitoring/atom.xml" rel="self"></link><id>https://nunogrl.com/</id><updated>2024-08-01T00:00:00+01:00</updated><entry><title>Homelab Network Overview</title><link href="https://nunogrl.com/articles/homelab-network-overview/" rel="alternate"></link><published>2024-08-01T00:00:00+01:00</published><updated>2024-08-01T00:00:00+01:00</updated><author><name>Nuno Leitao</name></author><id>tag:nunogrl.com,2024-08-01:/articles/homelab-network-overview/</id><summary type="html">&lt;p class="first last"&gt;A comprehensive guide to building a secure homelab network with VLANs, DNS, monitoring, and automation&lt;/p&gt;
</summary><content type="html">&lt;p&gt;My homelab network is designed to provide a &lt;strong&gt;secure, efficient, and self-hosted environment&lt;/strong&gt;
for various automation, development, and personal infrastructure needs.
This setup prioritizes &lt;strong&gt;network segmentation, security, and performance optimization&lt;/strong&gt;,
while being flexible enough to scale or adapt for experimentation.&lt;/p&gt;
&lt;div class="section" id="problem-solution"&gt;
&lt;h2&gt;Problem &amp;amp; Solution&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;Problem:&lt;/strong&gt; I needed a reliable and secure environment for automation, CI/CD testing, Git hosting, and local infrastructure—
&lt;strong&gt;without relying on cloud platforms or exposing services to the internet&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;Additionally, the solution had to run on &lt;strong&gt;low-powered, repurposed hardware&lt;/strong&gt; with minimal overhead
and support &lt;strong&gt;remote access&lt;/strong&gt;, &lt;strong&gt;internal DNS resolution&lt;/strong&gt;, and &lt;strong&gt;segmented security domains&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Solution:&lt;/strong&gt; I architected a network centered around an OpenWRT-based router with VLAN segmentation,
isolated zones for each function, and layered services:&lt;/p&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;&lt;strong&gt;Tailscale&lt;/strong&gt; provides secure access to internal services, even when offsite.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Cloudflare Tunnel&lt;/strong&gt; allows for secure access to internal services from the internet.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;AdGuard Home&lt;/strong&gt; filters DNS-based ads and trackers at the router level.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;TinyDNS + BIND&lt;/strong&gt; handle authoritative DNS within the homelab.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Traefik&lt;/strong&gt; serves as the reverse proxy using a wildcard cert via DNS verification.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Prometheus + Grafana&lt;/strong&gt; provide observability for all infrastructure nodes.&lt;/li&gt;
&lt;li&gt;A &lt;strong&gt;D-Link 3782 router&lt;/strong&gt; is used as a wireless bridge to isolate the IoT network.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;The OpenWRT router also provides wireless access to mobile and personal devices,
which are segmented into their own VLAN. These include laptops, phones, and tablets
used for managing or testing infrastructure services.&lt;/p&gt;
&lt;p&gt;For mobile devices, &lt;strong&gt;Syncthing&lt;/strong&gt; is used to selectively back up content to the NAS.
While backups are not fully automated, this gives more control over what is stored.
I am considering adding a backup option to &lt;strong&gt;Dropbox&lt;/strong&gt; for external redundancy.&lt;/p&gt;
&lt;p&gt;The entire infrastructure is &lt;strong&gt;provisioned via Ansible playbooks&lt;/strong&gt;, which manage deployment
and configuration across the environment. These playbooks live on an internal Git server
and may be shared publicly in the future.&lt;/p&gt;
&lt;p&gt;The system emphasizes &lt;strong&gt;modularity&lt;/strong&gt;, &lt;strong&gt;resilience&lt;/strong&gt;, and &lt;strong&gt;observability&lt;/strong&gt;, ensuring that
each component is isolated but observable.&lt;/p&gt;
&lt;/div&gt;
&lt;div class="section" id="full-network-topology-combined"&gt;
&lt;h2&gt;Full Network Topology (Combined)&lt;/h2&gt;
&lt;div class="mermaid" id="mermaid-diagram-9078242182121851762"&gt;
flowchart TD
    %% ingress egress
    Internet --&gt; Router
    Router --&gt;|VPN: Site2Site| VPNCloudflare
    Router --&gt;|VPN: host| VPNTailscale

    %% DNS
    Router -.-&gt; AdGuard
    AdGuard -.-&gt; BIND
    BIND -.-&gt; TinyDNS


    %%        Traefik --&gt; Router
    %%        Traefik --&gt; IoT_Bridge

    %%        Prometheus --&gt; NAS
    %%        Prometheus --&gt; Server1
    %%        Prometheus --&gt; CIService
    %%        Prometheus --&gt; Router
    %%        Grafana --&gt; Prometheus

    Router ==&gt;|VLAN: NAS| NAS
    Router ==&gt;|VLAN: Dev| Server1
    Router ==&gt;|VLAN: CI| Zeus
    Router ==&gt;|VLAN: IoT| IoT_Bridge
    Router ==&gt;|VLAN: WiFi| Wireless_Clients
    IoT_Bridge --&gt;|Wireless| IoT_Devices

    %%subgraph rproxy [reverse proxy]
    %%            Traefik --&gt; GitServer
    %%            Traefik --&gt; CIService
    %%            Traefik --&gt; Grafana
    %%            Traefik --&gt; Syncthing
    %%            Traefik --&gt; Portainer
    %%            Traefik --&gt; Prometheus
    %%            Traefik --&gt; NASUI
    %%            Traefik --&gt; binrepo
    %%        end




    %% description
    VPNCloudflare((VPN fa:fa-lock
                cloudflared
                tunnel))
    VPNTailscale((VPN fa:fa-lock
                tailscale
                server
                ))
    Router{{Router}}
    IoT_Bridge{{IoT Bridge}}
    Internet(((Internet
            fa:fa-cloud)))
    %% NASUI([homepage fab:fa-docker])
    %% GitServer([git fab:fa-docker])

    %% CIService([CIService fab:fa-docker])
    %% Grafana([grafana fab:fa-docker])
    %% Portainer([Portainer fab:fa-docker])
    %% Traefik([traefik fab:fa-docker])
    %% Syncthing([Syncthing fab:fa-docker])
    %% Prometheus([Prometheus fab:fa-docker])
    %% binrepo([Binary Repo fab:fa-docker])
    Server1[Raspberry Pi]


    %% styles
    classDef default fill:#f9f,stroke:#333,stroke-width:1px;
    classDef net fill:#fff;
    classDef hardware fill:#f96;
    classDef dns fill:#AFF;
    classDef container fill:#EF0;
    classDef vpn fill:#EF0;
    classDef network fill:#CCCCCC;

    Internet:::net

    VPNCloudflare:::vpn
    VPNTailscale:::vpn

    AdGuard:::dns
    BIND:::dns
    TinyDNS:::dns

    Router:::network
    IoT_Bridge:::network
    NAS:::hardware
    Server1:::hardware
    Zeus:::hardware

    Wireless_Clients:::hardware
    IoT_Devices:::hardware

    %% NASUI:::container
    %% GitServer:::container
    %% CIService:::container
    %% binrepo:::container
    %% Grafana:::container
    %% Portainer:::container
    %% Traefik:::container
    %% Syncthing:::container
    %% Prometheus:::container&lt;/div&gt;&lt;p&gt;This shows how DNS resolution, secure access, proxy routing, and monitoring interconnect.&lt;/p&gt;
&lt;/div&gt;
&lt;div class="section" id="layered-views-progressive-breakdown"&gt;
&lt;h2&gt;Layered Views (Progressive Breakdown)&lt;/h2&gt;
&lt;div class="section" id="vpn"&gt;
&lt;h3&gt;VPN&lt;/h3&gt;
&lt;div class="mermaid" id="mermaid-diagram-7797067824243999538"&gt;
%% styles
classDef default fill:#f9f,stroke:#333,stroke-width:1px;
classDef net fill:#fff;
classDef vpn fill:#EF0;
classDef network fill:#CCCCCC;


flowchart TD
    Internet --&gt;|VPN: Cloudflare| VPNCloudflare
    Internet --&gt;|VPN: Tailscale| VPNTailscale

subgraph cf [cloudflare VPN tunnels]
        InternetCF -.-&gt; |https
                         ingress|cloudflare
        cloudflare -.-&gt; |http|vaultvpn
        cloudflare{{cloudflare
                   pulsingminds}}
        cloudflare --- Londonvpn
        cloudflare --- hetznervpn
        cloudflare --- vaultvpn
end
Londonvpn((VPN fa:fa-lock
            London Tunnel))
hetznervpn((VPN fa:fa-lock
            Hetzner Tunnel))
vaultvpn((VPN fa:fa-lock
            vault Tunnell))
InternetCF(((Internet
                fa:fa-cloud)))
InternetCF:::net
cloudflare:::network
Londonvpn:::vpn
hetznervpn:::vpn
vaultvpn:::vpn
        InternetTS --- tailscale
        tailscale{{Tailscale}}
        tailscale --- Londonts
        tailscale --- magits
        tailscale --- capricets
        tailscale --- mobilets
end
Londonts((VPN fa:fa-lock
            London Tunnel
            _route propagation_))
magits((VPN fa:fa-lock
            Hetzner Tunnel))
capricets((VPN fa:fa-lock
            laptop Tunnell))
mobilets(((VPN fa:fa-lock
           mobile Tunnel)))
InternetTS(((Internet
                fa:fa-cloud)))
tailscale:::network
Londonts:::vpn
magits:::vpn
capricets:::vpn
mobilets:::vpn&lt;/div&gt;&lt;/div&gt;
&lt;div class="section" id="dns-resolution-flow"&gt;
&lt;h3&gt;DNS Resolution Flow&lt;/h3&gt;
&lt;div class="mermaid" id="mermaid-diagram--5116182746477425768"&gt;
flowchart TD
    Client --&gt; AdGuard
    AdGuard --&gt; BIND
    BIND -.-&gt; I
    BIND -.-&gt; L
    BIND --&gt; TinyDNS
    BIND -.-&gt; LXC

L((Local network))
I((Internet))
LXC((LXC_Containers))&lt;/div&gt;&lt;/div&gt;
&lt;div class="section" id="traefik-reverse-proxy-flow"&gt;
&lt;h3&gt;Traefik Reverse Proxy Flow&lt;/h3&gt;
&lt;div class="mermaid" id="mermaid-diagram--2508032663135504021"&gt;
flowchart TD
    Internet --&gt;|DNS Challenge| Traefik
    Traefik --&gt; GitServer
    Traefik --&gt; Grafana
    Traefik --&gt; CIService
    Traefik --&gt; binRepo
    Traefik --&gt; Syncthing
    Traefik --&gt; Portainer
    Traefik --&gt; RouterUI
    Traefik --&gt; NASUI
    Traefik --&gt; IoT_Bridge&lt;/div&gt;&lt;/div&gt;
&lt;div class="section" id="prometheus-monitoring-flow"&gt;
&lt;h3&gt;Prometheus Monitoring Flow&lt;/h3&gt;
&lt;div class="mermaid" id="mermaid-diagram--3288697517812673026"&gt;
flowchart TD
    Prometheus --&gt; NAS
    Prometheus --&gt; Server1
    Prometheus --&gt; CIService
    Prometheus --&gt; Router
    Prometheus --&gt; IoT_Bridge
    Grafana --&gt; Prometheus&lt;/div&gt;&lt;p&gt;Each layer can be inspected individually or in combination via Grafana dashboards and log collectors.
This &lt;strong&gt;layered view mirrors how the infrastructure is designed, monitored, and interacted with.&lt;/strong&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
</content><category term="Infrastructure Automation"></category><category term="homelab"></category><category term="networking"></category><category term="infrastructure"></category><category term="openwrt"></category><category term="dns"></category><category term="monitoring"></category><category term="vlans"></category><category term="security"></category></entry></feed>