Reverse proxy clearnet zu Tor

Hallo miteinander,
Ich habe eine Frage wo ich technische Unterstützung gut gebrauchen kann :slight_smile:

Ich habe einen Raspiblitz mit BTCPay Server auf einem Raspberry pi bei mir im LAN.
Nun möchte ich den BTCPay Server von Aussen erreichbar machen.

Da der ip2tor-Service von Fulmo eingestellt wurde versuche ich das mit einem eigenen Reverse Proxy zu Tor umzusetzen. Das scheint mir am besten, da ich kein Extrazeugs auf dem Raspiblitz installieren muss. Es gibt dazu auch eine Anleitung von BTCPay:
https://docs.btcpayserver.org/Deployment/ReverseProxyToTor/

Dafür habe ich mir bei Cloudflare eine Domain zugelegt und einen VPS auf Lunanode eingerichtet. Die Installationen und Konfigurationen der Anleitung konnte ich auch umsetzen.
…Aber es läuft noch nicht… währe auch zu einfach gewesen :slight_smile:

Folgendes Verhalten habe ich jetzt:
Mit der SSL-Einstellung (auf Cloudflare) „flexible“ (Encrypts traffic between the browser and Cloudflare) bekomme ich im Browser die Fehlermeldung ERR_TOO_MANY_REDIRECTS angezeigt, wenn ich die Domain aufrufe.
Mit der SSL-Einstellung „full“ (Encrypts end-to-end, using a self signed certificate on the server) bekomme ich im Browser die Fehlermeldung Bad gateway Error code 502

Die Meldung im log von nginx ist folgende:
2022/11/20 19:43:57 [error] 21399#21399: *12 upstream prematurely closed connection while reading response header from upstream, client: 162.158.91.15, server: paywithsats.net, request: „GET / HTTP/2.0“, upstream: „http://127.0.0.1:9081/“, host: „paywithsats.net

Hat jemand einen Anzatz wo ich weiter suchen könnte?
Würde mich sehr freuen wenn mir jemand weiter helfen könnte?

Evtl. hilft dir diese Anleitung hier weiter. Ich hatte leider noch keine Zeit es selbst zu testen:

Ich habe keine 100% passende Antwort für Dich, da ich Umbrel nutze. Ich hoffe, meine Installations- und Einrichtungsroutine powered by @kieselbert hilft Dir trotzdem weiter.

BTCPay Server im clearnet erreichbar machen

DynDNS einrichten

Webinterface meines Hostinganbieters öffnen
Nameserver > DynDNS > Konto hinzufügen
Benutzername: xxx, Pwd: yyy
Hostname: hostname.namederdomain.com

DynDNS in Fritzbox eintragen

Internet > Freigaben > DynDNS
Verbindungsdaten eingeben

(Subdomain einrichten, nicht nötig, weil alles beim selben Anbieter ist, sonst:

beim Domainhoster Nameserver (bitcoin-bill.org) um DNS Eintrag erweitern:
→ Name: name
→ Type: CNAME [zeigt auf IP…]
→ Wert: 77.190.59.181 )
TTL (Time-to-live) → kleine Zahl, kleine Gültigkeitsdauer

Reverse Proxy aufsetzen

VM mit Ubuntu auf Proxmox aufsetzen (20GB Platte reicht, 1Core, 2GB Ram)
deutsche Tastatur
Häkchen entfernen von: „Set up this disk as an LVM group
User: xxx; Pwd: yyy

Update & Installation

sudo apt-get update && sudo apt-get upgrade -y

ReverseProxy in der FritzBox immer dieselbe IP zuweisen
→ Heimnetz > Netzwerk
→ 192.168.178.161

SSH installieren

sudo apt-get install openssh-server
Service aktivieren: sudo systemctl enable ssh --now
sudo systemctl start ssh

sudo reboot

Diverse Tools installieren

sudo apt-get install
apt-transport-https
ca-certificates
curl
gnupg
lsb-release

Datenquellen und Schlüssel für Docker (Echo schreibt Daten in die Files)

curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
echo
„deb [arch=amd64 signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] Index of linux/ubuntu/
$(lsb_release -cs) stable“ | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null

Apachetools installieren

sudo apt install apache2-utils -y

Updaten der neuen Packete

sudo apt-get update
sudo apt-get install docker-ce docker-ce-cli containerd.io
Testen ob Docker funktioniert (fehlendes wird nachinstalliert): sudo docker run hello-world

