Discourse auf einem privaten Internet mit Cloudflare Tunnel installieren

yo @Falco, kommt die real_ip (von cf als CF-Connecting-IP-Header bereitgestellt) bei dir in den Nginx-Logs an? Bei mir nicht. Ich sehe nur die IP von cloudflared.

Ich denke, eine oder beide der folgenden Dinge müssen getan werden (werde nach der Untersuchung weiter berichten):

  • Füge eine set_real_ip_from-Konfigurationszeile zu Nginx für die IP von cloudflared hinzu. Wenn sich das als Problem herausstellt, dann würde ich vermuten, dass keine der anderen set_real_ip_from-Zeilen (bereitgestellt von templates/cloudflare.template.yml) für Argotunnel-Benutzer benötigt werden. Und in diesem Fall sollte vielleicht eine separate Argotunnel-Vorlage zum Docker-Repository hinzugefügt werden, die deine cloudflared-IP aus einer Umgebungsvariable oder etwas in deiner Haupt-app.yml zieht.
  • Korrigiere das log_format. Ich denke, das ist wahrscheinlich nicht das Problem, aber. Bestätigt, nicht benötigt

Bearbeiten:
Hier ist, was ich tue, um es zum Laufen zu bringen:

Verwende nicht die Cloudflare-Vorlage. Das hat keinen Sinn.
Füge stattdessen dies zu deiner app.yml hinzu:

hooks:
  after_web_config:
    - file:
        path: /etc/nginx/conf.d/cloudflare_tunnel_real_ip.conf
        contents: |
          # Original-Besucher-IPs wiederherstellen (ngx_http_realip_module)
          set_real_ip_from 10.100.20.200/32; # Deine Cloudflared/Argotunnel IP-Reichweite
          real_ip_header CF-Connecting-IP;

Das landet übrigens automatisch im Nginx http-Kontext, was angemessen ist.

PS: Meiner Meinung nach sollte die Cloudflare-Vorlage zur besseren Übersichtlichkeit ihre Nginx-Konfiguration auch in eine separate Datei generieren, anstatt sed -i zu verwenden, um sie zu /etc/nginx/conf.d/discourse.conf hinzuzufügen.

1 „Gefällt mir“

ja @shyguy ich folge dem Schritt, Herr @Falco
ja, ich bin im Tunnel, bevor ich DDoS-Schutz von Cloudflare erhalte, hat DDoS meinen Server auf hohe CPU-Auslastung gebracht, im Zugriffsprotokoll 20 MB und ich sehe nur meine Docker-IP, ich fordere den Besucher auf dem URL-Pfad / heraus, um den Server zu schützen, aber der abgelaufene Cache gibt einen Diskursfehler



Ich habe dasselbe wie die Falco-Website, wenn sie DDoS-Angriffe erhält, und eine höhere CPU-Auslastung.

2 „Gefällt mir“

@shyguy Wo bekomme ich diesen IP-Bereich her, entschuldigen Sie die Frage

Wie sieht es damit aus..? Muss ich diesen Befehl innerhalb oder außerhalb des Containers verwenden?

1 „Gefällt mir“

falls es nicht klar war, ging es in meinem Beitrag nur darum, die Nginx-Protokollierung zu beheben.

Wenn Sie es nicht beheben, sehen alle Anfragen in Ihren Nginx-Protokollen so aus, als kämen sie von einer IP (Ihrer Cloudflared) anstatt von den tatsächlichen Client-IPs.

Diese IP (oder IP-Bereich) ist diejenige, von der Ihre Cloudflared eine Verbindung zu Discourse herstellt, daher hängt es von Ihrer Einrichtung ab. Eine Möglichkeit, sicher zu sein, ist, in die Nginx-Protokolldatei zu schauen und die IP von dort zu nehmen. Und dann fügen Sie danach ein /32 hinzu.

Wenn Sie seiner Anleitung genau folgen, würde ich schätzen, dass es sich um 127.0.0.1/32 handelt.

Nein, das war nur ein Vorschlag für die Vorlage cloudflare.template.yml – die Sie in dieser Einrichtung nicht verwenden sollten.

