ru1: WEB-прокси Telegram вместо telemt
На 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>
This commit is contained in:
co-authored by
Claude Opus 5.5
parent
123cdaa19b
commit
2ab38bc1f8
@@ -0,0 +1,86 @@
|
||||
#!/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"
|
||||
Reference in New Issue
Block a user