Docker compose installieren (Bauanleitung = Configdatei = Beschreibungsteil)

sudo apt install docker-compose
docker-compose –version

Von einander getrennte Docker mit einander kommunizieren lassen

sudo docker network create web → web ist der frei gewählte Netzwerkname
→ Befehl mit richtigem Passwort ausführen und output speichern
htpasswd -nb Benutzername ein-sicheres-passwort
→ Benutzername: xxxName
→ Pwd: yyy
Output:
xxxName:apr1.3RA154d$uw6J3pCKinBamV/R.9faD.
Im Output dann alle $-Zeichen verdoppeln:
xxxName:$$apr1$$.3RA154d$$uw6J3pCKinBamV/R.9faD.

Verzeichnis erstellen

sudo mkdir /opt/traefik
cd /opt/traefik/
Datein erstellen (touch)
→ sudo touch traefik.toml
→ sudo touch docker-compose.yml
→ sudo touch dynamic_conf.yml

Letsencryptcerts anlegen

Für die ACME Letsencryptcerts unbedingt diese URL nehmen
https://acme-v02.api.letsencrypt.org/directory
Es gibt ältere URLs die dazu führen das die Zertifikatskette ein abgelaufenes Root-Cert hat.
Will You Be Impacted by Let’sEncrypt DST Root CA X3 Expiration? | by Liejun Tao | Geek Culture | Medium ← hier steht was dazu

Files editieren
→ Achtung: Format ist wichtig (Anzahl der Leerzeichen)

docker-compose.yml config file.txt
→ sudo nano docker-compose.yml
dynamic_conf.yml config file.txt
→ sudo nano dynamic_conf.yml
traefik.toml config file.txt
→ sudo nano traefik.toml

Proxy starten

cd /opt/traefik/
sudo docker-compose up -d
abschalten (wenn nötig): sudo docker-compose down

Kontrolle, obs läuft

sudo docker ps

Fritzbox

Internet → Freigaben → Fritzbox-Dienste → Internetzugriff (auf Fritzbox aktiviert) → ausschalten

Internet > Freigaben > Portfreigaben
Gerät: reverseproxy
„Neue Freigabe“ anklicken
→ Bezeichnung: frei wählbar
→ Service: http,
→ Protokoll TCP, Port 80, Port Extern 80
→ Service: https
→ Protokoll TCP, Port 443, Port Extern: 443
→ keine Häkchen
bestätigen und aktualisieren nicht vergessen

Ubuntu Firewall darf nicht aktiv sein

checken mit: sudo ufw status

Umbrel anpassen um unverschlüsselte Verbindung zw. Proxy und BTCPay zuzulassen

in fullnode einloggen
nano ~/app-data/btcpay-server/.env.app_proxy
in Datei eintragen: PROXY_TRUST_UPSTREAM=true
sudo ~/scripts/app restart btcpay-server

Toi, toi, toi

Das sind 2 unterschiedliche Lösungswege.
@originalgof Clearnet-Domain → VPS-Proxy (Clearnet2Tor) → BTCPay (via Tor)
@Achse Clearnet-Domain → Reverse-Proxy (zu Hause) → BTCPay (via Clearnet)

Beide Lösungswege haben ihre Vor- und Nachteile, aber ich glaube config-seitig hilft leider das Eine dem Anderen nicht.

1 „Gefällt mir“

Danke fürs Erinnern! Mittlerweile hab ich das ganze deutlich komfortabler und einfacher mittels WireGuard aufgesetzt und wurde auch bereits von einem Community Mitglied auf Herz und Nieren geprüft. Muss ich mal aktualisieren.

Darüber hinaus hab ich auf dem VPS nginx als Reverse Proxy eingerichtet der dann über die VPN local IP der Node sämtliche Services erreicht.

Wenn ich Zeit hab! :see_no_evil:

2 „Gefällt mir“

Vielen Dank für die Antworten!
Bei meiner Clearnet2Tor-Lösung habe ich den Verdacht es liegt „nur“ noch an einer falschen Konfiguration. Gibt es vielleicht jemand der sich speziell mit nginx und scoat auskennt?

Die VPN-Lösung von @surenic währe für mich wohl am ehesten machbar. Was sieht das sicherheitstechnisch aus? Wenn ich einen BTCPay-Server darüber erreichbar mache, kann dann ja jeder alle anderen Services, wie z.B. RTL, erreichen oder? Bei @Achse s Lösung wäre nur der BTCPay-Server erreichbar, richtig?

