chore: убрать VLESS-прокси, proxychains и fuck-rkn.sh

Пользователь перешёл на Amnezia VPN — встроенный VLESS-прокси (xray + proxychains4)
и отдельный server-installer fuck-rkn.sh (telemt + xray) больше не нужны. Убран
весь код в ai-setup.sh/setup.sh, конфиги с VPN-кредами, неактуальный тест и
упоминания в документации.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
This commit is contained in:
2026-06-30 21:50:50 +03:00
parent 9b906823cd
commit 9e64088e46
10 changed files with 7 additions and 2464 deletions

View File

@@ -53,260 +53,6 @@ else
warn "jq не найден. statusline-command.sh и некоторые функции могут не работать."
fi
# ── VLESS URL parser ───────────────────────────────────────────
# Принимает vless:// URL, устанавливает переменные VL_*
parse_vless_url() {
local url="$1"
eval "$(python3 -c "
import urllib.parse, sys
url = sys.argv[1]
rest = url[8:] # strip 'vless://'
at_pos = rest.index('@')
uuid = rest[:at_pos]
rest = rest[at_pos+1:]
colon_pos = rest.index(':')
q_pos = rest.index('?')
host = rest[:colon_pos]
port = rest[colon_pos+1:q_pos]
rest = rest[q_pos+1:]
hash_pos = rest.index('#') if '#' in rest else len(rest)
qs = rest[:hash_pos]
name = rest[hash_pos+1:] if '#' in rest else ''
params = urllib.parse.parse_qs(qs)
def get(p, default=''):
vals = params.get(p, [default])
return vals[0] if vals else default
flow = get('flow')
vtype = get('type')
if not vtype:
vtype = 'xhttp' if not flow else 'tcp'
spx_default = '' if vtype == 'tcp' else '/'
print(f'VL_UUID={uuid}')
print(f'VL_ADDRESS={host}')
print(f'VL_PORT={port}')
print(f'VL_ENCRYPTION={get(\"encryption\")}')
print(f'VL_FLOW={flow}')
print(f'VL_SECURITY={get(\"security\")}')
print(f'VL_SNI={get(\"sni\")}')
print(f'VL_FP={get(\"fp\", \"chrome\")}')
print(f'VL_PBK={get(\"pbk\")}')
print(f'VL_SID={get(\"sid\")}')
print(f'VL_TYPE={vtype}')
print(f'VL_PATH={urllib.parse.unquote(get(\"path\", \"/\"))}')
print(f'VL_MODE={get(\"mode\", \"auto\")}')
print(f'VL_SPX={get(\"spx\", spx_default)}')
print(f'VL_NAME={name}')
" "$url")"
}
# ── VLESS connectivity test ────────────────────────────────────
# Запускает xray с тестовым конфигом и проверяет curl'ом
# Возвращает: "ok" или "fail"
test_vless_server() {
local url="$1" test_port="$2"
parse_vless_url "$url"
# Генерируем временный конфиг
_TMP_CONF="/tmp/xray_test_${test_port}.json"
_VL_XHTTP=""
if [ "$VL_TYPE" = "xhttp" ]; then
_VL_XHTTP=$(printf ',\n "xhttpSettings": {\n "path": "%s",\n "mode": "%s"\n }' "$VL_PATH" "$VL_MODE")
fi
cat > "$_TMP_CONF" << XRAYEOF
{
"log": { "loglevel": "none" },
"inbounds": [
{
"port": $test_port,
"listen": "127.0.0.1",
"protocol": "socks",
"settings": { "udp": true }
}
],
"outbounds": [
{
"protocol": "vless",
"settings": {
"vnext": [
{
"address": "$VL_ADDRESS",
"port": $VL_PORT,
"users": [
{
"id": "$VL_UUID",
"encryption": "$VL_ENCRYPTION",
"flow": "$VL_FLOW"
}
]
}
]
},
"streamSettings": {
"network": "$VL_TYPE",
"security": "$VL_SECURITY",
"realitySettings": {
"serverName": "$VL_SNI",
"fingerprint": "$VL_FP",
"publicKey": "$VL_PBK",
"shortId": "$VL_SID",
"spiderX": "$VL_SPX"
}$_VL_XHTTP
}
}
]
}
XRAYEOF
# Запускаем xray
/usr/local/bin/xray run -c "$_TMP_CONF" >/dev/null 2>&1 &
local xpid=$!
sleep 2
# Тест через SOCKS5
local result="fail"
if curl --socks5 "127.0.0.1:${test_port}" --max-time 5 -s https://ifconfig.co/ >/dev/null 2>&1; then
result="ok"
fi
kill $xpid 2>/dev/null; wait $xpid 2>/dev/null
rm -f "$_TMP_CONF"
echo "$result"
}
# ── 0. Выбор режима работы VLESS (on / off / skip) ─────────────
# AI_SETUP_VLESS:
# 1 / on — включить VLESS (установка xray + proxychains + обёртки лаунчеров)
# 0 / off — отключить VLESS (откат: stop xray, сброс прокси, IPv6 on)
# skip — НЕ трогать сеть (умолчание). Лаунчеры синхронизируются
# с текущим состоянием (xray активен?).
# Устанавливается из меню setup.sh. По умолчанию skip, чтобы прямой запуск
# ai-setup.sh и пункты 1/7/8 не меняли сетевые настройки.
DO_VLESS_INSTALL=0
case "${AI_SETUP_VLESS:-skip}" in
1|on)
USE_VLESS=1
DO_VLESS_INSTALL=1
# Читаем список серверов
_VL_URLS=()
_VL_LABELS=()
_SERVERS_FILE="$SCRIPT_DIR/home-configs/vless/servers.conf"
if [ ! -f "$_SERVERS_FILE" ]; then
err "Файл servers.conf не найден: $_SERVERS_FILE"
fi
while IFS= read -r line || [[ -n "$line" ]]; do
[[ "$line" =~ ^[[:space:]]*# ]] && continue
[[ -z "$line" ]] && continue
_vl_rest="${line#vless://}"
_vl_rest="${_vl_rest#*@}"
_vl_ip="${_vl_rest%%:*}"
_vl_name="${line##*#}"
[[ "$_vl_name" == "$line" ]] && _vl_name=""
_VL_URLS+=("$line")
_VL_LABELS+=("$_vl_ip ($_vl_name)")
done < "$_SERVERS_FILE"
if [ "${#_VL_URLS[@]}" -eq 0 ]; then
err "Нет VLESS серверов в $_SERVERS_FILE"
fi
# Реальная проверка VLESS (запускаем xray для каждого сервера)
echo ""
info "Проверяю VLESS-доступность серверов..."
_VL_STATUS=()
for i in "${!_VL_URLS[@]}"; do
_label="${_VL_LABELS[$i]}"
_test_port=$((10980 + i))
printf " %-45s" "$((i+1))) $_label"
_status=$(test_vless_server "${_VL_URLS[$i]}" "$_test_port")
if [ "$_status" = "ok" ]; then
echo -e "${GREEN}✓ работает${NC}"
_VL_STATUS+=("ok")
else
echo -e "${RED}✗ не работает${NC}"
_VL_STATUS+=("fail")
fi
done
echo ""
read -r -p "Выбери сервер [1-${#_VL_URLS[@]}]: " _vl_choice
_vl_choice="${_vl_choice:-1}"
if ! [[ "$_vl_choice" =~ ^[0-9]+$ ]] || [ "$_vl_choice" -lt 1 ] || [ "$_vl_choice" -gt "${#_VL_URLS[@]}" ]; then
err "Неверный выбор: $_vl_choice"
fi
_VL_SELECTED="${_VL_URLS[$((_vl_choice-1))]}"
parse_vless_url "$_VL_SELECTED"
info "Выбран: $VL_ADDRESS ($VL_NAME)"
;;
0|off)
USE_VLESS=0
DO_VLESS_INSTALL=0
info "Отключение VLESS (откат настроек)"
# ── Откат всех настроек vless ──────────────────────────────
info "Откатываю настройки прокси..."
# Останавливаем и отключаем xray
sudo systemctl stop xray 2>/dev/null || true
sudo systemctl disable xray 2>/dev/null || true
success "xray остановлен и отключён"
# Системный прокси → none
if command -v gsettings &>/dev/null; then
gsettings set org.gnome.system.proxy mode 'none' 2>/dev/null || true
success "Системный прокси отключён"
fi
# Firefox → direct (type=0)
FIREFOX_PROFILE=""
if [ -d "$HOME/snap/firefox/common/.mozilla/firefox" ]; then
FIREFOX_PROFILE=$(find "$HOME/snap/firefox/common/.mozilla/firefox" -name "*.default*" -type d | head -1)
elif [ -d "$HOME/.mozilla/firefox" ]; then
FIREFOX_PROFILE=$(find "$HOME/.mozilla/firefox" -name "*.default*" -type d | head -1)
fi
if [ -n "$FIREFOX_PROFILE" ]; then
cat > "$FIREFOX_PROFILE/user.js" << 'FJSEOF'
user_pref("network.proxy.type", 0);
FJSEOF
success "Firefox переключён на прямой доступ"
fi
# Включаем IPv6 обратно (только если kill switch не активен)
if ufw status | grep -qE "активен|active"; then
info "UFW kill switch активен — оставляю IPv6 отключённым"
else
sudo rm -f /etc/sysctl.d/99-disable-ipv6.conf
sudo sysctl -w net.ipv6.conf.all.disable_ipv6=0 2>/dev/null || true
sudo sysctl -w net.ipv6.conf.default.disable_ipv6=0 2>/dev/null || true
sudo systemctl restart systemd-resolved 2>/dev/null || true
success "IPv6 восстановлен"
fi
;;
*)
# skip — сеть не трогаем; синхронизируем лаунчеры с текущим состоянием xray
if systemctl is-active --quiet xray 2>/dev/null; then
USE_VLESS=1
info "Сеть не трогаю. VLESS активен — лаунчеры будут с proxychains4."
else
USE_VLESS=0
info "Сеть не трогаю. VLESS не активен — прямые лаунчеры."
fi
info "Управление VLESS: пункт 9 (включить / отключить)."
;;
esac
# ── 1. npm prefix в домашнюю папку ──────────────────────────
info "Настраиваю npm prefix..."
mkdir -p "$NPM_GLOBAL"
@@ -334,175 +80,6 @@ else
warn "Node.js не найден. Некоторые функции могут не работать."
fi
# ── 2.5. proxychains-ng + xray (только при включении VLESS) ──
if [ "$DO_VLESS_INSTALL" -eq 1 ]; then
info "Проверяю proxychains-ng..."
if ! command -v proxychains4 &>/dev/null; then
info "Устанавливаю proxychains-ng (нужен sudo)..."
if command -v apt-get &>/dev/null; then
sudo apt-get install -y proxychains-ng
elif command -v dnf &>/dev/null; then
sudo dnf install -y proxychains-ng
else
warn "Не удалось установить proxychains-ng автоматически. Установите вручную."
fi
fi
if command -v proxychains4 &>/dev/null; then
success "proxychains4 найден"
else
warn "proxychains4 не найден. Продолжаю без проксирования."
fi
info "Устанавливаю xray..."
# Останавливаем старый процесс (мог остаться от предыдущей установки)
sudo systemctl stop xray 2>/dev/null || true
XRAY_VERSION="26.3.27"
XRAY_ARCH="64"
XRAY_URL="https://github.com/XTLS/Xray-core/releases/download/v${XRAY_VERSION}/Xray-linux-${XRAY_ARCH}.zip"
TMPDIR=$(mktemp -d)
curl -fsSL "$XRAY_URL" -o "$TMPDIR/xray.zip"
unzip -q "$TMPDIR/xray.zip" -d "$TMPDIR"
sudo install -m 755 "$TMPDIR/xray" /usr/local/bin/xray
rm -rf "$TMPDIR"
sudo mkdir -p /etc/xray
# xhttpSettings — только для xhttp-транспорта
_VL_XHTTP=""
if [ "$VL_TYPE" = "xhttp" ]; then
_VL_XHTTP=$(printf ',\n "xhttpSettings": {\n "path": "%s",\n "mode": "%s"\n }' "$VL_PATH" "$VL_MODE")
fi
sudo tee /etc/xray/config.json > /dev/null << XRAYEOF
{
"log": { "loglevel": "warning" },
"inbounds": [
{
"port": 1080,
"listen": "127.0.0.1",
"protocol": "socks",
"settings": { "udp": true }
},
{
"port": 2080,
"listen": "127.0.0.1",
"protocol": "http"
}
],
"outbounds": [
{
"protocol": "vless",
"settings": {
"vnext": [
{
"address": "$VL_ADDRESS",
"port": $VL_PORT,
"users": [
{
"id": "$VL_UUID",
"encryption": "$VL_ENCRYPTION",
"flow": "$VL_FLOW"
}
]
}
]
},
"streamSettings": {
"network": "$VL_TYPE",
"security": "$VL_SECURITY",
"realitySettings": {
"serverName": "$VL_SNI",
"fingerprint": "$VL_FP",
"publicKey": "$VL_PBK",
"shortId": "$VL_SID",
"spiderX": "$VL_SPX"
}$_VL_XHTTP
}
}
]
}
XRAYEOF
sudo chmod 644 /etc/xray/config.json
sudo tee /etc/systemd/system/xray.service > /dev/null << 'SVCEOF'
[Unit]
Description=Xray Service
After=network.target
[Service]
ExecStart=/usr/local/bin/xray run -c /etc/xray/config.json
Restart=on-failure
[Install]
WantedBy=multi-user.target
SVCEOF
# Удаляем чужие drop-in оверрайды (могут переопределять ExecStart на старый конфиг)
sudo rm -rf /etc/systemd/system/xray.service.d/
# Удаляем старый дефолтный конфиг xray из других путей
sudo rm -rf /usr/local/etc/xray/
sudo systemctl daemon-reload
sudo systemctl enable --now xray
success "xray установлен и запущен"
# ── Отключение IPv6 (VLESS не тянет IPv6, браузеры зависают) ──
info "Отключаю IPv6 на уровне системы..."
sudo sysctl -w net.ipv6.conf.all.disable_ipv6=1
sudo sysctl -w net.ipv6.conf.default.disable_ipv6=1
sudo tee /etc/sysctl.d/99-disable-ipv6.conf > /dev/null << 'SYSCTEOF'
# Отключение IPv6 — требуется для стабильной работы VLESS/xray
net.ipv6.conf.all.disable_ipv6=1
net.ipv6.conf.default.disable_ipv6=1
SYSCTEOF
sudo systemctl restart systemd-resolved
success "IPv6 отключён, DNS-кэш очищен"
cp "$SCRIPT_DIR/home-configs/proxychains/proxychains-xray.conf" "$HOME/.proxychains-xray.conf"
success "Proxychains конфиг обновлён"
# ── Настройка Firefox на SOCKS5 + remote DNS ────────────────
info "Настраиваю Firefox на SOCKS5 прокси..."
FIREFOX_PROFILE=""
if [ -d "$HOME/snap/firefox/common/.mozilla/firefox" ]; then
FIREFOX_PROFILE=$(find "$HOME/snap/firefox/common/.mozilla/firefox" -name "*.default*" -type d | head -1)
elif [ -d "$HOME/.mozilla/firefox" ]; then
FIREFOX_PROFILE=$(find "$HOME/.mozilla/firefox" -name "*.default*" -type d | head -1)
fi
if [ -n "$FIREFOX_PROFILE" ]; then
cat > "$FIREFOX_PROFILE/user.js" << 'FJSEOF'
user_pref("network.proxy.type", 1);
user_pref("network.proxy.socks", "127.0.0.1");
user_pref("network.proxy.socks_port", 1080);
user_pref("network.proxy.socks_remote_dns", true);
user_pref("network.proxy.http", "");
user_pref("network.proxy.http_port", 0);
user_pref("network.proxy.ssl", "");
user_pref("network.proxy.ssl_port", 0);
FJSEOF
success "Firefox настроен на SOCKS5 (профиль: $FIREFOX_PROFILE)"
else
warn "Firefox не найден, пропускаю настройку прокси"
fi
# ── Настройка системного прокси (для Chrome/Chromium) ───────
info "Настраиваю системный прокси..."
if command -v gsettings &>/dev/null; then
gsettings set org.gnome.system.proxy mode 'manual' 2>/dev/null || true
gsettings set org.gnome.system.proxy.http host '127.0.0.1' 2>/dev/null || true
gsettings set org.gnome.system.proxy.http port 2080 2>/dev/null || true
gsettings set org.gnome.system.proxy.socks host '127.0.0.1' 2>/dev/null || true
gsettings set org.gnome.system.proxy.socks port 1080 2>/dev/null || true
success "Системный прокси настроен (HTTP 2080 + SOCKS 1080)"
else
warn "gsettings не найден, пропускаю настройку системного прокси"
fi
fi
# ── 3. Claude Code ───────────────────────────────────────────
info "Проверяю Claude Code..."
if ! command -v claude &>/dev/null; then
@@ -2320,21 +1897,6 @@ claude --dangerously-skip-permissions --system-prompt-file "$_PROMPT_FILE" "$@"
OPENCODEEOF
chmod +x "$BIN_DIR/ai-opencode"
# ── 8.5. Proxychains инъекция (только в режиме vless) ────────
if [ "$USE_VLESS" -eq 1 ]; then
info "Включаю proxychains4 в ai-лаунчеры..."
sed -i 's/^exec "\$codex_bin"/exec proxychains4 -f "\$HOME\/\.proxychains-xray\.conf" "\$codex_bin"/' "$BIN_DIR/ai-gpt"
sed -i 's/^claude --dangerously-skip-permissions/proxychains4 -f "\$HOME\/\.proxychains-xray\.conf" claude --dangerously-skip-permissions/' "$BIN_DIR/ai-deepseek"
sed -i 's/^claude --dangerously-skip-permissions/proxychains4 -f "\$HOME\/\.proxychains-xray\.conf" claude --dangerously-skip-permissions/' "$BIN_DIR/ai-kimi"
sed -i 's/^claude --dangerously-skip-permissions/proxychains4 -f "\$HOME\/\.proxychains-xray\.conf" claude --dangerously-skip-permissions/' "$BIN_DIR/ai-glm"
sed -i 's/^claude --dangerously-skip-permissions/proxychains4 -f "\$HOME\/\.proxychains-xray\.conf" claude --dangerously-skip-permissions/' "$BIN_DIR/ai-openrouter"
sed -i 's|^\([[:space:]]*\)"\$agy_bin" --dangerously-skip-permissions "\$@"|\1proxychains4 -f "\$HOME/.proxychains-xray.conf" "\$agy_bin" --dangerously-skip-permissions "\$@"|' "$BIN_DIR/ai-gemini"
sed -i 's|^\([[:space:]]*\)"\$cursor_bin" --force "\$@"|\1proxychains4 -f "\$HOME/.proxychains-xray.conf" "\$cursor_bin" --force "\$@"|' "$BIN_DIR/ai-cursor"
sed -i 's/^claude --dangerously-skip-permissions/proxychains4 -f "\$HOME\/\.proxychains-xray\.conf" claude --dangerously-skip-permissions/' "$BIN_DIR/ai-claude"
sed -i 's/^claude --dangerously-skip-permissions/proxychains4 -f "\$HOME\/\.proxychains-xray\.conf" claude --dangerously-skip-permissions/' "$BIN_DIR/ai-opencode"
success "proxychains4 интегрирован"
fi
# Подготавливаем изолированные config dir'ы для Claude Code-лаунчеров,
# чтобы hooks (/switch-account, /add-account) и settings.json были на месте
# ещё до первого запуска пользователем.

File diff suppressed because it is too large Load Diff