Files
homelab/setup/pfsense-vlans.md
T
2026-04-20 20:49:48 -04:00

3.7 KiB
Raw Blame History

pfSense VLAN Setup

Overview

pfSense (Intel N100 mini PC at 10.0.0.1 / 10.1.0.1) handles firewall, routing, DHCP, DNS resolution, and WireGuard VPN for all 8 VLANs. See Network for the full VLAN map and firewall policy. See Decisions D005 for the AT&T IP Passthrough rationale.

Prerequisites

  • pfSense installed on Intel N100 mini PC
  • AT&T BGW320 in IP Passthrough mode (pfSense WAN gets public IP)
  • Omada managed switch connected to pfSense
  • Trunk port between pfSense and switch carrying all VLANs tagged

VLAN Configuration

1. Create VLAN Interfaces

Navigate to: Interfaces → VLANs → Add

Create one entry per VLAN:

VLAN Tag Parent Description
1000 (WAN NIC or LAN NIC) MGMT
1010 (LAN NIC) LAN
1020 (LAN NIC) Homelab
1030 (LAN NIC) Guests
1040 (LAN NIC) IoT
1050 (LAN NIC) WFH
1099 (LAN NIC) DMZ

2. Assign VLAN Interfaces

Navigate to: Interfaces → Assignments

Add each VLAN as a new interface. Enable and configure each:

Interface IP Subnet
MGMT (1000) 10.0.0.1 /24
LAN (1010) 10.1.0.1 /24
Homelab (1020) 10.2.0.1 /24
Guests (1030) 10.3.0.1 /24
IoT (1040) 10.4.0.1 /24
WFH (1050) 10.5.0.1 /24
DMZ (1099) 10.99.0.1 /24

3. DHCP Servers

Navigate to: Services → DHCP Server — configure one per VLAN:

VLAN DHCP Range DNS
MGMT 10.0.0.100150 pfSense (10.0.0.1)
LAN 10.1.0.100200 Pi-hole (10.2.0.11)
Homelab 10.2.0.100200 Pi-hole (10.2.0.11)
Guests 10.3.0.100250 Pi-hole (10.2.0.11)
IoT 10.4.0.100250 Pi-hole (10.2.0.11)
WFH 10.5.0.100200 pfSense (10.5.0.1) — Pi-hole intentionally excluded
DMZ static only pfSense (10.99.0.1)

4. Firewall Rules

Navigate to: Firewall → Rules — configure per-interface rules following the policy in NETWORK.md.

Key rules:

  • Default deny all inter-VLAN (floating rule or per-interface block at end)
  • LAN → Homelab: allow (LAN users reach services)
  • LAN → MGMT: allow (admin access from home devices)
  • Homelab → internet: HTTP/S, SSH, NTP only (for updates)
  • Guests → internet only: block all RFC1918
  • IoT → internet + Home Assistant: block everything else
  • WFH → internet only: block all RFC1918, pfSense DNS only
  • MGMT → internet: NTP + updates only; inbound from LAN + VPN only
  • DMZ → internet: HTTP/S + NTP; block all internal VLANs

5. DNS Resolver (Unbound)

Navigate to: Services → DNS Resolver

  • Enable: ✓
  • Listen on: all interfaces
  • Upstream DNS: Cloudflare 1.1.1.1
  • DNSSEC: ✓ (optional)

Pi-hole (10.2.0.11) uses pfSense Unbound as its upstream. WFH VLAN devices use pfSense Unbound directly — Pi-hole is unreachable from WFH by firewall rule.

6. Static DHCP Reservations

Navigate to: Services → DHCP Server → [interface] → DHCP Static Mappings

Add reservations for all homelab hosts from NETWORK.md.

Configuration Backup

Navigate to: Diagnostics → Backup & Restore → Backup Configuration

Download config.xml. Store in Vaultwarden or PBS. This is the single file needed to restore pfSense from scratch.

Verification

# From a LAN device:
# 1. Gets IP from DHCP in 10.1.0.100200 range
ip addr

# 2. DNS resolves via Pi-hole
nslookup google.com  # should show answer from 10.2.0.11

# 3. Internal service resolves
nslookup outline.lerkolabs.com  # should return 10.2.0.20

# 4. Internet access works
curl -I https://google.com