So, gerne zum Ausprobieren und testen meine kürzlich angekündigte Anleitung zum Aufsetzen eines Wireguard VPN Servers auf einem kostenlosen Oracle Cloud VPS inklusive Verbindung zur Node und Hybrid Modus Einrichtung von CLN und LND

Bitte um Feedback und Rückmeldung, falls etwas unverständlich ist.

Das Tutorial für die Installation eines nginx Reverse Proxies mache ich dann separat, baut aber auf diesem bestehenden Server auf.

5 „Gefällt mir“

Zu deinen Fragen hier:

Die Node sitzt quasi einem VPN Tunnel verbunden zum VPS. Die Ports sind über eine Firewall und zuzüglich über die Oracle Security List solange dicht, bis du diese aktiv aufmachst.

Und selbst wenn der Port für RTL auf dem VPS offen wäre, leitet dieser den Traffic nicht einfach auf die Node.

Sprich: jeder Dienst ist erstmal unter deiner Kontrolle.

Nichtsdestotrotz würde ich in RTL die Zwei-Faktor-Authentifizierung aktivieren. Man weiß ja nie. Über Tor ist dein RTL ja schließlich direkt und ohne Firewall oder Weiterleitung erreichbar.

Nabend,

ich habe jetzt über die Feiertage auch endlich mal wieder ein bisschen mehr Zeit um mich mit meiner Node zu beschäftigen. Vor allem würde ich gern LNBits über meine Node zum Laufen (bzw erreichbar) kriegen, wäre das mit deinem Ansatz möglich? Eigl hatte ich vor das über IP2Tor zur lösen, allerdings scheint der Service dafür nicht mehr aktiv zu sein. Hier hatte ich vor ein paar Wochen schon mal nachgefragt, wie ich es lösen könnte

Außerdem finde ich aktuell noch ein bisschen nervig, dass die mobilen Wallets (zB Zeus) beim Öffnen der App ziemlich lange brauchen, um sich die Daten der Node zu holen. Ich vermute das liegt an Tor. Würde sich das mit dem Reverse Proxy auch verbessern?

Ich war schon drauf und dran einfach mal die Anleitung bei Github abzuarbeiten, aber jetzt frage ich doch lieber erstmal nach, ob meine Wünsche damit überhaupt erfüllt werden würden. Wäre auf jeden Fall cool, wenn ich das die kommenden Tage endlich mal hinbekomme und sollte es der Fall sein, würde ich auch gern mal deinen angegebenen LNURLp Link ausprobieren :slight_smile:

Ich bedanke mich schon mal für mögliche Rückmeldungen und wünsche allen frohe Feiertage!

Hey Lukker!

Ja, genau diese Problematik wäre Geschichte, da du Zeus schlichtweg nicht mehr via Tor verbinden würdest, sondern via Clearnet. Zeus verbindet bei mir in unter einer Sekunde.

Und ja, auch LNbits kannst du damit freigeben. Mein hier gepostetes Tutorial bildet grundlegend ab, wie du die entsprechenden Ports freigibst und dann im Web via https://VPN_IP:PORT die Dienste aufrufst.

Eleganter geht das, wenn du zusätzlich einen nginx web server auf dem VPS aufsetzt und entsprechend umleitest. So kannst du dann mit eigener domain oder duckdns (dyndns service) auch ohne Port auf die Dienste umleiten (z.B. lnbits.domainname.de). Hierzu hab ich auch ein Tutorial geschrieben, siehe hier.

Aber ersteres reicht auch erstmal raus, um sich auch mit der Materie auseinander zu setzen. Mehr geht später auch noch :wink:

Schöne Weihnachten euch allen!

2 „Gefällt mir“

Ich hab auch die Erfahrung gemacht das über Clearnet die ganzen Apps auch deutlich besser funktionieren (Bluewallet, Zeus). Deshalb ReverseProxy (Traefik), LNbits und das in die Apps eingebunden funktioniert super schnell und zuverlässig.

2 „Gefällt mir“

Ja sehr cool, ein besseres Weihnachtsgeschenk hätte man mir dieses Jahr kaum machen können! Ich hoffe das klappt dann am Ende auch alles so wie erhofft. Ich warte jetzt noch darauf, dass mein Account bei Oracle alle Berechtigungen bekommt und dann kanns losgehen :slight_smile: Vielen vielen Dank schon mal!

1 „Gefällt mir“

Hm, es wäre auch zu schön gewesen, wenn es einfach so klappt. Ich komme direkt am Anfang, beim Erstellen einer neuen Instanz in Oracle, schon nicht weiter, weil ich kein Image auswählen kann.

