- Add SnS Technology Group LLC (planned) - Add SnS Hospitality Group LLC (Kiowa Scott 15%, coffee trailers 2-year plan) - Add SnS Properties LLC (planned) - Move 04-foodtruck1 to sns-hospitality-group/indian-food-truck-legacy - Add Kiowa partnership agreement HTML (Option C split-grant, group-level) - Add NDA, equity framework, legal services docs - Add coffee trailers business plan (10 locations, NW IN + S. Michigan) - Add corporate structure HTML (visual org chart) - Add Holdings legal docs (certificate, EIN, operating agreement HTML)
228 lines
9.4 KiB
Markdown
228 lines
9.4 KiB
Markdown
# Future Stack Decisions — SNS Network Solutions
|
||
|
||
> Decisions made 2026-07-25 during brainstorming session. Apply these when building out the 3-rack environment.
|
||
|
||
---
|
||
|
||
## Decisions Locked
|
||
|
||
| Decision | Choice | Replaces | Reason |
|
||
|----------|--------|----------|--------|
|
||
| Perimeter firewall | **OPNsense** | OpenWRT (for racks/client sites) | Enterprise GUI, built-in Suricata IDS/IPS, CARP HA, traffic shaping. OpenWRT stays only for embedded APs. |
|
||
| Client/remote connectivity | **OpenZiti** | OpenVPN | OpenVPN is too slow. OpenZiti = zero-trust, no open ports, per-service access, faster (peer-to-peer). |
|
||
| Network Access Control | **PacketFence** | Nothing (new layer) | 802.1X, captive portal, device profiling, BYOD enforcement, rogue device isolation. |
|
||
| Mesh (personal/homelab) | **NetBird** (keep) | — | Already working. Not for client delivery — that's OpenZiti. |
|
||
| LLM API routing | **OpenRouter** | — | API key: sk-or-v1-607da... (free tier, 4000 token cap per request unless credits added) |
|
||
|
||
---
|
||
|
||
## The Stack (consolidated)
|
||
|
||
### Networking & Access (the perimeter + admission + connectivity triad)
|
||
|
||
```
|
||
Internet
|
||
│
|
||
▼
|
||
┌──────────────┐
|
||
│ OPNsense │ ← What traffic is allowed in/out (firewall + IDS/IPS)
|
||
└──────┬───────┘
|
||
│
|
||
┌──────▼───────┐
|
||
│ PacketFence │ ← Who/what is allowed ON the network (NAC, 802.1X)
|
||
└──────┬───────┘
|
||
│
|
||
┌──────▼───────┐
|
||
│ OpenZiti │ ← How services are accessed (zero-trust overlay, per-app)
|
||
└──────────────┘
|
||
```
|
||
|
||
### Full Stack (3-Rack)
|
||
|
||
| Layer | Tool | Role |
|
||
|-------|------|------|
|
||
| Perimeter firewall | OPNsense | Stateful firewall, IDS/IPS (Suricata), VLANs, traffic shaping |
|
||
| NAC | PacketFence | Network admission, 802.1X, captive portal, device profiling |
|
||
| Zero-trust connectivity | OpenZiti | Service-level access, no open ports, replaces VPN |
|
||
| Secrets | OpenBao | All credentials, transit encryption, audit log |
|
||
| Identity | OpenLDAP | Employee/contractor directory, SSO source |
|
||
| IaC | OpenTofu | Provision client environments reproducibly |
|
||
| Observability | Graylog + OpenTelemetry | Log management, SIEM, search, dashboards, alerting (replaces standalone OpenSearch) |
|
||
| Vulnerability scanning | OpenVAS | Scheduled client network scans |
|
||
| Threat intel | OpenCTI | IOC aggregation, threat actor tracking |
|
||
| Honeypots | OpenCanary | Intrusion detection decoys |
|
||
| Compliance | OpenSCAP | CIS/NIST benchmark audits |
|
||
| Network fleet management | OpenWISP | Manage OPNsense/AP fleets across client sites |
|
||
| Storage | OpenZFS | Backup targets, snapshots, data integrity (runs on Proxmox natively) |
|
||
| AI agents | OpenClaw + OpenRouter | Chief/Scout/Scribe + LLM API routing |
|
||
| Serverless automation | OpenFaaS | Webhook handlers, client onboarding, alert processors |
|
||
|
||
### Removed / Not Using
|
||
|
||
| Tool | Reason |
|
||
|------|--------|
|
||
| ~~OpenVPN~~ | Too slow. Replaced by OpenZiti. |
|
||
| ~~ZeroTier~~ (for clients) | Network-level access (full LAN) instead of service-level. Keep NetBird for personal homelab only. |
|
||
| ~~OpenWRT~~ | Not using at all. OPNsense covers firewall/routing; no embedded router flashing. |
|
||
| ~~OpenProject~~ | Tested on pve2 (LXC 215) — didn't like it. Destroyed. |
|
||
| ~~OpenSearch~~ (standalone) | Tested on pve2 (LXC 216) — using Graylog instead (includes OpenSearch under the hood + better UI/SIEM). |
|
||
|
||
---
|
||
|
||
## Revenue Services Enabled
|
||
|
||
| Service | Tools | Billing |
|
||
|---------|-------|---------|
|
||
| Managed firewall + IDS | OPNsense | Monthly per-site |
|
||
| Zero-trust remote access | OpenZiti | Monthly per-endpoint |
|
||
| NAC / BYOD enforcement | PacketFence | Setup + monthly |
|
||
| Vulnerability scanning | OpenVAS | Monthly/quarterly report |
|
||
| Compliance audits | OpenSCAP | Per-engagement |
|
||
| Managed backup | OpenZFS + PBS + OMV | Monthly per-TB |
|
||
| Threat monitoring | OpenCTI + OpenCanary + Suricata | Monthly retainer |
|
||
| Infrastructure builds | OpenTofu + Proxmox + Ansible | Project-based |
|
||
| Secrets management | OpenBao (at client) | Setup + monthly |
|
||
|
||
---
|
||
|
||
## OpenRouter API
|
||
|
||
- **Key:** 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
|
||
- **Status:** Free tier (4000 token max per request)
|
||
- **Usage:** Add `"max_tokens": 500` (or less) to stay within limits
|
||
- **Wire into:** LiteLLM or AI Core `.env` when ready
|
||
- **Add credits:** https://openrouter.ai/settings/credits
|
||
|
||
---
|
||
|
||
---
|
||
|
||
## Repository Links (all tools)
|
||
|
||
| Tool | Repo / Site | License |
|
||
|------|-------------|---------|
|
||
| **OPNsense** | https://github.com/opnsense/core | BSD-2 |
|
||
| **OPNcentral** | Built-in OPNsense plugin (os-central) | BSD-2 |
|
||
| **PacketFence** | https://github.com/inverse-inc/packetfence | GPL-2.0 |
|
||
| **OpenZiti** | https://github.com/openziti/ziti | Apache-2.0 |
|
||
| **OpenBao** | https://github.com/openbao/openbao | MPL-2.0 |
|
||
| **OpenTofu** | https://github.com/opentofu/opentofu | MPL-2.0 |
|
||
| **OpenLDAP** | https://github.com/openldap/openldap | OpenLDAP Public License |
|
||
| **OpenTelemetry** | https://github.com/open-telemetry/opentelemetry-collector | Apache-2.0 |
|
||
| **OpenTelemetry Contrib** | https://github.com/open-telemetry/opentelemetry-collector-contrib | Apache-2.0 |
|
||
| **OpenSearch** | https://github.com/opensearch-project/OpenSearch | Apache-2.0 |
|
||
| **OpenVAS** | https://github.com/greenbone/openvas-scanner | GPL-2.0 |
|
||
| **OpenCTI** | https://github.com/OpenCTI-Platform/opencti | Apache-2.0 |
|
||
| **OpenCanary** | https://github.com/thinkst/opencanary | BSD-3 |
|
||
| **OpenSCAP** | https://github.com/ComplianceAsCode/content | BSD-2 |
|
||
| **OpenFaaS** | https://github.com/openfaas/faas | MIT |
|
||
| **OpenProject** | https://github.com/opf/openproject | GPL-3.0 |
|
||
| **OpenZFS** | https://github.com/openzfs/zfs | CDDL / BSD |
|
||
| **OpenClaw** | https://github.com/openclaw/openclaw | MIT |
|
||
| **OpenRouter** | https://openrouter.ai (API service, not self-hosted) | Commercial (API) |
|
||
| **OpenWISP** | https://github.com/openwisp | GPL-3.0 |
|
||
| **Proxmox VE** | https://git.proxmox.com | AGPL-3.0 |
|
||
| **Grafana** | https://github.com/grafana/grafana | AGPL-3.0 |
|
||
| **Prometheus** | https://github.com/prometheus/prometheus | Apache-2.0 |
|
||
|
||
### Official Docs / Sites
|
||
|
||
| Tool | Documentation |
|
||
|------|--------------|
|
||
| OPNsense | https://docs.opnsense.org |
|
||
| PacketFence | https://www.packetfence.org/doc/ |
|
||
| OpenZiti | https://openziti.io / https://docs.openziti.io |
|
||
| OpenBao | https://openbao.org/docs/ |
|
||
| OpenTofu | https://opentofu.org/docs/ |
|
||
| OpenTelemetry | https://opentelemetry.io/docs/ |
|
||
| OpenSearch | https://opensearch.org/docs/ |
|
||
| OpenVAS (Greenbone) | https://greenbone.github.io/docs/ |
|
||
| OpenCTI | https://docs.opencti.io |
|
||
| OpenFaaS | https://docs.openfaas.com |
|
||
| OpenProject | https://www.openproject.org/docs/ |
|
||
|
||
---
|
||
|
||
## Network Switching — MikroTik (No Licensing)
|
||
|
||
**Decision:** MikroTik CRS series. Zero license fees forever. RouterOS included with hardware.
|
||
|
||
### Why MikroTik
|
||
|
||
- $0 licensing — ever. RouterOS included, free upgrades.
|
||
- Full L2/L3 switching + routing in one device
|
||
- REST API (RouterOS 7+) + native API (port 8728)
|
||
- Full Ansible support (`community.routeros` collection)
|
||
- Full Python support (`librouteros`, `routeros-api`, or plain REST)
|
||
- PacketFence compatible (SNMP + RADIUS/802.1X)
|
||
- Cheapest enterprise-grade option (~$130-500 vs Cisco $1000+)
|
||
|
||
### Suggested Rack Layout
|
||
|
||
| Rack | Switch | Model | Role |
|
||
|------|--------|-------|------|
|
||
| Rack 1 | **CRS354-48G-4S+2Q+** | 48× 1G + 4× SFP+ 10G + 2× QSFP+ 40G | Core/distribution |
|
||
| Rack 2 | **CRS326-24G-2S+** | 24× 1G + 2× SFP+ 10G | Client services |
|
||
| Rack 3 | **CRS326-24G-2S+** | 24× 1G + 2× SFP+ 10G | Lab/security |
|
||
| Inter-rack | 10G SFP+ DAC cables | Between switches | Backbone |
|
||
|
||
**Total hardware cost: ~$500-700** (Cisco equivalent: $5,000+)
|
||
|
||
### Automation
|
||
|
||
**Ansible:**
|
||
```yaml
|
||
ansible-galaxy collection install community.routeros
|
||
|
||
# Modules: api, api_modify, api_info, api_facts, command
|
||
- community.routeros.api:
|
||
hostname: 192.168.122.10
|
||
path: interface bridge vlan
|
||
add:
|
||
bridge: bridge1
|
||
vlan-ids: 100
|
||
```
|
||
|
||
**Python (REST API — RouterOS 7+):**
|
||
```python
|
||
import requests
|
||
r = requests.get('https://switch-ip/rest/interface',
|
||
auth=('admin', 'password'), verify=False)
|
||
print(r.json())
|
||
```
|
||
|
||
**Python (native API):**
|
||
```python
|
||
import routeros_api
|
||
connection = routeros_api.RouterOsApiPool('switch-ip',
|
||
username='admin', password='password', plaintext_login=True)
|
||
api = connection.get_api()
|
||
interfaces = api.get_resource('/interface')
|
||
for iface in interfaces.get():
|
||
print(iface['name'])
|
||
```
|
||
|
||
### Integration With Stack
|
||
|
||
| Tool | Integration |
|
||
|------|-------------|
|
||
| Ansible | `community.routeros` — provision, configure, update from code |
|
||
| OpenTofu | Triggers Ansible post-provision (switch auto-configures on boot) |
|
||
| PacketFence | RADIUS + SNMP for 802.1X NAC (officially supported) |
|
||
| Graylog | Syslog receiver (point switch logging at Graylog) |
|
||
| OpenTelemetry | SNMP receiver collects switch metrics |
|
||
| Python | REST API or native API for custom scripts/monitoring |
|
||
|
||
### Avoid (licensing traps)
|
||
|
||
| Brand | Why Not |
|
||
|-------|---------|
|
||
| Cisco (Catalyst/Nexus) | SmartNet + DNA licenses + per-feature licensing |
|
||
| Aruba/HPE | Pushing cloud subscriptions (Aruba Central) |
|
||
| Meraki | Hardware bricks if license expires |
|
||
| Juniper (Mist) | Cloud-AI management is subscription-based |
|
||
|
||
---
|
||
|
||
*Document created: 2026-07-25 | Status: Planning | Next: Deploy OpenZiti controller on Rack 1 when hardware is ready*
|