Issue-Vorfall 2026-06-28, opnsense-step-a-nat und README mit Gateway 10.1.1.1 und wg_horus-Regeln. Co-authored-by: Cursor <cursoragent@cursor.com>
5.1 KiB
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
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.
| 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(+ optional10.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…: AllowedIPs10.1.1.22/32,10.100.2.0/24only - Route-Script: wg0-opnsense-routes.sh +
wg0-opnsense-routes.service - VM-Peer getrennt: horus-server-peer-vm101.conf