#!/bin/bash # Montana Node — авто-присоединение к сети. # Одна команда: # ALIAS=amsterdam LABEL=Amsterdam COUNTRY=NL HOSTING=DigitalOcean \ # COORDS="52.37,4.89" TOKEN= bash join.sh # # Скрипт: # 1. Ставит xray + ufw + montana-node # 2. Генерирует Reality keypair + UUID + shortId # 3. Поднимает montana-node :8444 (p2p сети Montana) и xray :443 (VLESS+Reality) # 4. Регистрирует узел в Moscow orchestrator → авто-добавление на сайт, # в карту, peer-health всех узлов, Helsinki cascade balancer. set -euo pipefail : "${ALIAS:?нужен ALIAS, например: amsterdam}" : "${LABEL:?нужен LABEL, например: Amsterdam}" : "${COUNTRY:?нужен COUNTRY 2-буквы, например: NL}" : "${HOSTING:?нужен HOSTING, например: DigitalOcean}" : "${COORDS:?нужны COORDS \"lat,lon\", например: 52.37,4.89}" : "${TOKEN:?нужен orchestrator TOKEN (запроси у admin)}" ROLE="${ROLE:-vpn-backend}" ORCH="${ORCH:-https://montana.quest/vpn/node}" BOOTSTRAP_FROM="${BOOTSTRAP_FROM:-cdn.montana.quest}" PUBLIC_IP="$(curl -s https://api.ipify.org)" echo "==> Montana Node join: $ALIAS ($LABEL, $COUNTRY/$HOSTING) @ $PUBLIC_IP" # 1. Зависимости export DEBIAN_FRONTEND=noninteractive apt-get update -qq apt-get install -y -qq curl ca-certificates openssl unzip jq # 2. xray + Reality keypair curl -L https://github.com/XTLS/Xray-install/raw/main/install-release.sh | bash -s -- install --without-geodata 2>&1 | tail -3 mkdir -p /usr/local/etc/xray UUID="$(xray uuid)" KEYS="$(xray x25519)" PRIV="$(echo "$KEYS" | awk '/PrivateKey/ {print $NF}')" PUB="$(echo "$KEYS" | awk '/Password/ {print $NF}')" SID="$(openssl rand -hex 8)" cat > /usr/local/etc/xray/config.json </dev/null systemctl enable --now xray # 3. ufw ufw default deny incoming >/dev/null 2>&1 || true ufw default allow outgoing >/dev/null 2>&1 || true ufw allow 22/tcp >/dev/null ufw allow 443/tcp >/dev/null ufw allow 8444/tcp >/dev/null echo "y" | ufw enable >/dev/null # 4. montana-node id montana &>/dev/null || useradd -r -m -d /var/lib/montana -s /usr/sbin/nologin montana mkdir -p /var/lib/montana /etc/montana chown -R montana:montana /var/lib/montana && chmod 700 /var/lib/montana if [ ! -x /usr/local/bin/montana-node ]; then echo "!! /usr/local/bin/montana-node отсутствует. Скопируй с любого узла:" echo " scp :/usr/local/bin/montana-node $PUBLIC_IP:/usr/local/bin/" exit 2 fi if [ ! -f /etc/montana/genesis-manifest.json ]; then echo "!! /etc/montana/genesis-manifest.json отсутствует. Скопируй:" echo " scp :/etc/montana/genesis-manifest.json $PUBLIC_IP:/etc/montana/" exit 2 fi if [ ! -f /var/lib/montana/identity.bin ]; then sudo -u montana /usr/local/bin/montana-node init --data-dir /var/lib/montana fi cat > /etc/systemd/system/montana-node.service <