Network Evolution Plan (VLANs and Ingress Separation)
Purpose
Define the next phases for segmentation and ingress separation so the current flat LAN can evolve without disruptive renumbering.
Phase Targets
- Keep the existing LAN (
10.0.0.0/24) stable during transition. - Introduce clear trust boundaries: Clients, Servers, Management, DMZ, IoT, Guest, Lab.
- Reserve address space and VIP ranges now to simplify later MetalLB/kube-vip usage.
- Separate public and internal ingress paths, with split-horizon DNS.
VLANs and Subnets (Proposed)
| VLAN | Name | Subnet | Purpose | Typical Residents |
|---|---|---|---|---|
| 10 | LAN | 10.0.0.0/24 | Default user network | PCs, phones, TVs |
| 20 | SERVER | 10.0.20.0/24 | App workloads, cluster nodes | Talos/K8s nodes, storage |
| 30 | MGMT | 10.0.30.0/24 | Out-of-band + admin | IPMI/BMC, switch/AP management |
| 40 | DMZ | 10.0.40.0/24 | Public-facing edge only | Public ingress VIPs / edge svc |
| 50 | IOT | 10.0.50.0/24 | Untrusted devices | Cameras, smart devices |
| 60 | GUEST | 10.0.60.0/24 | Visitor access | Guest Wi-Fi clients |
| 70 | LAB | 10.0.70.0/24 | Experiments | Test gear, ephemeral nodes |
DHCP and Gateway Plan (Examples)
Assuming router-on-a-stick (trunk to switch):
| VLAN | Gateway | DHCP Scope | Notes |
|---|---|---|---|
| 10 | 10.0.0.1 | 10.0.0.10–250 | Keep current allocations |
| 20 | 10.0.20.1 | 10.0.20.50–250 | Reserve low IPs for VIPs/statics |
| 30 | 10.0.30.1 | none or limited | Prefer static/reservations |
| 40 | 10.0.40.1 | none or limited | DMZ should be explicit |
| 50 | 10.0.50.1 | 10.0.50.50–250 | Tight egress rules |
| 60 | 10.0.60.1 | 10.0.60.50–250 | Internet only |
| 70 | 10.0.70.1 | optional | Lab isolation |
Default Inter-VLAN Policy (Allow Only What Is Needed)
- LAN (10) → Internal ingress/services (20): allow service ports.
- LAN (10) → MGMT (30): deny, except specific admin workstation or VPN admin group.
- VPN/Admin → MGMT (30): allow.
- DMZ (40) → Servers (20): allow only public ingress backends.
- IOT (50) → anywhere: deny by default, allow minimal egress if needed.
- GUEST (60) → internal: deny (internet only).
Ingress Separation Model
- Public Ingress: Internet-reachable hostnames only; prefer placement in DMZ (VLAN 40) when available.
- Internal Ingress: LAN/VPN-only hostnames; placed in SERVER (VLAN 20) or LAN (VLAN 10) during early phase.
- Start with both ingress controllers in VLAN 20 (simpler); move Public Ingress VIPs to VLAN 40 when DMZ exists.
VIP Reservations (Examples)
- Internal ingress VIPs:
10.0.20.10–10.0.20.19 - Public ingress VIPs:
10.0.40.10–10.0.40.19 - Gateways:
.1, network services:.2–.9
DNS Expectations (Split-Horizon)
- Use the unified namespace
*.risu.tech(per Exposure Policy and Split-Horizon ADR). - Internal-only names resolve to internal VIPs (e.g.,
wiki.risu.tech→10.0.20.10on LAN/VPN). - Public names resolve externally only when intentionally exposed (e.g.,
status.risu.tech). - Internal resolvers must not return public IPs for internal-only names.
Diagram (Ingress and Trust Zones)
flowchart TD
Internet((Internet)) --> WAN[WAN]
WAN --> Edge["Router/Firewall: OpenWRT now, dedicated later (policy gate)"]
subgraph VLAN10[LAN 10 - 10.0.0.0/24]
Clients[LAN Clients]
end
subgraph VLAN20[SERVER 20 - 10.0.20.0/24]
Nodes[K8s/Talos Nodes]
IntIngress[Internal Ingress VIPs]
Services[Internal Services]
end
subgraph VLAN30[MGMT 30 - 10.0.30.0/24]
IPMI[IPMI/BMC]
NetMgmt[Switch/AP Mgmt]
end
subgraph VLAN40[DMZ 40 - 10.0.40.0/24]
PubIngress[Public Ingress VIPs]
end
Edge --> VLAN10
Edge --> VLAN20
Edge --> VLAN30
Edge --> VLAN40
Clients --> IntIngress --> Services
Internet -.->|Allowed 80/443 only via firewall/NAT| PubIngress --> Services
Migration Steps (Incremental)
- Current (flat): keep everything on
10.0.0.0/24, single DHCP (done). - Add managed switch: trunk to router, keep most devices untagged on VLAN 10.
- Move servers to VLAN 20; keep clients on VLAN 10.
- Move management to VLAN 30 (static/reserved IPs).
- Add DMZ VLAN 40 for public ingress VIPs; expose only 80/443 as needed.