diff --git a/README.md b/README.md index 05775a2..2565e39 100644 --- a/README.md +++ b/README.md @@ -6,17 +6,45 @@ CGNAT / dynamischer IP), ohne VPN-Daemon und ohne Änderung an OPNsense/Nginx. Umsetzung von **Option B** aus `recherche-vpn-vs-p2p-netzwerk.md`. +## Architektur-Vergleich + +### Klassischer Nginx-Reverse-Proxy + +Nginx leitet per `proxy_pass` an eine **geroutete IP** des Serving Host weiter. Der Serving Host +muss dafür über das Netz erreichbar sein — also feste IP bzw. ein VPN-Tunnel und ein eingehender +Port. Standortwechsel, CGNAT oder dynamische IPs brechen das Setup. + +```mermaid +flowchart LR + Client([Client]) -->|HTTPS| OPN[OPNsense] + OPN --> NGX[Nginx] + subgraph NH [Nginx-Host] + NGX + end + NGX -->|"proxy_pass
http://10.0.0.5:3000
(geroutetes Netz / VPN)"| APP + subgraph SH ["Serving Host — feste IP / VPN + eingehender Port nötig"] + APP[App :3000] + end ``` -[Nginx] proxy_pass http://127.0.0.1:9080 - │ (lokales TCP) - ▼ -iroh-forward client --listen 127.0.0.1:9080 --peer - │ QUIC / Iroh (TLS 1.3, n0-Relay oder Hole-Punch); 1 QUIC-Stream pro TCP-Verbindung - ▼ -iroh-forward server --to 127.0.0.1:3000 - │ - ▼ -[App :3000] + +### Mit iroh-forward + +Nginx zeigt auf einen **lokalen** Port; der `iroh-forward client` baut die Verbindung über das +Iroh-Netz (QUIC, adressiert per Public Key) zum `iroh-forward server` auf. Beide Seiten verbinden +sich **ausgehend** (über n0-Relay oder direktes Hole-Punching) — der Serving Host braucht **keinen +eingehenden Port** und darf hinter CGNAT / mit dynamischer IP an beliebigem Standort laufen. + +```mermaid +flowchart LR + Client([Client]) -->|HTTPS| OPN[OPNsense] + OPN --> NGX[Nginx] + subgraph NH [Nginx-Host] + NGX -->|"proxy_pass
http://127.0.0.1:9080"| IFC[iroh-forward client] + end + IFC <-->|"QUIC / Iroh · TLS 1.3
dial by Public Key
n0-Relay oder Hole-Punch"| IFS + subgraph SH ["Serving Host — kein eingehender Port · CGNAT / dyn. IP ok"] + IFS[iroh-forward server] -->|"127.0.0.1:3000"| APP[App :3000] + end ``` QUIC multiplext beliebig viele Streams über **eine** Connection → parallele Requests skalieren