# OPNsense — Horus WireGuard (Routing, Firewall, LAN/NAT) **Stand:** 2026-06-28 (produktiv getestet) **Interface:** `wg_horus` (opt10) · Tunnel-IP **`10.1.1.22`** · Horus **`10.1.1.1`** Vollständiger Vorfall: [../../issues/2026-06-28-opnsense-horus-wireguard-lan.md](../../issues/2026-06-28-opnsense-horus-wireguard-lan.md) --- ## Topologie ``` LAN/VLAN (192.168.x) → OPNsense (NAT → 10.1.1.22) → wg_horus → Horus 10.1.1.1 Services (10.100.2.0/24) → direkt über wg_horus (bidirektional, kein NAT nötig) VM docbr0 (10.2.2.0/24) → über VM-101-Tunnel (10.1.1.5), nicht OPNsense-WG ``` OPNsense hängt in der **Fritzbox-DMZ** — kein extra WAN-Port-Forwarding für WireGuard nötig (Handshake beweist UDP-Rückweg). --- ## 0. WireGuard-Basis Werte aus [opnsense-client.conf](opnsense-client.conf). | Wo | Feld | Wert | |----|------|------| | **Local** | Tunnel Address | `10.1.1.22/32` | | **Local** | Listen Port | z. B. **`51821`** (fester Port; nach NAT-Glitches neu wählen) | | **Local** | Private Key | `AGEam06B9…` (**nicht** VM-Key `SKMnLpkj…`) | | **Peer horus** | Public Key | `qXxhgerS2ORypVadhKCBuxgIX5Pu4J75nSWazdtd+Qk=` | | **Peer horus** | PSK | aus `opnsense-client.conf` | | **Peer horus** | Endpoint | `horus.jeanavril.com:61951` | | **Peer horus** | Allowed IPs | `10.1.1.0/24, 10.1.2.0/24, 10.1.3.0/24, 10.1.4.0/24, 10.8.0.0/24` | | **Peer horus** | Persistent Keepalive | `25` | | **Peer horus** | **Disable routes** | **✓ an** (mehrere WG-Instanzen: Surfshark, WGServer, wg_horus) | **Interfaces → Assignments:** Instanz als **`wg_horus` (opt10)** zuweisen — sonst keine Firewall/NAT auf dem Tunnel. --- ## 1. Static Route (Pflicht bei Disable routes) **System → Routing → Configuration → Routes → +** | Feld | Wert | |------|------| | Network | `10.1.1.0/24` *(weitere Horus-Netze bei Bedarf)* | | Gateway | **`10.1.1.1`** ← Horus-Tunnel-IP (**nicht** `.21`, **nicht** `192.168.178.1`) | | Interface | **`wg_horus`** | **Diagnostics → Routes:** Suche `10.1.1.1` → muss über **wg_horus** gehen. Alte Routen **löschen:** `10.1.1.0/24 → 192.168.178.1` (Fritzbox-Umweg). **Behalten:** `10.2.2.0/24 → 192.168.10.10` (VM), `10.100.2.0/24` (Services). --- ## 2. Firewall — Interface `wg_horus` (opt10) **Ohne diese Regeln: Handshake ok, Ping/Daten innen tot.** | # | Action | Source | Destination | Proto | Zweck | |---|--------|--------|-------------|-------|--------| | 1 | Pass | `10.1.1.0/24` | **This Firewall** | ICMP (oder any) | Horus → OPNsense (`ping 10.1.1.22`) | | 2 | Pass | **This Firewall** / `10.1.1.22/32` | `10.1.1.0/24` | any | OPNsense → Horus (Diagnostics-Ping mit Source wg_horus) | → **Save → Apply Changes** **Test OPNsense:** Diagnostics → Ping, Source = **`wg_horus`**, Destination = **`10.1.1.1`** (~17 ms). **Test Horus:** `ping 10.1.1.22` (~16 ms). --- ## 3. Firewall — LAN / VLANs (LAN → Horus) **Firewall → Rules → LAN** (und **PRIVAT**, **GAESTE**, … je nach Netz) | Action | Source | Destination | |--------|--------|-------------| | Pass | LAN-/VLAN-net | `10.1.1.0/24` (Alias `HORUS_WG`) | Optional Aliase (*Firewall → Aliases*): - **`HORUS_WG`:** `10.1.1.0/24` (+ optional `10.1.2–4.0/24`, `10.8.0.0/24`) - **`LAN_VLANS`:** `192.168.10.0/24`, `.20`, `.30`, `.40`, `.50`, `.60` --- ## 4. Outbound NAT (LAN → Horus, Step A) Horus-Peer erlaubt nur **`10.1.1.22/32`** als Quelle von „Heimnetz“-Traffic — VLANs müssen maskiert werden. **Firewall → NAT → Outbound** — Modus **Hybrid**, Regel **oben**: | Feld | Wert | |------|------| | Interface | **`wg_horus`** | | Source | `LAN_VLANS` (oder einzelne VLANs) | | Destination | `HORUS_WG` | | Translation | **Interface address** (`10.1.1.22`) | **Nicht NATen:** `10.2.2.0/24` (VM), `10.100.2.0/24` (Services — direkt geroutet). --- ## 5. Tests (Reihenfolge) | Schritt | Befehl / Ort | Erwartung | |---------|--------------|-----------| | 1 | OPNsense Ping, Source **wg_horus** → `10.1.1.1` | 0 % Loss | | 2 | Horus `ping 10.1.1.22` | 0 % Loss | | 3 | LAN-PC / pve1 `ping 10.1.1.1` | 0 % Loss | | 4 | Horus `tcpdump -ni wg0 icmp` während LAN-Ping | Quelle **`10.1.1.22`**, nicht `192.168.x` | | 5 | `tracert 10.1.1.1` vom LAN | kein Hop `192.168.178.x` | --- ## Troubleshooting | Symptom | Prüfen | |---------|--------| | Handshake ok, kein Ping innen | Static Route Gateway **`10.1.1.1`**, Firewall **wg_horus** | | OPNsense-Ping nur mit Source wg_horus | Route + Outbound-Regel wg_horus | | Horus → 10.1.1.22 fail | Inbound-Regel wg_horus (10.1.1.0/24 → This Firewall) | | Tunnel ok, LAN fail | LAN-Pass + Outbound NAT; Gateway nochmal prüfen | | Live View leer beim LAN-Ping | Route — Traffic verlässt LAN nicht Richtung wg_horus | **Firewall → Log Files → Live View** während Ping — schnellster Beweis, welches Interface blockt. --- ## Horus (Referenz, bereits erledigt) - Peer `walbWTYX…`: AllowedIPs **`10.1.1.22/32`, `10.100.2.0/24`** only - Route-Script: [wg0-opnsense-routes.sh](wg0-opnsense-routes.sh) + `wg0-opnsense-routes.service` - VM-Peer getrennt: [horus-server-peer-vm101.conf](horus-server-peer-vm101.conf)