Vámos a utilizar el protocolo de proxy oficial de Telegram y la configuración nativa de la app de Telegram.
Actualmente la guía oficial presenta un problema de compilación en el README oficial TelegramMessenger/MTProxy pero siguiendo esta guía conseguirá sortear el problema que se encuentra solucionado en una issue del repositiorio oficial.
1.1. Instancie una máquina con Ubuntu 22.04 o Debian 11/12. Conectese por ssh a la máquina:
ssh root@xx.xx.xx.xx
1.2. Actualice los repositorios:
apt update && apt upgrade -y
1.3. Instale las dependencias necesarias para compilar el binario:
apt install git curl build-essential libssl-dev zlib1g-dev
1.4. Clone el repositiorio oficial de MTProxy:
git clone https://github.com/TelegramMessenger/MTProxy
cd MTProxy
1.5. Modifique el fichero Makefile
nano Makefile
1.6. Busque la linea CFLAGS (línea 15) y añada al final de la misma -fcommon, quedando así:
CFLAGS = $(ARCH) -O3 -std=gnu11 -Wall [.......] -D_FILE_OFFSET_BITS=64 -fcommon
1.7. Salga con CRTL + X y confirme con Y + Intro
1.8. Proceda a compilar el binario
make && cd objs/bin
Asegurese de que se compila sin errores
1.9. Descargue el secreto de Telegram que se utiliza para conectarse a los servidores de Telegram:
curl -s https://core.telegram.org/getProxySecret -o proxy-secret
1.10. Descargue la configuración actual de Telegram. El GitHub de Telegram especifica que se actualice diariamente, así que configuraremos un cron para hacerlo más tarde.
curl -s https://core.telegram.org/getProxyConfig -o proxy-multi.conf
1.11. Genere un secreto de 16 caracteres que usará para autenticar a los usuarios con su servidor proxy
head -c 16 /dev/urandom | xxd -ps
Obtendrá algo como esto:
c4f0ac142375049d2980ed29b3233874
1.12. Pruebe la configuración ejecutando MTProxy desde la CLI.
./mtproto-proxy -u nobody -p 8888 -H 443 -S <secret> --aes-pwd proxy-secret proxy-multi.conf -M 1
Instrucciones del GitHub oficial:
nobodyes el usuario.mtproto-proxyllama a la funciónsetuid()para eliminar los privilegios.443es el puerto utilizado por los clientes para conectarse al proxy.8888es el puerto local. Puede usarlo para obtener estadísticas demtproto-proxy. Ej:wget localhost:8888/stats. Solo puede obtener esta estadística en local. No abras ese puerto en el firewall<secret>ss el secreto generado en el paso 3. También puedes establecer varios secretos para distintos usuarios:-S <secret1> -S <secret2>.proxy-secretyproxy-multi.confse obtienen en los pasos 9 y 10.1ss el número de workers. Puede aumentar el número de workers, si tiene un servidor potente o espera recibir mucho tráfico.
Un ejemplo de configuración simple seria el siguiente:
./mtproto-proxy -u nobody -p 8888 -H 443 -S c4f0ac142375049d2980ed29b3233874 --aes-pwd proxy-secret proxy-multi.conf -M 1
Un ejemplo de configuración con varios secretos seria el siguiente:
./mtproto-proxy -u nobody -p 8888 -H 443 -S c4f0ac142375049d2980ed29b3233874 -S 049d2980edc4f0ac14237529b3233874 --aes-pwd proxy-secret proxy-multi.conf -M 1
1.13. Al ejecutar el servicio desde la CLI, deberia ver algo como esto:
root@xx.xx.xx.xx:~/MTProxy/objs/bin# ./mtproto-proxy -u nobody -p 8888 -H 443 -S c4f0ac142375049d2980ed29b3233874 --aes-pwd proxy-secret proxy-multi.conf -M 1
[xxxx][xxxx-xx-xx xx:xx:xx.xxxxxx local] Invoking engine mtproxy-0.01 compiled at xx xx xxxx xx:xx:xx by gcc 10.2.1 xxxxx 64-bit after commit xxxxxxxxxxxxxxxxxx
[xxxx][xxxx-xx-xx xx:xx:xx.xxxxxx local] config_filename = 'proxy-multi.conf'
[xxxx][xxxx-xx-xx xx:xx:xx.xxxxxx local] creating 1 workers
[xxxx][xxxx-xx-xx xx:xx:xx.xxxxxx local] Started as [0.0.0.0:8888:xxxx:xxxxxxxxxx]
[xxxx][xxxx-xx-xx xx:xx:xx.xxxxxx local] configuration file proxy-multi.conf re-read successfully (752 bytes parsed), new configuration active
[xxxx][xxxx-xx-xx xx:xx:xx.xxxxxx local] Started as [0.0.0.0:8888:xxxx:xxxxxxxxxx]
[xxxx][xxxx-xx-xx xx:xx:xx.xxxxxx local] main loop
2.1. Deberá permitir el trafico entrante TCP al puerto que haya especificado (443/tcp)
2.2. Deberá permitir el trafico saliente TCP del proxy a los servidores de telegram (8888/tcp)
3.1. Lo más sencillo será crear un enlace rápido para agregar el proxy:
https://t.me//proxy?server=<SERVER_IP>&port=<PORT&>secret=<SECRET>
Donde:
SERVER_IPes la IP de su servidorPORTes el puerto especificado (443)SECRETes uno de los secretos permitidos (c4f0ac142375049d2980ed29b3233874)
Ejemplo:
https://t.me//proxy?server=1.2.3.4&port=443&secret=c4f0ac142375049d2980ed29b3233874
Debido a que algunos ISP detectan MTProxy por tamaños de paquete, se puede agregar relleno aleatorio a los paquetes si dicho modo está habilitado. Solo para los clientes que lo solicitan.
Agregue el prefijo dd al inicio del secreto (cafe...babe => ddcafe...babe) para habilitar este modo en el lado del cliente.
Ejemplo:
App Telegram:
SECRET -> c4f0ac142375049d2980ed29b3233874
SECRET -> ddc4f0ac142375049d2980ed29b3233874
Si todo está correcto, procedemos a crear un servicio para que se ejecute en segundo plano.
4.1. Mueva el binario a /opt/MTProxy
mkdir /opt/MTProxy
cp /root/MTProxy/objs/bin/* /opt/MTProxy/
4.2. Navegue a la nueva ubicación:
cd /opt/MTProxy
4.3. Automatice la descarga periódica de configuración de Telegram y el reinicio del servicio
nano /opt/MTProxy/proxy-multi.sh
4.4. Pegue lo siguiente:
#!/bin/bash
# Script to fetch proxy-multi.conf
cd /opt/MTProxy
curl https://core.telegram.org/getProxyConfig > proxy-multi.conf
systemctl restart MTProxy.service
4.5. Cree un usuario mtproxy para ejecutar el proxy:
useradd -m -s /bin/false mtproxy
4.6. Actualice los permisos del directorio MTProxy al nuevo usuario
chown -R mtproxy:mtproxy /opt/MTProxy
4.7. Creee un nuevo servicio de systemd para ejecutar el proxy
nano /etc/systemd/system/MTProxy.service
4.8. Copie la configuración:
[Unit]
Description=MTProxy
After=network.target
[Service]
Type=simple
WorkingDirectory=/opt/MTProxy
ExecStart=/opt/MTProxy/mtproto-proxy -u mtproxy -p 8888 -H <PORT> -S <SECRET> --aes-pwd proxy-secret proxy-multi.conf -M 1
Restart=on-failure
[Install]
WantedBy=multi-user.target
4.9. Modifique las variables como en el paso 1.12:
PORTes el puerto especificado (443)SECRETes uno de los secretos permitidos (c4f0ac142375049d2980ed29b3233874)
4.10. Guarde y salga con CTRL + X y Y + Intro
4.11. Reinicie los systemd daemons:
systemctl daemon-reload
4.12. Reincie el servicio y verifique que se ha iniciado correctamente:
systemctl restart MTProxy.service
# Compruebe el estado
systemctl status MTProxy.service
4.13. Habilite el inicio automatico del servicio:
systemctl enable MTProxy.service
4.14. Abra su archivo crontab
crontab -e
4.15. Pegue lo siguiente al final del mismo
0 0 * * * /bin/bash /opt/MTProxy/proxy-multi.sh
¡Su servidor proxy está listo!
Ahora debería poder conectarse al proxy dentro de Telegram usando un enlace como:
tg://proxy?server=<SERVER_IP>&port=<PORT>&secret=<SECRET>
https://t.me//proxy?server=<SERVER_IP>&port=<PORT>&secret=<SECRET>