Gestern hatte ich zunächst angenommen, dass es daran liegt, dass mein Account neu ist und ich erst Berechtigungen dafür brauche. Laut Support hängt es wohl aber damit zusammen, dass zu viele Nutzer den Free Tier Account nutzen und dadurch manche Funktionen eingeschränkt sind. Ich werde mal noch ein paar Tage warten, evtl löst sich die Sache ja von selbst mit der Zeit…

Uff, das wäre mir neu und würde die ganze Grundlage meines Tutorials zerschießen. Man kann einen VPS natürlich auch kostenpflichtig aufziehen aber hmm, das war ja nicht Sinn der Sache :sweat_smile:

Gib mal Bescheid, ob sich was bei dir tut. Ich kann das leider nicht testen, da man keinen Zweitaccount erstellen kann

Dann versuche ich es auch mal. Bei mir sehe ich sofort, dass mein Account noch nicht fertig erstellt wurde:

Somit warte ich erst noch einmal ab.

Ok, bei mir kam der selbe Fehler, lag aber nur am Browser.

Du musst vorher allen Cookies zustimmen, dann klappt es!

1 „Gefällt mir“

Tatsächlich, mit nem anderen Browser funktioniert es. Dann setze ich mich da heute mal dran, vielen Dank!

Trotzdessen, dass ich ein absoluter Noob bin, konnte ich dem Tutorial gut folgen und bin relativ einfach durch die Schritte gekommen. Jetzt am Ende jedoch, bei „der Stunde der Wahrheit“ bekomme ich einen Fehler, weil eine Zeile nicht akzeptiert, wie sie im Tutorial vorgegeben ist. Ich schließe natürlich nicht aus, dass meine Unfähigkeit das Problem ist :slight_smile:

Ich habe im Terminal meiner Node meine Daten eingegeben wie hier beschrieben:

[Interface]
PrivateKey = ***base64_encoded_peer_private_key_goes_here***
Address = 10.8.0.2/24

[Peer]
PublicKey = ***base64_encoded_peer_public_key_goes_here***
AllowedIPs = 0.0.0.0/0
Endpoint = PUBLIC_IP:51820
PersistentKeepalive = 25
PostUp = ip rule add table 200 from LOCAL_NODE_IP
PostUp = ip route add table 200 default via LOCAL_ROUTER_IP
PreDown = ip rule delete table 200 from LOCAL_NODE_IP
PreDown = ip route delete table 200 default via LOCAL_ROUTER_IP

DNS = DNS-ADRESSE-DES-VPS

Und dann wird, wenn ich über die Node den wg-client mit dem Server verbinden will (mit „sudo wg-quick up wg0“) folgendes ausgeworfen:

[#] ip link add wg0 type wireguard
[#] wg setconf wg0 /dev/fd/63
Line unrecognized: `PostUp=ipruleaddtable200fromXXX.XXX.XXX.XXX’
Configuration parsing error
[#] ip link delete dev wg0

(EDIT: Ich bin sicher, dass ich die IP meiner Node richtig eingegeben habe)

Sieht jemand wo mein Fehler liegt? Ich würde jetzt erstmal zum Sport gehen und heute Abend nochmal ein bisschen rumprobieren :slight_smile: Danke schon mal für die Hilfe!

Super Anleitung habe es damit und mit ein bissl abstraktion hinbekommen den VPS über Azure zum laufen zu bekommen. jetzt funktioniert alles super und das Routing verhalten hat sich mit dem wechsel zu Clearnet auch massiv verbessert. Das einzige was ich nicht hinbekomme ist das eine LNURLp über Clearnet in LNBITS eingerichtet funktioniert ich bekommen in der BlueWallet über die ich testen will beim senden immer eine Fehlermeldung „Bad response from Server“. Wenn ich in LNBITS eine LNURL erstelle die mit TOR erzeugt wurde, funktioniert es zwar meist aber das ist so langsam und unzuverlässig das ich gerne auch die LNURL über Clearnet ansprechen würde. Eine Normale LN Rechnung wird offensichtlich direkt über Clearnet bezahlt das merkt man an der Geschwindigkeit.

Ich habe es mit der wireguard Anleitung versucht, doch leider stimmt die Konfiguration auf der Node nicht. Sobald die Verbindung über wireguard aufgebaut wird, bekomme ich z.B. zu GitHub keinen Verbindungsaufbau mehr hin.