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?