Roskomnadzor- und Telegramm-Bots über einen Proxy

Es ist unmöglich, die beste Werbung für einen großen Boten zu finden - "der eingefleischte Durov hält die Verteidigung und steht für die Privatsphäre seiner Kunden wie für sein Leben." Der Kern dieses Beitrags liegt jedoch nicht in der Marketingkomponente der Telegrammblockierung in Russland. Wenn Ihr Telegramm-Bot nicht mehr funktioniert und Sie diese Arbeit dringend wiederherstellen müssen, sind Sie bei cat willkommen.


Letzte Nacht sind wir auf ein Problem gestoßen, von dem erwartet wurde, dass es kollidiert. Der API-Server eines unserer Clients befand sich in Heroku. Gestern schreibt mir ein unzufriedener Kunde (natürlich im Telegramm), dass Informationen auf der Website zufällig erscheinen, dann nein. Die Site selbst (eine Anwendung auf NodeJS) wurde bereits im Voraus auf den Moskauer Server übertragen, um Ping zu reduzieren.


Nach einer halben Stunde des Studiums des Problems wurde eine einfache Schlussfolgerung gezogen: Roskomnadzor blockierte einen Teil der Heroku-Adressen. Die Rotation der Heroku-Server erfolgt auf DNS-Ebene, und DNS hat manchmal eine funktionierende IP angegeben, manchmal nicht. Übrigens war es ziemlich schwierig, die Ursache des Problems herauszufinden - als wir mit den Entwicklern testeten - gab es kein Problem. Als der Kunde testete, waren sie es. Die Gedanken schienen bereits auf den großartigen Satz des Kunden zu antworten: "Alles funktioniert auf meinem Computer."


Die Lösung war recht einfach: Wir haben den API-Server der Anwendung auf den St. Petersburg-Client-Server übertragen und dort wurde er leise bereitgestellt. Alles hat perfekt funktioniert, außer natürlich die Integration mit Telegram. Da das Aufgeben dieser Integration nicht möglich ist, weil Es gibt keine würdige Alternative, wir haben nach einer Lösung für dieses Problem gesucht. Mit dem nativen Telegramm-Client ist alles einfach - er verfügt bereits über eine integrierte Interaktion mit einem Proxyserver und die Einrichtung dauert einige Sekunden. Mit der Bot-API sieht das etwas anders aus. Die Anwendung interagiert für jede Aktion des Telegramm-Bots mit https://api.telegram.org/ , und diese Adresse wird natürlich von der ILV blockiert.


Als ausdrückliche Lösung des Problems kam uns sofort der Gedanke, den API-Server des Clients mit unserem OpenVPN-Netzwerk zu verbinden, um diese Sperre zu umgehen. Die Entscheidung wurde sofort abgelehnt, da Die Reaktionsgeschwindigkeit ließ zu wünschen übrig. Google und Yandex konnten mir keine nützlichen Informationen zur Lösung dieses Problems mitteilen.


Infolgedessen kam mir ein einfacher und offensichtlicher Gedanke in den Sinn - den einfachsten Proxyserver selbst zu erstellen, um eine Verbindung zu Telegrammen herzustellen. Natürlich erhöhen wir den Server außerhalb der Russischen Föderation, damit der Proxy funktioniert


Unten sehen Sie die Nginx-Konfiguration, die jetzt ihre Arbeit perfekt macht


Nginx-Konfiguration

Server {
höre 80;
Servername my-telegram-proxy.server;
Ort / {
proxy_set_header X-Forwarded-Host $ host;
proxy_set_header X-Forwarded-Server $ host;
proxy_set_header X-Forwarded-For $ proxy_add_x_forwarded_for;
proxy_pass https://api.telegram.org/ ;
client_max_body_size 100M;
}}
}}


Weiter in der Anwendung habe ich die URL-BOT-API für die Interaktion mit dem Telegramm ersetzt - anstelle von
https://api.telegram.org/bot
schrieb
http: //my-telegram-proxy.server/bot
und Integration mit Bot Api erfolgreich verdient


Zur Vereinfachung habe ich einen Docker-Container mit detaillierten Gebrauchsanweisungen erstellt. Auf diese Weise können Sie Ihren Telegramm-Bot-Proxy mit einem Befehl in Sekunden erhöhen
https://hub.docker.com/r/zvinger/docker-proxy-rkn/builds/
Befehlsbeispiel:
docker run -d -p 8012:80 zvinger/docker-proxy-rkn
und geben Sie http: // Serveradresse: 8012 / in der Anwendungskonfiguration an. Sie können bei der Eingabe eines Befehls einen beliebigen Port auswählen

Source: https://habr.com/ru/post/de424427/


All Articles