Folgen Sie einfach seiner Anleitung im ersten Beitrag, aber ignorieren Sie den Schritt, diese Vorlage zu Ihrer Konfiguration hinzuzufügen. Fügen Sie stattdessen stattdessen den Hook ein, den ich bereitgestellt habe.

1 „Gefällt mir“

Ich habe Ihre Einrichtung befolgt, aber sie funktioniert nicht

[27/May/2023:15:49:45 +0000] "sub.domain.ltd" 172.17.0.1 "POST /
[27/May/2023:15:49:45 +0000] "sub.domain.ltd" 172.17.0.1 "POST /
[27/May/2023:15:49:46 +0000] "sub.domain.ltd" 172.17.0.1 "GET /chat
[27/May/2023:15:49:46 +0000] "sub.domain.ltd" 172.17.0.1 "POST /message-bus
[27/May/2023:15:49:54 +0000] "sub.domain.ltd" 172.17.0.1 "POST /message-bus/

hooks:
  after_web_config:
    - file:
        path: /etc/nginx/conf.d/cloudflare_tunnel_real_ip.conf
        contents: |
          # restore original visitor IPs (ngx_http_realip_module)
          set_real_ip_from 172.17.0.1/32; # your cloudflared/argotunnel IP range
          real_ip_header CF-Connecting-IP;

Wo habe ich etwas falsch gemacht? Bitte helfen Sie @shyguy

Mist. Das sieht für mich korrekt aus, daher bin ich mir nicht sicher, was falsch ist.

So soll das funktionieren:

  • Der Cloudflare-Proxy fügt einen CF-Connecting-IP-Header hinzu, der die IP des Clients enthält.
  • Nginx in Discourse wurde mit dem ngx_http_realip_module kompiliert – eine Software, die diesen Header liest und Logs usw. korrigiert, um die tatsächliche Client-IP anzuzeigen.
  • set_real_ip_from aktiviert diese Funktion für Verbindungen von IP-Bereichen, die an sie übergeben werden. Dies wären normalerweise die IP-Bereiche von Cloudflare (bereitgestellt durch die praktische Vorlage cloudflare.template.yml), aber da Sie Argotunnel verwenden, würden Sie stattdessen einfach die IP von Argotunnel verwenden.

Versuchen Sie, meinen Hook zu deaktivieren. Sehen Sie vor und nachher dieselbe IP in Ihren Nginx-Logs?


Wahrscheinlich ist der einzige Unterschied in unseren Setups, dass ich Argotunnel (Cloudflared) in Docker ausführe.

Wenn Sie das versuchen möchten…

Ich habe ein Netzwerk nur für Cloudflared erstellt:

docker network create --subnet 10.200.10.0/24 cf_tunnel

Hier ist die Compose-Datei:

services:
  cloudflared:
    image: cloudflare/cloudflared:latest
    container_name: cloudflared
    command: tunnel run
    restart: unless-stopped
    networks:
      wan:
      cf_tunnel:
        # für ngx_http_realip_module
        # auf eine hohe IP setzen, damit Docker hoffentlich keine
        # andere Container-IP zuweist, wenn er vor Cloudflared startet
        ipv4_address: 10.200.10.200 # dies ist die IP für `set_real_ip_from` in Nginx

    volumes:
      # sollte uid:gid 65532:65532 gehören
      - ./conf:/home/nonroot/.cloudflared

networks:
  cf_tunnel:
    external: true # bedeutet nur ein Netzwerk, das nicht von Compose verwaltet wird

# für Leistung:
# https://github.com/quic-go/quic-go/wiki/UDP-Receive-Buffer-Size
# sudo nano /etc/sysctl.conf
  # fügen Sie diese Zeile hinzu:
  # net.core.rmem_max=2500000
  # (mein alter Wert war 212992 – überprüfen Sie ihn mit: sudo sysctl net.core.rmem_max)

Sie können Ihre Konfiguration/Zertifikat in dieses conf-Verzeichnis übertragen (denken Sie daran, chown wie in der Compose-Datei angegeben durchzuführen) oder einfach den Einrichtungsvorgang erneut durchlaufen. Sie können Cloudflared-Befehle ausführen, um sich anzumelden oder was auch immer, wie folgt:

