- 141
- 101
TG Proxy: Полный гайд по обходу блокировок и фиксу уведомлений
Используем альтернативу, или поднимаем свой прокси-сервер на Node.js + Caddy и забываем про блокировку
Используем альтернативу, или поднимаем свой прокси-сервер на Node.js + Caddy и забываем про блокировку
1. В чем проблема?
В последнее время вы могли заметить, что api.telegram.org заблокирован со стороны РКН или работает крайне нестабильно. Из-за этого пользователи в РФ испытывают сложности с работой скриптов где используется Telegram API.2. Быстрое решение: Использование tg.bakh.us
Если вы не хотите возиться с серверами, используйте наш публичный прокси-шлюз. Он бесплатный и стабильный.Как подключить: Просто замените домен в ваших запросах. Пример:
Lua:
-- Было:
local url = "https://api.telegram.org/bot" .. token .. "/sendMessage"
-- Стало:
local url = "https://tg.bakh.us/bot" .. token .. "/sendMessage"
3. Свое решение: Поднимаем прокси с нуля
Для тех, кто хочет полной независимости, вот путь по созданию своей "крепости".[A] Где брать железо?
- Сервер (VDS): Лично я использую Timeweb - стабильно, адекватно по ценам, принимают карты РФ.
- Домен: Я беру на Porkbun, ибо там самые дешевые домены на первый год использования. Важно: нужна иностранная карта (лично я использую свою турецкую), карты РФ там не работают.
- Примечания: Если у вас нет возможности приобрести домен на Porkbun, берите в другом, например reg.ru. На Timeweb я использую РФ сервер, в котором на мое удивление еще работает TG API.
Установка Node.js прокси
Заходим на сервер и ставим окружение:
Bash:
curl -fsSL https://deb.nodesource.com/setup_18.x | sudo -E bash -
sudo apt-get install -y nodejs screen
mkdir tg-proxy && cd tg-proxy
npm init -y && npm install express node-fetch
Создаем index.js:
JavaScript:
import express from "express";
import fetch from "node-fetch";
const app = express();
app.use(async (req, res) => {
try {
const url = "https://api.telegram.org" + req.url;
const response = await fetch(url, { method: req.method });
const data = await response.text();
res.setHeader('Access-Control-Allow-Origin', '*');
res.send(data);
} catch (err) {
res.status(500).send("Proxy error");
}
});
app.listen(3000, () => console.log("TG proxy running on port 3000"));
Запуск через screen (чтобы работал в фоне):
Bash:
screen -S tgproxy
node index.js
# Нажимаем CTRL+A, затем D, чтобы выйти из окна, оставив процесс в фоне
[В] Настройка домена и HTTPS (Caddy)
Telegram требует HTTPS. Чтобы не мучаться с сертификатами вручную, ставим Caddy — он сам сделает SSL.
Установка (Ubuntu):
Bash:
sudo apt install -y debian-keyring debian-archive-keyring apt-transport-https
curl -1sLf 'https://dl.cloudsmith.io/public/caddy/stable/gpg.key' | sudo gpg --dearmor -o /usr/share/keyrings/caddy-stable-archive-keyring.gpg
curl -1sLf 'https://dl.cloudsmith.io/public/caddy/stable/debian.deb.txt' | sudo tee /etc/apt/sources.list.d/caddy-stable.list
sudo apt update && sudo apt install caddy
Конфиг (/etc/caddy/Caddyfile):
Код:
tg.yourdomain.com {
reverse_proxy localhost:3000
}
sudo systemctl reload caddy.4. Важное замечание по кодировке (Lua)
Чтобы не было кракозябр, используйте этот вариант urlencode. Он правильно переводит CP1251 в UTF-8 и экранирует символы для URL.
Lua:
local encoding = require 'encoding'
encoding.default = 'CP1251'
local u8 = encoding.UTF8
function urlencode(str)
if str then
str = u8:encode(str, 'CP1251') -- Фикс кракозябр
str = str:gsub("([^%w _%%%-%.~])", function(c)
return string.format("%%%02X", string.byte(c))
end)
str = str:gsub(" ", "%%20") -- Фикс плюсиков
end
return str
end
Автор - bakhusse
Связь - telegram/vk: @bakhusse
Пример работы - AFKTools