На ru.ruzzy.dev:443 поднят официальный tproxy-server (relay, carrier websocket) перед официальным MTProxy на loopback. Фронт — nginx в ~/gost, сертификат только на ru.ruzzy.dev. - MTProxy: --nat-info 10.8.1.4:161.97.93.252 вручную — трафик к Telegram выходит через wg0 с IP fr1, автоопределение install.sh ошиблось бы и прокси молча не отвечал бы. - relay на 8090/8091: 8080 занят cadvisor. - telemt удалён окончательно (контейнер, образ, конфиг, том). - certbot до этого не работал вовсе: сертификат был просрочен с 2026-07-01, продлён и запущен. stacks/tproxy/: compose и nginx.conf стека ~/gost, setup-ru1.sh — однократная root-установка relay и MTProxy. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
87 lines
3.9 KiB
Bash
87 lines
3.9 KiB
Bash
#!/usr/bin/env bash
|
|
# Однократная установка WEB-прокси Telegram (tproxy-server + официальный MTProxy)
|
|
# на ru1. Запускать от root из каталога с исходниками tproxy-server:
|
|
# sudo bash /tmp/tproxy-server/setup-ru1.sh
|
|
# Повторный запуск безопасен: секрет и token.key не перегенерируются.
|
|
#
|
|
# Отличия от deploy/install.sh апстрима:
|
|
# - без Caddy: 80/443 держит nginx в docker (~/gost), он проксирует всё в relay;
|
|
# - relay на 127.0.0.1:8090/8091 — 8080 занят cadvisor (*:8080);
|
|
# - NAT задан вручную: трафик к Telegram идёт через wg0 и выходит с IP fr1,
|
|
# а автоопределение install.sh спросило бы ifconfig-сервис через ens3
|
|
# и получило 85.198.109.86 — MTProxy молча перестал бы отвечать клиентам;
|
|
# - без base path: его пока понимает только Desktop.
|
|
set -euo pipefail
|
|
umask 077
|
|
|
|
repo="$(cd "$(dirname "$0")" && pwd)"
|
|
hostname=ru.ruzzy.dev
|
|
nat_args="--nat-info 10.8.1.4:161.97.93.252"
|
|
|
|
[[ "${EUID}" -eq 0 ]] || { echo "run as root" >&2; exit 1; }
|
|
cd "$repo"
|
|
|
|
# 1. Официальный MTProxy (закреплённый коммит, sha256) + конфиг Telegram.
|
|
bash deploy/install-mtproxy.sh
|
|
|
|
# 2. Relay.
|
|
id tproxy >/dev/null 2>&1 || useradd --system --home /nonexistent --shell /usr/sbin/nologin tproxy
|
|
install -o root -g root -m 0755 tproxy-server.bin /usr/local/bin/tproxy-server
|
|
|
|
install -d -o root -g root -m 0755 /srv/tproxy-site
|
|
install -o root -g root -m 0644 /home/mik/gost/nginx/html/index.html /srv/tproxy-site/index.html
|
|
|
|
install -d -o root -g tproxy -m 0750 /etc/tproxy-server
|
|
bash deploy/ensure-token-key.sh
|
|
|
|
if [[ ! -f /etc/tproxy-server/profiles.json ]]; then
|
|
secret="$(openssl rand -hex 16)"
|
|
printf '{"profiles":[{"name":"default","secret":"%s","backend":"127.0.0.1:2398"}]}\n' \
|
|
"$secret" > /etc/tproxy-server/profiles.json
|
|
printf 'MTPROXY_SECRET=%s\nMTPROXY_NAT_ARGS=%s\n' "$secret" "$nat_args" > /etc/mtproxy/mtproxy.env
|
|
unset secret
|
|
fi
|
|
|
|
cat > /etc/tproxy-server/config.json <<EOF
|
|
{
|
|
"public_hostname": "$hostname",
|
|
"base_path": "",
|
|
"listen": "127.0.0.1:8090",
|
|
"admin_listen": "127.0.0.1:8091",
|
|
"public_dir": "/srv/tproxy-site",
|
|
"static_routes": "exact",
|
|
"profiles_file": "/run/credentials/tproxy-server.service/profiles.json"
|
|
}
|
|
EOF
|
|
chown root:tproxy /etc/tproxy-server/config.json /etc/tproxy-server/profiles.json
|
|
chmod 0640 /etc/tproxy-server/config.json
|
|
chmod 0400 /etc/tproxy-server/profiles.json
|
|
chown root:mtproxy /etc/mtproxy/mtproxy.env
|
|
chmod 0640 /etc/mtproxy/mtproxy.env
|
|
|
|
# 3. Юниты, firewall (2398/8888 только с lo), ежедневное обновление конфига Telegram.
|
|
for unit in tproxy-server.service mtproxy.service tproxy-firewall.service \
|
|
refresh-mtproxy-config.service refresh-mtproxy-config.timer; do
|
|
install -o root -g root -m 0644 "deploy/$unit" "/etc/systemd/system/$unit"
|
|
done
|
|
install -o root -g root -m 0644 deploy/firewall.nft /etc/tproxy-server/firewall.nft
|
|
install -o root -g root -m 0755 deploy/refresh-mtproxy-config.sh /usr/local/sbin/refresh-mtproxy-config
|
|
|
|
/usr/local/bin/tproxy-server -config /etc/tproxy-server/config.json \
|
|
-profiles-file /etc/tproxy-server/profiles.json -check
|
|
|
|
systemctl daemon-reload
|
|
systemctl enable --now tproxy-firewall.service
|
|
systemctl enable --now mtproxy.service
|
|
systemctl restart mtproxy.service
|
|
systemctl enable --now tproxy-server.service
|
|
systemctl enable --now refresh-mtproxy-config.timer
|
|
|
|
for _ in $(seq 20); do
|
|
curl -fs -o /dev/null http://127.0.0.1:8091/readyz && break
|
|
sleep 1
|
|
done
|
|
curl -fsS http://127.0.0.1:8091/readyz >/dev/null && echo "relay: ready"
|
|
|
|
echo "Ссылка для клиента: sudo sed -n 's/.*\"secret\":\"\\([0-9a-f]*\\)\".*/https:\\/\\/t.me\\/webproxy?server=$hostname\\&secret=\\1/p' /etc/tproxy-server/profiles.json"
|