docker run -it --rm -v /path/to/conf:/home/nonroot/.cloudflared cloudflare/cloudflared:latest YOUR_CMD_HERE

und dann müssen Sie Ihren Discourse-Container mit dem Netzwerk verbinden. Sie können dies tun, indem Sie am Ende Ihrer Container-YAML Folgendes hinzufügen:

docker_args:
  - '--network=cf_tunnel' # optional können Sie hier auch eine statische IP festlegen
1 „Gefällt mir“

Hat jemand Erfolg damit, den eingehenden Mailserver-Container von Discourse über den Cloudflare Tunnel zum Laufen zu bringen?

Ich hatte in der Vergangenheit Probleme, einen anderen Mailserver hinter dem Cloudflare Tunnel einzurichten, aber ich kann Apps auf meinem Pi, die die Ports 80 und 443 verwenden, problemlos zum Laufen bringen.

Ich habe Discourse bereits mehrmals auf Servern eingerichtet und mache mir im Moment keine allzu großen Sorgen um den Haupt-Discourse-Container.

Ich denke, das hängt damit zusammen, aber bitte erstellen Sie einen neuen Beitrag aus meiner Antwort, wenn Sie der Meinung sind, dass er nicht zum Thema gehört.

Vielen Dank.

Ich bin ziemlich sicher, dass der Cloudflare-Tunnel nur für den Webverkehr und nicht für andere Ports gedacht ist.

Das deutet darauf hin, dass ich Recht habe: https://community.cloudflare.com/t/can-i-create-a-mail-server-with-cloudflare-tunnel/386089

2 „Gefällt mir“

Ich habe den Argo-Dienst genutzt. Ich habe aufgegeben, als ich 28 Euro für den ersten Monat bezahlt habe. Tatsächlich gab es mindestens einen Unterschied von 200 ms. Ich habe es jedoch gekündigt, da ich es mir nicht leisten konnte, jeden Monat 28 Euro für 200 ms zu bezahlen. Größere Websites haben mehr Rechnungen, denken Sie daran.

Der Traffic der Website liegt bei 800-1000 einzigartigen Nutzern. Sie können entsprechend kalkulieren.

1 „Gefällt mir“

Auch seit ich Tunnel benutze, ist das Hochladen von Medien mühsam oder fast unmöglich.
Uploads funktionieren normal, dann erhalte ich diese Fehlermeldung:

wenn ich apt-get update ausführe, erhalte ich diesen Fehler

Sie benötigen ein 64-Bit-Betriebssystem :sweat_smile:

Das ist der Punkt, lol, es ist 64bit. Aber ich habe es herausgefunden. Ich habe apt get upgrade ausgeführt und den Cloudflare-Dienst neu gestartet, und es wurde hochgeladen. Wissen Sie auch, ob Cloudflare den Upload von Videos mit Tunnel begrenzt? Ich habe Probleme beim Hochladen eines 20MB-Videos, was ich vorher nicht hatte.

Ich habe den Cloudflare-Tunnel eingerichtet und er ist auch aktiv:

Allerdings erscheint während der Installation immer der Fehler, dass Discourse die Domain nicht erreichen kann.
Ich habe DISCOURSE_FORCE_HTTPS: true in der App.yml geschrieben.

Ich habe die Installation jedoch nicht abgebrochen, sondern sie wurde automatisch abgebrochen, bevor ich die App.yml ändern konnte. Könnte das der Fehler sein?

1 „Gefällt mir“

Dito, @Tobiasp, hast du es schon behoben? Wenn ja, wie? Danke

1 „Gefällt mir“

Ich habe eine öffentliche IP-Adresse verwendet und diese für die Installation genutzt. Dann habe ich Cloudflare Tunnel installiert.

1 „Gefällt mir“

Können Sie mir Ihre Konfigurationen und so weiter schicken und wie Sie es gemacht haben? Danke!

1 „Gefällt mir“

Und um alle Dinge und Lösungen zusammenzuhalten:

4 „Gefällt mir“

Wenn Sie der Anleitung folgen, müssen Sie wählen, ob Sie ein Netzwerk oder eine Anwendung verbinden möchten. Was sollten wir wählen?

1 „Gefällt mir“