Network standards — design, operation and security
Criteria verified as of August 2026. Re-verify on the web before committing to anything (§8).
1. Scope and triggers
Applies when designing, configuring, reviewing or diagnosing: IP addressing and subnetting,
IPAM, VLANs and segmentation, routing (static, OSPF, BGP, prefix filtering, RPKI, ECMP),
switching (STP, LACP, MLAG), stateful firewall policy, NAT, DNS and DHCP architecture,
L4/L7 load balancing and reverse proxies, VPNs and overlays, ZTNA, IPv6 and dual stack, QoS, MTU/MSS,
hardening of network equipment and the OOB management plane, 802.1X/NAC, layered diagnosis,
flow telemetry and network automation.
Triggers: nft/nftables.conf, firewalld, frr.conf, bird.conf, named.conf,
unbound.conf, Corefile, kea-dhcp4.conf, haproxy.cfg, nginx.conf, Caddyfile,
wg0.conf, netplan/systemd-networkd/NetworkManager, tcpdump, mtr, ss, NetBox,
containerlab (*.clab.yml), OPNsense/pfSense/VyOS/RouterOS/UniFi, "VLAN", "BGP", "MTU",
"DNS", "subnet", "peering", "MSS clamping".
Not applicable: see onprem-standards (firewall and VLANs at host/server level,
basic fleet monitoring), aws-standards/azure-standards/gcp-standards (VPC,
Security Groups/NSG, the provider's managed load balancers and DNS),
kubernetes-standards (CNI, NetworkPolicy, Service/Ingress, service mesh),
observability-standards (network metrics, logs, traces and alerts),
sre-practice-standards (SLOs and error budget), detection-engineering-standards (security
telemetry, SIEM and detection rules — Suricata/Zeek signatures are governed there, the sensor and its
placement in the network, here), incident-response-forensics-standards (capture and preservation of
traffic during a compromise), linux-hardening-standards (host firewall and OS baseline
as opposed to the network design fixed here),
firewall-policy-standards (which flow is allowed between zones and with what governance: design of the
nftables/firewalld ruleset, owner, approval and expiry of each rule, egress filtering,
review of shadowed and orphaned rules), dns-standards (the DNS server, its zone and its
data: SOA and TTL, DNSSEC, mail records, DoT/DoH, domain hijacking), and
vpn-standards and network-troubleshooting-standards (tunnels and
diagnosis). This skill keeps topology, addressing and VLANs, routing and BGP, design-level MTU/MSS,
proxies and load balancing, overlays, the OOB management plane and the choice of perimeter platform,
plus the governance of the network as code.
Delegation of depth — this skill is the trunk: it fixes the general
criteria and hands the detail to three skills that do cover it. If the answer requires more than the
principle, it is theirs:
routing-switching-standards: campus and edge in depth — STP and routed access, MLAG,
first-hop redundancy, and above all the complete BGP policy (attributes, communities,
outbound filtering, RPKI/ROV and IRR, BCP 38/84, BFD, CoPP, 802.1X, MACsec).
datacenter-fabric-standards: the data centre fabric — leaf-spine Clos, VXLAN with
EVPN, symmetric IRB, ESI multihoming, encapsulation MTU and lossless Ethernet.
network-automation-standards: the network as code — source of truth and operational IPAM,
NETCONF/RESTCONF/YANG and gNMI as opposed to the CLI, virtual lab, pre- and post-validation,
batched rollout with tested rollback, and continuous streaming telemetry as opposed to SNMP polling.
What this skill says about "network as code" is the principle; the procedure is theirs.
wireless-standards: the corporate wireless network as a radio system — site survey,
spectrum and capacity, channel plan, roaming, WPA3 and 802.1X with certificate validation on the
client. This skill's prohibition on the shared PSK still holds; the design that
replaces it is theirs.
high-speed-interconnect-standards: InfiniBand, RoCE v2 and compute and storage RDMA,
which is a different network from the data one and is not designed with the same criteria.
load-balancing-standards: the load balancer and the reverse proxy — health checks,
draining, TLS termination and high availability of the balancer itself. The products this
skill fixes in §2 (HAProxy, nginx, Traefik, Caddy) are chosen and operated there.
Guiding principle: the network is default-deny and documented as code. Every allowed
flow exists because somebody justified it and it was written down; what is not in the SoT does
not exist, and what cannot be diagnosed layer by layer is not in production.
2. Default decisions
Versions verified Aug 2026. Verify the latest stable on the web before pinning it in
a real project (§8): this stack rotates every quarter.
| Area |
Default |
Forbidden / alternative |
| Firewall on Linux |
nftables (Fedora 44: nftables 1.1.4, firewalld 2.4.0 with the nftables backend since firewalld 0.6). A single inet table with IPv4+IPv6 |
iptables-legacy; mixing nft rules and iptables commands (the iptables-nft shim translates silently). iptables-nft/ipset deprecated since RHEL 9 and no longer a documented option in RHEL 10 |
| Perimeter router/firewall |
OPNsense 26.7 "Xenial Xenops" (FreeBSD 15.1 base; half-yearly cycle Jan/Jul) or VyOS for network-as-code |
pfSense CE 2.8.1 (latest CE, Sep-2025; slow CE cadence) only if it is already in house. MikroTik RouterOS 7.23 stable / 7.21.5 long-term |
| VyOS images |
Stream (2026.03, quarterly, free) for lab/non-critical; LTS requires a paid or contributor subscription |
Rolling/nightly in production |
| Dynamic routing |
FRR 10.7.0 (Jul-2026) on Linux hosts/routers; BIRD 3.3.1 (LTS 3.1.x) on route servers and IXPs |
Static routes in topologies with more than one path; redistribution without filters |
| Site-to-site VPN |
WireGuard in-kernel; IPsec IKEv2 only for interoperability with third parties |
PPTP, L2TP without IPsec, proprietary SSLVPN without patching |
| Overlay with a control plane |
NetBird ≥ 0.65 (100% open source, self-hostable control plane, unified binary) or Tailscale; Headscale 0.29.x (beta) if you want the Tailscale client without its coordinator |
Manual WireGuard mesh with more than ~10 nodes (key distribution does not scale) |
| Internal recursive DNS |
Unbound 1.24.2 or Knot Resolver, with DNSSEC validation enabled |
systemd-resolved and dnsmasq as DNSSEC validators (failures documented in SIDN's independent evaluation) |
| Authoritative DNS |
Knot DNS 3.5.4 or BIND 9.20.x ESV (9.20.26 with critical DNSSEC patches) |
BIND 9.18 (EOL Jun-2026); development branches 9.21/9.23 in production |
| Lab/home DNS filtering |
Pi-hole v6 (FTL 6.7 / Core 6.4.3, Jul-2026) or AdGuard Home |
Pi-hole as the only resolver with no redundancy |
| DHCP |
Kea (ISC's official successor); reservations and options from the SoT |
ISC dhcpd in new deployments (no active maintenance — confirm the status, §8) |
| Reverse proxy / L7 LB |
HAProxy 3.2.x LTS (supported to 2030-Q2) or 3.4.0 LTS; nginx 1.30.x stable; Traefik v3.7.x in dynamic environments; Caddy 2.11.x when the value is automatic ACME |
nginx mainline in prod; Traefik v2 (patches only); an LB without active health checks |
| IPAM and source of truth |
NetBox 4.6.7 as the SoT of intent (not of discovery) |
Spreadsheets; auto-populating NetBox from a network scan as if it were intent |
| IPv6 |
Dual stack by default in new designs (IPv6 to Google passed 50% in Mar-2026) |
Deploying IPv4-only "because it'll come later"; NAT66 out of habit |
| Diagnosis |
tcpdump/Wireshark, mtr, ss, ip, nft list ruleset |
netstat, ifconfig, route (obsolete, they hide state) |
| Flow telemetry |
IPFIX/NetFlow v9 (sFlow if the hardware only supports that) to a collector (Akvorado/pmacct/GoFlow2) |
A network with no flow visibility: you can neither investigate nor size it |
3. Structure and conventions
Addressing and IPAM
- Hierarchical and aggregable plan by site → zone → role, with reserved room for
growth; no overlaps between sites, VPNs and clouds (RFC 1918 runs out fast in
mergers — allocate large, documented blocks).
- Point-to-point links:
/31 in IPv4 and /127 in IPv6. Loopbacks /32 and /128 as the
device's stable identity (router-id, BGP session termination, management).
- IPv6: GUA for everything that routes, ULA (
fc00::/7) only for what never leaves;
SLAAC for clients, static addressing or DHCPv6 for servers. No
MAC-derived interface addresses on servers (they break firewalling and DNS).
- NetBox holds the intent; the network must converge towards it. Close the loop in
both directions: after every change, the SoT is updated or the change is not finished.
Segmentation
- Minimum zones: management (OOB) / servers / users / IoT / DMZ / storage and
replication / guests. Industrial zoning is not one of these zones and is not designed
with these criteria: Purdue levels, conduits with a security level, level 3.5 DMZ and
the isolation of the SIS belong to
ot-ics-security-standards, and there Safety wins over
availability. Putting the plant into an "IoT-OT" VLAN from this list is the classic mistake. One VLAN = one broadcast domain = one subnet = one policy
zone. Default-deny between zones, every allowed flow with a written owner and reason.
- East-west microsegmentation where the data justifies it (NIST SP 800-207 and SP 800-215
as the framework): location in the network grants no trust.
Routing
- OSPF for the interior (real areas, not everything in area 0); BGP for multihoming, DC fabric
(leaf-spine eBGP) and overlays. iBGP with route reflectors only when a full mesh
stops being reasonable.
- On every eBGP: inbound and outbound prefix-list or route-map (deny by default),
maximum-prefix with an action, AS-path filtering, and RPKI ROV with your own validator
(Routinator/rpki-client) — invalid = reject. Global ROA coverage 67.4% (Jun-2026), but
only ~12.3% of ASes apply full ROV: signing ROAs protects nobody if nobody validates.
- Complement it with RFC 9234 (Only-to-Customer) against route leaks. ASPA is still an
IETF draft (
draft-ietf-sidrops-aspa-verification), not a finished product: useful,
not to be trusted as the only control.
- ECMP with per-flow hashing (not per-packet: it reorders and wrecks TCP). uRPF and BCP 38
antispoofing at the edge.
Switching
- LACP aggregation (active, not
static) against a stack/MLAG; never a single uplink on
anything that matters.
- STP: RSTP/MSTP with the root bridge explicitly pinned and a priority for the secondary;
bpduguard + rootguard + portfast/edge on access ports. STP with the root elected
by MAC is a topology nobody controls.
MTU, MSS and fragmentation — the usual cause of "SSH works but SCP hangs":
MSS = MTU − 40 (IPv4) # 20 IP + 20 TCP; −60 en IPv6
WireGuard sobre Ethernet 1500 → MTU 1420 → clamp MSS 1380
WireGuard sobre PPPoE (1492) → MTU 1412 → clamp MSS 1372
- Adjust the tunnel MTU and also do MSS clamping; they are not alternatives.
--clamp-mss-to-pmtu when the path MTU is unknown; an explicit value when it is known.
- Do not block ICMP type 3 code 4 (fragmentation needed): without it, PMTUD dies and
large packets disappear silently. This is not a hole: it is diagnosis.
- Check offloading (GRO/GSO) on tunnel interfaces: it aggregates packets above the MTU
and drops them with DF set.
nftables skeleton (host and router)
table inet filter {
chain input {
type filter hook input priority filter; policy drop;
ct state established,related accept
ct state invalid drop
iif lo accept
ip protocol icmp icmp type { echo-request, destination-unreachable, time-exceeded } accept
ip6 nexthdr icmpv6 accept # ICMPv6 es obligatorio, no opcional
tcp dport 22 ip saddr @mgmt_nets accept
}
chain forward {
type filter hook forward priority filter; policy drop;
tcp flags syn tcp option maxseg size set rt mtu # MSS clamping a PMTU
ct state established,related accept
# cada regla de permiso: origen, destino, puerto y comentario con el motivo
}
chain output { type filter hook output priority filter; policy drop; } # egress filtrado
}
4. Mandatory quality gates
- Syntax validation before applying, always:
nft -c -f ruleset.nft,
named-checkconf/named-checkzone, unbound-checkconf, haproxy -c -f, nginx -t,
vtysh -C, kea-dhcp4 -t. A config that does not validate does not even reach staging.
- A safety net on every remote firewall/routing change:
commit-confirm (VyOS),
safe mode (RouterOS), timed rollback or an open OOB console. Without it, you do not touch it.
- Lab before production for new topologies or protocols: containerlab or
VMs with the same image versions as production.
- Negative tests mandatory: verify that what is allowed works and that what is
forbidden is forbidden. A firewall tested only along the happy path is not tested.
- Post-change test by layers: link and interface errors → ARP/ND → route →
connectivity → MTU with DF (
ping -M do -s) → DNS → the real application (not just ping).
- Drift detection as a gate: periodic diff between the running config and the SoT
(NetBox + templates). A difference is a finding with an owner, not a curiosity.
- Network changes by reviewed PR in the repo (templates, playbooks, rules), never by ad hoc
CLI in production; configuration backup of every device, versioned and restorable.
5. Security
Filtering policy
- Default-deny inbound and outbound. Egress filtering is what stops C2 and
exfiltration; a perimeter that only looks inwards is half built.
- Stateful firewall: beware of asymmetric routes, which break state tracking
and produce intermittent failures impossible to diagnose from the application.
- Rate limiting, anti-DDoS protection and a WAF in front of what is exposed; minimum published
surface, and what is published, inventoried.
DNS as a security control and as a leak channel
- All clients resolve only against the corporate resolver: block
udp/tcp 53
outbound and 853 (DoT) at the edge.
- Neutralise uncontrolled DoH: browser policy (
DnsOverHttpsMode = off in
Chrome, network.trr.mode = 5 in Firefox), blocking public DoH resolver IPs on
443, and your own pinned DoH if you want encryption in transit. Application-level DoH is the
real bypass of all DNS filtering.
- Log 100% of the resolver's queries and analyse label length,
entropy, number of subdomains, volume and NXDOMAIN rate: DNS exfiltration lives
there. Assume that purely network-based detection does not close DoH-inside-HTTPS: back it with EDR.
- DNSSEC: validation on the recursive resolver (always) and signing of your own zones.
HTTPS/SVCB (RFC 9460) and ECH change what is visible on the wire: keep it in the model.
Management plane and devices
- Out-of-band management, on a dedicated VLAN with no route from user networks, reachable only
via bastion/VPN. It is target number one after the first compromise.
- SSH with keys, SNMPv3 only, centralised AAA (RADIUS/TACACS+) with named
accounts,
enable/local for emergencies only, in a secrets manager. No telnet, no HTTP,
no SNMP v1/v2c, no factory credentials, unnecessary services off.
- Hardening per the vendor's CIS benchmark; firmware reviewed quarterly and on an exploitable CVE.
Access and trust
- Per-application ZTNA rather than a full-tunnel VPN that grants access to "the network"; strong
identity (OIDC/MFA) and device posture before location.
- 802.1X on wired access and WiFi (WPA3-Enterprise), with dynamic VLAN and a quarantine
network;
port-security where 802.1X does not reach. MACsec on links between cabinets or
campuses when the medium is not trusted.
- mTLS or IPsec for sensitive east-west traffic; TLS 1.2+ / 1.3 on everything published.
6. Performance and operability
- Network signals that are always watched: latency and jitter (RTT per hop), packet
loss, per-interface errors/discards, link utilisation and saturation, routing table
size and BGP/OSPF session state, certificate expiry and DHCP leases.
- Flows (IPFIX/NetFlow/sFlow) to know who talks to whom: without them there is no
incident investigation and no sizing with data. Complement with gNMI/OpenConfig
(streaming telemetry) where the device supports it, instead of massive SNMP polling.
- Layered diagnosis, in order and with no skipping: physical (light, CRC errors, negotiation)
→ link (VLAN, MAC/ARP/ND, STP) → network (route, MTU, ICMP) → transport (
ss, retransmissions,
handshake in a capture) → application (DNS, TLS, HTTP). Skipping layers is how hours get lost.
- QoS:
fq_codel/CAKE at the edge solves bufferbloat, which is 90% of the real "the network is
slow". DSCP is only useful if it is marked, honoured and not wiped end to end;
marking without agreement across every hop is decorative. L4S is emerging: do not assume it.
- Capacity with data: plan on percentiles of real utilisation, with an action threshold
around 70% sustained; do not size by intuition or by an anecdotal peak.
- HA with no SPOF: dual uplink over different paths, VRRP/CARP with tested failover,
redundancy of DNS and DHCP resolvers, diversified power and switches. A failover
that has not been exercised does not count.
- Runbooks per scenario: uplink loss, a firewall down, a route leak, DHCP pool
exhaustion, DNS poisoning/outage, layer 2 loop. Versioned and with an owner.
7. Sustainability and prohibitions
- Network as code: topology, addressing, rules and baselines in a repo, reviewed
by PR; idempotent automation (Ansible network collections) fed by NetBox;
containerlab to validate before touching hardware.
- Cadence: firmware/IOS/RouterOS and the NOS reviewed every quarter and on a CVE with
relevant KEV/EPSS; LTS branches of HAProxy/BIND/FRR rather than the latest minor; no
EOL version in production without a dated exit plan (BIND 9.18 EOL Jun-2026 is the
reminder of the quarter).
- Deprecation with a plan: every retired rule, VPN or VLAN is really deleted (config, SoT and
documentation), it is not left "just in case" accumulating surface.
FORBIDDEN
- ❌ Permanent
any/any, rules with no comment giving the reason, or 0.0.0.0/0 inbound without
written justification.
- ❌ A firewall without egress filtering; "it's the internal network, no need to filter".
- ❌ Mixing
iptables and nftables on the same host; iptables-legacy on new systems.
- ❌ Blocking ICMP indiscriminately (it kills PMTUD and diagnosis) or ICMPv6 in IPv6 (it breaks ND).
- ❌ Changing firewall/routing remotely without commit-confirm, timed rollback or an OOB console.
- ❌ eBGP without prefix filters, without
maximum-prefix and without RPKI ROV.
- ❌ Management interfaces (switches, firewalls, BMC, hypervisors) reachable from user
networks or from the Internet.
- ❌ Telnet, HTTP management, SNMP v1/v2c, default credentials, shared accounts.
- ❌ Allowing outbound DNS to any resolver, or leaving the browser's DoH without a policy.
- ❌ A single resolver, DHCP server or firewall with no redundancy on anything that matters.
- ❌ A flat VLAN "because it's easier"; IoT/OT in the same zone as servers or users.
- ❌ Tunnels without adjusting MTU or MSS and then blaming the application.
- ❌ Manual configuration not reflected in the SoT/repo (snowflakes) and uncorrected drift.
- ❌ A full-tunnel VPN granting access to the whole network instead of per-application access.
- ❌ Corporate Wi-Fi with a shared PSK instead of WPA3/802.1X.
- ❌ Populating NetBox by automatic discovery and calling it "intent".
8. Mandatory web verification
Before pinning any version, flag or concrete datum, look it up — do not recall it.
Verified Aug 2026 (expires fast): nftables 1.1.4 / firewalld 2.4.0 on Fedora 44;
OPNsense 26.7 (FreeBSD 15.1); pfSense CE 2.8.1; RouterOS 7.23 stable / 7.21.5 long-term;
VyOS Stream 2026.03; FRR 10.7.0; BIRD 3.3.1 (LTS 3.1.x); BIND 9.20.26 ESV (9.18 EOL
Jun-2026); Unbound 1.24.2; Knot DNS 3.5.4; Pi-hole FTL 6.7 / Core 6.4.3; HAProxy 3.2.x and
3.4.0 LTS; nginx 1.30.x stable / 1.31.x mainline; Traefik v3.7.10; Caddy 2.11.4;
NetBox 4.6.7; NetBird 0.65+; Headscale 0.29.x (beta).
- Latest stable and EOL of every component you are going to install (endoflife.date + the
vendor's release notes), most especially BIND, nginx, HAProxy and the device's NOS.
- Active CVEs with KEV/EPSS before deciding the urgency of a patch — 2026 has been a
dense year for nginx and BIND.
- The state of
iptables/nftables on the project's exact distribution (RHEL 10, Fedora,
Debian) before writing rules: the compatibility layer changes between versions.
- The state of Kea and ISC
dhcpd, and of containerlab, FreeRADIUS, Wireshark, Akvorado and
the UniFi Network Application — not verified in this document.
- The state of RPKI/ASPA (ASPA is still a draft), ROV adoption and IPv6 figures
(Google/APNIC): these are data that change every quarter.
- VyOS image policy (LTS only with a subscription or contribution) and the release
cycle of OPNsense/pfSense CE before committing to a platform.
- The exact RFC before citing it (SVCB/HTTPS, DoQ, OTC, L4S, IPv6-mostly): number and status.
If the web contradicts this document, the web wins — flag the discrepancy.
1---2name: networking-standards3description: Network engineering standards. Use when working with IP addressing and VLANs, BGP/OSPF (FRR, BIRD), nftables/firewalld rules, DNS (BIND, Unbound, CoreDNS, Pi-hole), Kea DHCP, HAProxy/nginx/Traefik/Caddy proxies, WireGuard/Tailscale/NetBird overlays, MTU/MSS, tcpdump/Wireshark, NetBox, OPNsense/VyOS/RouterOS.4---56# Network standards — design, operation and security78Criteria verified as of **August 2026**. Re-verify on the web before committing to anything (§8).910## 1. Scope and triggers1112Applies when designing, configuring, reviewing or diagnosing: IP addressing and subnetting,13IPAM, VLANs and segmentation, routing (static, OSPF, BGP, prefix filtering, RPKI, ECMP),14switching (STP, LACP, MLAG), stateful firewall policy, NAT, DNS and DHCP architecture,15L4/L7 load balancing and reverse proxies, VPNs and overlays, ZTNA, IPv6 and dual stack, QoS, MTU/MSS,16hardening of network equipment and the OOB management plane, 802.1X/NAC, layered diagnosis,17flow telemetry and network automation.1819Triggers: `nft`/`nftables.conf`, `firewalld`, `frr.conf`, `bird.conf`, `named.conf`,20`unbound.conf`, `Corefile`, `kea-dhcp4.conf`, `haproxy.cfg`, `nginx.conf`, `Caddyfile`,21`wg0.conf`, `netplan`/`systemd-networkd`/NetworkManager, `tcpdump`, `mtr`, `ss`, NetBox,22containerlab (`*.clab.yml`), OPNsense/pfSense/VyOS/RouterOS/UniFi, "VLAN", "BGP", "MTU",23"DNS", "subnet", "peering", "MSS clamping".2425**Not applicable**: see `onprem-standards` (firewall and VLANs at host/server level,26basic fleet monitoring), `aws-standards`/`azure-standards`/`gcp-standards` (VPC,27Security Groups/NSG, the provider's managed load balancers and DNS),28`kubernetes-standards` (CNI, NetworkPolicy, Service/Ingress, service mesh),29`observability-standards` (network metrics, logs, traces and alerts),30`sre-practice-standards` (SLOs and error budget), `detection-engineering-standards` (security31telemetry, SIEM and detection rules — Suricata/Zeek signatures are governed there, the sensor and its32placement in the network, here), `incident-response-forensics-standards` (capture and preservation of33traffic during a compromise), `linux-hardening-standards` (**host** firewall and OS baseline34as opposed to the network design fixed here),35`firewall-policy-standards` (**which flow is allowed between zones and with what governance**: design of the36nftables/firewalld ruleset, owner, approval and expiry of each rule, egress filtering,37review of shadowed and orphaned rules), `dns-standards` (**the DNS server, its zone and its38data**: SOA and TTL, DNSSEC, mail records, DoT/DoH, domain hijacking), and39`vpn-standards` and `network-troubleshooting-standards` (tunnels and40diagnosis). This skill keeps **topology, addressing and VLANs, routing and BGP, design-level MTU/MSS,41proxies and load balancing, overlays, the OOB management plane and the choice of perimeter platform**,42plus the governance of the network as code.4344**Delegation of depth** — this skill is the **trunk**: it fixes the general45criteria and **hands the detail** to three skills that do cover it. If the answer requires more than the46principle, it is theirs:47- `routing-switching-standards`: **campus and edge in depth** — STP and routed access, MLAG,48 first-hop redundancy, and above all **the complete BGP policy** (attributes, communities,49 outbound filtering, **RPKI/ROV and IRR**, BCP 38/84, BFD, CoPP, 802.1X, MACsec).50- `datacenter-fabric-standards`: **the data centre fabric** — leaf-spine Clos, VXLAN with51 EVPN, symmetric IRB, ESI multihoming, encapsulation MTU and lossless Ethernet.52- `network-automation-standards`: **the network as code** — source of truth and operational IPAM,53 NETCONF/RESTCONF/YANG and gNMI as opposed to the CLI, virtual lab, pre- and post-validation,54 batched rollout with tested rollback, and continuous streaming telemetry as opposed to SNMP polling.55 **What this skill says about "network as code" is the principle; the procedure is theirs.**56- `wireless-standards`: **the corporate wireless network as a radio system** — site survey,57 spectrum and capacity, channel plan, roaming, WPA3 and 802.1X with certificate validation on the58 client. **This skill's prohibition on the shared PSK still holds; the design that59 replaces it is theirs.**60- `high-speed-interconnect-standards`: **InfiniBand, RoCE v2 and compute and storage RDMA**,61 which is **a different network from the data one** and is not designed with the same criteria.62- `load-balancing-standards`: **the load balancer and the reverse proxy** — health checks,63 draining, TLS termination and high availability of the balancer itself. **The products this64 skill fixes in §2 (HAProxy, nginx, Traefik, Caddy) are chosen and operated there.**6566**Guiding principle**: the network is **default-deny and documented as code**. Every allowed67flow exists because somebody justified it and it was written down; what is not in the SoT does68not exist, and what cannot be diagnosed layer by layer is not in production.6970## 2. Default decisions7172> Versions verified Aug 2026. **Verify the latest stable on the web before pinning it in73> a real project** (§8): this stack rotates every quarter.7475| Area | Default | Forbidden / alternative |76|---|---|---|77| Firewall on Linux | **nftables** (Fedora 44: nftables 1.1.4, firewalld 2.4.0 with the nftables backend since firewalld 0.6). A single `inet` table with IPv4+IPv6 | `iptables-legacy`; mixing nft rules and `iptables` commands (the `iptables-nft` shim translates silently). `iptables-nft`/`ipset` deprecated since RHEL 9 and no longer a documented option in RHEL 10 |78| Perimeter router/firewall | **OPNsense 26.7 "Xenial Xenops"** (FreeBSD 15.1 base; half-yearly cycle Jan/Jul) or **VyOS** for network-as-code | pfSense CE 2.8.1 (latest CE, Sep-2025; slow CE cadence) only if it is already in house. MikroTik **RouterOS 7.23** stable / **7.21.5** long-term |79| VyOS images | **Stream** (2026.03, quarterly, free) for lab/non-critical; **LTS** requires a paid or contributor subscription | Rolling/nightly in production |80| Dynamic routing | **FRR 10.7.0** (Jul-2026) on Linux hosts/routers; **BIRD 3.3.1** (LTS 3.1.x) on route servers and IXPs | Static routes in topologies with more than one path; redistribution without filters |81| Site-to-site VPN | **WireGuard** in-kernel; IPsec IKEv2 only for interoperability with third parties | PPTP, L2TP without IPsec, proprietary SSLVPN without patching |82| Overlay with a control plane | **NetBird ≥ 0.65** (100% open source, self-hostable control plane, unified binary) or **Tailscale**; **Headscale 0.29.x** (beta) if you want the Tailscale client without its coordinator | Manual WireGuard mesh with more than ~10 nodes (key distribution does not scale) |83| Internal recursive DNS | **Unbound 1.24.2** or **Knot Resolver**, with DNSSEC validation enabled | `systemd-resolved` and `dnsmasq` as DNSSEC validators (failures documented in SIDN's independent evaluation) |84| Authoritative DNS | **Knot DNS 3.5.4** or **BIND 9.20.x ESV** (9.20.26 with critical DNSSEC patches) | BIND **9.18 (EOL Jun-2026)**; development branches 9.21/9.23 in production |85| Lab/home DNS filtering | **Pi-hole v6** (FTL 6.7 / Core 6.4.3, Jul-2026) or AdGuard Home | Pi-hole as the only resolver with no redundancy |86| DHCP | **Kea** (ISC's official successor); reservations and options from the SoT | ISC `dhcpd` in new deployments (no active maintenance — confirm the status, §8) |87| Reverse proxy / L7 LB | **HAProxy 3.2.x LTS** (supported to 2030-Q2) or 3.4.0 LTS; **nginx 1.30.x stable**; **Traefik v3.7.x** in dynamic environments; **Caddy 2.11.x** when the value is automatic ACME | nginx mainline in prod; Traefik v2 (patches only); an LB without active health checks |88| IPAM and source of truth | **NetBox 4.6.7** as the SoT of **intent** (not of discovery) | Spreadsheets; auto-populating NetBox from a network scan as if it were intent |89| IPv6 | **Dual stack by default** in new designs (IPv6 to Google passed 50% in Mar-2026) | Deploying IPv4-only "because it'll come later"; NAT66 out of habit |90| Diagnosis | `tcpdump`/Wireshark, `mtr`, `ss`, `ip`, `nft list ruleset` | `netstat`, `ifconfig`, `route` (obsolete, they hide state) |91| Flow telemetry | **IPFIX/NetFlow v9** (sFlow if the hardware only supports that) to a collector (Akvorado/pmacct/GoFlow2) | A network with no flow visibility: you can neither investigate nor size it |9293## 3. Structure and conventions9495**Addressing and IPAM**96- Hierarchical and **aggregable** plan by site → zone → role, with reserved room for97 growth; no overlaps between sites, VPNs and clouds (RFC 1918 runs out fast in98 mergers — allocate large, documented blocks).99- Point-to-point links: `/31` in IPv4 and `/127` in IPv6. Loopbacks `/32` and `/128` as the100 device's stable identity (router-id, BGP session termination, management).101- IPv6: **GUA** for everything that routes, ULA (`fc00::/7`) only for what never leaves;102 SLAAC for clients, static addressing or DHCPv6 for servers. No103 MAC-derived interface addresses on servers (they break firewalling and DNS).104- **NetBox holds the intent**; the network must converge towards it. Close the loop in105 both directions: after every change, the SoT is updated or the change is not finished.106107**Segmentation**108- Minimum zones: management (OOB) / servers / users / IoT / DMZ / storage and109 replication / guests. **Industrial zoning is not one of these zones and is not designed110 with these criteria**: Purdue levels, conduits with a security level, level 3.5 DMZ and111 the isolation of the SIS belong to `ot-ics-security-standards`, and there *Safety* wins over112 availability. Putting the plant into an "IoT-OT" VLAN from this list is the classic mistake. One VLAN = one broadcast domain = one subnet = one policy113 zone. **Default-deny between zones**, every allowed flow with a written owner and reason.114- East-west microsegmentation where the data justifies it (NIST SP 800-207 and SP 800-215115 as the framework): location in the network grants no trust.116117**Routing**118- OSPF for the interior (real areas, not everything in area 0); BGP for multihoming, DC fabric119 (leaf-spine eBGP) and overlays. iBGP with route reflectors only when a full mesh120 stops being reasonable.121- **On every eBGP**: inbound and outbound prefix-list or route-map (deny by default),122 `maximum-prefix` with an action, AS-path filtering, and RPKI **ROV** with your own validator123 (Routinator/rpki-client) — invalid = reject. Global ROA coverage 67.4% (Jun-2026), but124 only ~12.3% of ASes apply full ROV: signing ROAs protects nobody if nobody validates.125- Complement it with **RFC 9234 (Only-to-Customer)** against route leaks. **ASPA is still an126 IETF draft** (`draft-ietf-sidrops-aspa-verification`), not a finished product: useful,127 not to be trusted as the only control.128- ECMP with per-flow hashing (not per-packet: it reorders and wrecks TCP). uRPF and BCP 38129 antispoofing at the edge.130131**Switching**132- **LACP** aggregation (active, not `static`) against a stack/MLAG; never a single uplink on133 anything that matters.134- STP: RSTP/MSTP with the **root bridge explicitly pinned** and a priority for the secondary;135 `bpduguard` + `rootguard` + `portfast/edge` on access ports. STP with the root elected136 by MAC is a topology nobody controls.137138**MTU, MSS and fragmentation** — the usual cause of "SSH works but SCP hangs":139```140MSS = MTU − 40 (IPv4) # 20 IP + 20 TCP; −60 en IPv6141WireGuard sobre Ethernet 1500 → MTU 1420 → clamp MSS 1380142WireGuard sobre PPPoE (1492) → MTU 1412 → clamp MSS 1372143```144- Adjust the tunnel MTU **and also** do MSS clamping; they are not alternatives.145- `--clamp-mss-to-pmtu` when the path MTU is unknown; an explicit value when it is known.146- **Do not block ICMP type 3 code 4** (fragmentation needed): without it, PMTUD dies and147 large packets disappear silently. This is not a hole: it is diagnosis.148- Check offloading (GRO/GSO) on tunnel interfaces: it aggregates packets above the MTU149 and drops them with DF set.150151**nftables skeleton (host and router)**152```nft153table inet filter {154 chain input {155 type filter hook input priority filter; policy drop;156 ct state established,related accept157 ct state invalid drop158 iif lo accept159 ip protocol icmp icmp type { echo-request, destination-unreachable, time-exceeded } accept160 ip6 nexthdr icmpv6 accept # ICMPv6 es obligatorio, no opcional161 tcp dport 22 ip saddr @mgmt_nets accept162 }163 chain forward {164 type filter hook forward priority filter; policy drop;165 tcp flags syn tcp option maxseg size set rt mtu # MSS clamping a PMTU166 ct state established,related accept167 # cada regla de permiso: origen, destino, puerto y comentario con el motivo168 }169 chain output { type filter hook output priority filter; policy drop; } # egress filtrado170}171```172173## 4. Mandatory quality gates174175- **Syntax validation before applying**, always: `nft -c -f ruleset.nft`,176 `named-checkconf`/`named-checkzone`, `unbound-checkconf`, `haproxy -c -f`, `nginx -t`,177 `vtysh -C`, `kea-dhcp4 -t`. A config that does not validate does not even reach staging.178- **A safety net on every remote firewall/routing change**: `commit-confirm` (VyOS),179 safe mode (RouterOS), timed rollback or an open OOB console. Without it, you do not touch it.180- **Lab before production** for new topologies or protocols: containerlab or181 VMs with the same image versions as production.182- **Negative tests mandatory**: verify that what is allowed works **and that what is183 forbidden is forbidden**. A firewall tested only along the happy path is not tested.184- **Post-change test by layers**: link and interface errors → ARP/ND → route →185 connectivity → MTU with DF (`ping -M do -s`) → DNS → the real application (not just ping).186- **Drift detection as a gate**: periodic diff between the running config and the SoT187 (NetBox + templates). A difference is a finding with an owner, not a curiosity.188- Network changes by reviewed PR in the repo (templates, playbooks, rules), never by ad hoc189 CLI in production; configuration backup of every device, versioned and restorable.190191## 5. Security192193**Filtering policy**194- **Default-deny inbound and outbound**. Egress filtering is what stops C2 and195 exfiltration; a perimeter that only looks inwards is half built.196- Stateful firewall: beware of **asymmetric routes**, which break state tracking197 and produce intermittent failures impossible to diagnose from the application.198- Rate limiting, anti-DDoS protection and a WAF in front of what is exposed; minimum published199 surface, and what is published, inventoried.200201**DNS as a security control and as a leak channel**202- All clients resolve **only** against the corporate resolver: block `udp/tcp 53`203 outbound and `853` (DoT) at the edge.204- Neutralise uncontrolled DoH: browser policy (`DnsOverHttpsMode` = off in205 Chrome, `network.trr.mode` = 5 in Firefox), blocking public DoH resolver IPs on206 443, and your own *pinned* DoH if you want encryption in transit. Application-level DoH is the207 real bypass of all DNS filtering.208- **Log 100% of the resolver's queries** and analyse label length,209 entropy, number of subdomains, volume and NXDOMAIN rate: DNS exfiltration lives210 there. Assume that purely network-based detection does not close DoH-inside-HTTPS: back it with EDR.211- DNSSEC: validation on the recursive resolver (always) and signing of your own zones.212 `HTTPS`/`SVCB` (RFC 9460) and ECH change what is visible on the wire: keep it in the model.213214**Management plane and devices**215- **Out-of-band** management, on a dedicated VLAN with no route from user networks, reachable only216 via bastion/VPN. It is target number one after the first compromise.217- SSH with keys, **SNMPv3** only, centralised AAA (RADIUS/TACACS+) with named218 accounts, `enable`/local for emergencies only, in a secrets manager. No telnet, no HTTP,219 no SNMP v1/v2c, no factory credentials, unnecessary services off.220- Hardening per the vendor's CIS benchmark; firmware reviewed quarterly and on an exploitable CVE.221222**Access and trust**223- **Per-application ZTNA** rather than a full-tunnel VPN that grants access to "the network"; strong224 identity (OIDC/MFA) and device posture before location.225- 802.1X on wired access and WiFi (WPA3-Enterprise), with dynamic VLAN and a quarantine226 network; `port-security` where 802.1X does not reach. MACsec on links between cabinets or227 campuses when the medium is not trusted.228- mTLS or IPsec for sensitive east-west traffic; TLS 1.2+ / 1.3 on everything published.229230## 6. Performance and operability231232- **Network signals that are always watched**: latency and jitter (RTT per hop), packet233 loss, per-interface errors/discards, link utilisation and saturation, routing table234 size and BGP/OSPF session state, certificate expiry and DHCP leases.235- **Flows (IPFIX/NetFlow/sFlow)** to know who talks to whom: without them there is no236 incident investigation and no sizing with data. Complement with gNMI/OpenConfig237 (streaming telemetry) where the device supports it, instead of massive SNMP polling.238- **Layered diagnosis, in order and with no skipping**: physical (light, CRC errors, negotiation)239 → link (VLAN, MAC/ARP/ND, STP) → network (route, MTU, ICMP) → transport (`ss`, retransmissions,240 handshake in a capture) → application (DNS, TLS, HTTP). Skipping layers is how hours get lost.241- **QoS**: `fq_codel`/CAKE at the edge solves bufferbloat, which is 90% of the real "the network is242 slow". DSCP is only useful if it is marked, honoured and not wiped end to end;243 marking without agreement across every hop is decorative. L4S is emerging: do not assume it.244- **Capacity with data**: plan on percentiles of real utilisation, with an action threshold245 around 70% sustained; do not size by intuition or by an anecdotal peak.246- **HA with no SPOF**: dual uplink over different paths, VRRP/CARP with **tested** failover,247 redundancy of DNS and DHCP resolvers, diversified power and switches. A failover248 that has not been exercised does not count.249- Runbooks per scenario: uplink loss, a firewall down, a route leak, DHCP pool250 exhaustion, DNS poisoning/outage, layer 2 loop. Versioned and with an owner.251252## 7. Sustainability and prohibitions253254- **Network as code**: topology, addressing, rules and baselines in a repo, reviewed255 by PR; idempotent automation (Ansible network collections) fed by NetBox;256 containerlab to validate before touching hardware.257- **Cadence**: firmware/IOS/RouterOS and the NOS reviewed every quarter and on a CVE with258 relevant KEV/EPSS; LTS branches of HAProxy/BIND/FRR rather than the latest minor; no259 EOL version in production without a dated exit plan (BIND 9.18 EOL Jun-2026 is the260 reminder of the quarter).261- Deprecation with a plan: every retired rule, VPN or VLAN is really deleted (config, SoT and262 documentation), it is not left "just in case" accumulating surface.263264**FORBIDDEN**265- ❌ Permanent `any/any`, rules with no comment giving the reason, or `0.0.0.0/0` inbound without266 written justification.267- ❌ A firewall without egress filtering; "it's the internal network, no need to filter".268- ❌ Mixing `iptables` and `nftables` on the same host; `iptables-legacy` on new systems.269- ❌ Blocking ICMP indiscriminately (it kills PMTUD and diagnosis) or ICMPv6 in IPv6 (it breaks ND).270- ❌ Changing firewall/routing remotely without commit-confirm, timed rollback or an OOB console.271- ❌ eBGP without prefix filters, without `maximum-prefix` and without RPKI ROV.272- ❌ Management interfaces (switches, firewalls, BMC, hypervisors) reachable from user273 networks or from the Internet.274- ❌ Telnet, HTTP management, SNMP v1/v2c, default credentials, shared accounts.275- ❌ Allowing outbound DNS to any resolver, or leaving the browser's DoH without a policy.276- ❌ A single resolver, DHCP server or firewall with no redundancy on anything that matters.277- ❌ A flat VLAN "because it's easier"; IoT/OT in the same zone as servers or users.278- ❌ Tunnels without adjusting MTU or MSS and then blaming the application.279- ❌ Manual configuration not reflected in the SoT/repo (snowflakes) and uncorrected drift.280- ❌ A full-tunnel VPN granting access to the whole network instead of per-application access.281- ❌ Corporate Wi-Fi with a shared PSK instead of WPA3/802.1X.282- ❌ Populating NetBox by automatic discovery and calling it "intent".283284## 8. Mandatory web verification285286Before pinning any version, flag or concrete datum, **look it up — do not recall it**.287Verified Aug 2026 (expires fast): nftables 1.1.4 / firewalld 2.4.0 on Fedora 44;288OPNsense 26.7 (FreeBSD 15.1); pfSense CE 2.8.1; RouterOS 7.23 stable / 7.21.5 long-term;289VyOS Stream 2026.03; FRR 10.7.0; BIRD 3.3.1 (LTS 3.1.x); BIND 9.20.26 ESV (9.18 EOL290Jun-2026); Unbound 1.24.2; Knot DNS 3.5.4; Pi-hole FTL 6.7 / Core 6.4.3; HAProxy 3.2.x and2913.4.0 LTS; nginx 1.30.x stable / 1.31.x mainline; Traefik v3.7.10; Caddy 2.11.4;292NetBox 4.6.7; NetBird 0.65+; Headscale 0.29.x (beta).2932941. Latest stable and **EOL** of every component you are going to install (endoflife.date + the295 vendor's release notes), most especially BIND, nginx, HAProxy and the device's NOS.2962. **Active CVEs with KEV/EPSS** before deciding the urgency of a patch — 2026 has been a297 dense year for nginx and BIND.2983. The state of `iptables`/`nftables` on the project's **exact** distribution (RHEL 10, Fedora,299 Debian) before writing rules: the compatibility layer changes between versions.3004. The state of **Kea** and ISC `dhcpd`, and of containerlab, FreeRADIUS, Wireshark, Akvorado and301 the UniFi Network Application — not verified in this document.3025. The state of **RPKI/ASPA** (ASPA is still a draft), ROV adoption and IPv6 figures303 (Google/APNIC): these are data that change every quarter.3046. VyOS image policy (LTS only with a subscription or contribution) and the release305 cycle of OPNsense/pfSense CE before committing to a platform.3067. The exact RFC before citing it (SVCB/HTTPS, DoQ, OTC, L4S, IPv6-mostly): number and status.307308If the web contradicts this document, **the web wins** — flag the discrepancy.