feat: optional built-in vless/xray with proxychains4 toggle
- ai-setup.sh now asks interactive Y/n prompt for vless mode - On Y: installs xray + proxychains-ng, deploys configs, enables proxychains4 in all ai-* launchers - On N: generates plain ai-* scripts without proxychains - Templates moved to home-configs/xray/ and home-configs/proxychains/ Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
77
ai-setup.sh
77
ai-setup.sh
@@ -30,6 +30,17 @@ if ! command -v python3 &>/dev/null; then
|
||||
fi
|
||||
success "Python 3 найден"
|
||||
|
||||
# ── 0. Выбор режима работы (vless / direct) ─────────────────
|
||||
read -r -p "Установить встроенный vless? [Y/n] " _vless_ans
|
||||
_vless_ans="${_vless_ans:-Y}"
|
||||
if [[ "$_vless_ans" =~ ^[Yy]$ ]]; then
|
||||
USE_VLESS=1
|
||||
info "Режим: vless + proxychains4"
|
||||
else
|
||||
USE_VLESS=0
|
||||
info "Режим: direct (без проксирования)"
|
||||
fi
|
||||
|
||||
# ── 1. npm prefix в домашнюю папку ──────────────────────────
|
||||
info "Настраиваю npm prefix..."
|
||||
mkdir -p "$NPM_GLOBAL"
|
||||
@@ -57,6 +68,61 @@ else
|
||||
warn "Node.js не найден. Некоторые функции могут не работать."
|
||||
fi
|
||||
|
||||
# ── 2.5. proxychains-ng + xray (только в режиме vless) ──────
|
||||
if [ "$USE_VLESS" -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..."
|
||||
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
|
||||
sudo cp "$SCRIPT_DIR/home-configs/xray/config.json" /etc/xray/config.json
|
||||
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
|
||||
|
||||
sudo systemctl daemon-reload
|
||||
sudo systemctl enable --now xray
|
||||
success "xray установлен и запущен"
|
||||
|
||||
cp "$SCRIPT_DIR/home-configs/proxychains/proxychains-xray.conf" "$HOME/.proxychains-xray.conf"
|
||||
success "Proxychains конфиг обновлён"
|
||||
fi
|
||||
|
||||
# ── 3. Claude Code ───────────────────────────────────────────
|
||||
info "Проверяю Claude Code..."
|
||||
if ! command -v claude &>/dev/null; then
|
||||
@@ -699,6 +765,17 @@ exec claude --dangerously-skip-permissions --system-prompt "$SYS_PROMPT" "$@"
|
||||
CLAUDEEOF
|
||||
chmod +x "$BIN_DIR/ai-claude"
|
||||
|
||||
# ── 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/^\([[:space:]]*\)exec "\$agy_bin"/\1exec proxychains4 -f "\$HOME\/\.proxychains-xray\.conf" "\$agy_bin"/' "$BIN_DIR/ai-gemini"
|
||||
sed -i 's/^exec claude/exec proxychains4 -f "\$HOME\/\.proxychains-xray\.conf" claude/' "$BIN_DIR/ai-claude"
|
||||
success "proxychains4 интегрирован"
|
||||
fi
|
||||
|
||||
info "Удаляю старые версии скриптов (claude_*)..."
|
||||
rm -f "$BIN_DIR/claude_gpt" "$BIN_DIR/claude_deepseek" "$BIN_DIR/claude_kimi" "$BIN_DIR/claude_gemini" "$BIN_DIR/claude_api_helpers.sh"
|
||||
|
||||
|
||||
9
home-configs/proxychains/proxychains-xray.conf
Normal file
9
home-configs/proxychains/proxychains-xray.conf
Normal file
@@ -0,0 +1,9 @@
|
||||
# ProxyChains-NG config for xray SOCKS5 proxy
|
||||
strict_chain
|
||||
proxy_dns
|
||||
remote_dns_subnet 224
|
||||
tcp_read_time_out 15000
|
||||
tcp_connect_time_out 8000
|
||||
|
||||
[ProxyList]
|
||||
socks5 127.0.0.1 1080
|
||||
51
home-configs/xray/config.json
Executable file
51
home-configs/xray/config.json
Executable file
@@ -0,0 +1,51 @@
|
||||
{
|
||||
"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": "92.118.8.29",
|
||||
"port": 443,
|
||||
"users": [
|
||||
{
|
||||
"id": "495ac855-d718-4581-8344-f1e62105a904",
|
||||
"encryption": "mlkem768x25519plus.native.0rtt.gNGR8kO_UDWjoeer_TenoRbA09ajfrSfahqkS4q0dTeCFutCHGJjIdhSl8Fv8HyYUyWB_2GqMrSIzLS9l1BiidClOnliyUmZylQwQoUFl6CsLsZxdrrDz3w2isuIhtXPfZw8lANOErk7p7mm4QN0H2ZKCOQQaxkL3XA8EcxqNuGhK4XLqlFBDommPJUQfPuP7LV3V7s8YTcwq1EUr-Nyv0CZRdcF9WCNCWq26TVYXFwHSkeknBBFKYEJiytB8DpIvlmTvREQfEVnTziwOdYKikQXeOYdbcuKSWGb2okDZjFzYckULaWhavOwRWnOquZqdXiatrNPmCWnG2mfcSxA0UdLu8ALiOtuPjBGDUqqaXhZLLuH1zhdsUE4PMqqkNnMvsRwmvAYgWwSKWioz3wTQ1sKVfW1jTh8LyouZaVkuqRTunwWBcVCRDYEFUh4TBB_-WOpu7eh4ROmj9w0mhWBrtRO-uin8ZwqhkeScQhwoFUEvlwCsAl8AevGmAm1qpdOzfXNUgBTtVoXG9OTMUk9ZORiTzO0tutVTlKjaiBb1vOqgiFqiPuG1csvaPt63LQ1e9ywvEek7NkLVnrJopmCnTiu9UhE7GwZbxI8FBFYrBmPpIUszLiWLQZqvySbqBrIFTC5lIw9WymdW5wKONs5DZmYtFZOHUVEFtVFJvcZqwnEJARKI_M-rvkS7FWPPCkKHpEVe_IJsgOgoUzI9yQI5kNlS5XAzUG7ZMGWtzYjOZNZ1FYP5NbBTTy9I8kpLRQv3yp7PYBGdBQapaYX82Qjc4orJdghG5UOTQwsokojPVaAzSWG4qk5hoNugvogx9KHdsitKXCDlhdksQS5Obc8uMg1TxO2c0AnR2nNNVqgb_prVUlaNHcP4wARfCqrMwdgYQSSoLZluah9a2eZxGcC6CMxPBsThCEwNzIJUZiuPIvEQVFyJpiCHeUErGZFLpmaE0MK2cEzD9N7pRVgEExvwIMnO3jIGmCz80FFuAmEjDG5iyMkzQpsEnBHwAaihjkSwgCsZzTL26OtIDUUYMZ1N8ciRRqTvSGzn_K6EUp7JaWygZGw3QCBRocO7SEWpuGvakJc0QV32vpty3c8UeIcJZlgGKgtcNcsVYvLpEkkYviNCbpq6jnECRYUuXGp_oQv1mwqx2WMqGic7LVZNtYCJ3fHAsGi4yh5nfU0dNSCC0cgeyakNXvL3eyqHIB_e8RrEiMywUg7_MGP2oE9ZOqayLRapVTGQ-YATgcnZ_Eg5bKHNcRVqBpo0heElCtMPoEdQYE_HZSOm1cf9nFIYqRJ6_RPJNKGDOBwy1wJWJel54y-CeY3S2vAWRibOFiwVGW01tHNSCEQBaiLEzQ2Xml6IkSAHNm9eifPrdxuBChibzco4dUFpumbxrRkJYAuqmQfWgi36ziojeEDLlUd55ZDeCOVn4MoHMcD4yzAkpdUelyBafeUoQEs6hCDf2p7CvCquWKoEzcwvuccR0GcN5un2sqQAMVKw3Gs3fsRwkgcdsK69oE4KfUKVjrBGkIk9ChYCJMYGZJ-pGkWFp1qLua2QnNmPVJlpPjurRJVoiAiOVE",
|
||||
"flow": ""
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
},
|
||||
"streamSettings": {
|
||||
"network": "xhttp",
|
||||
"security": "reality",
|
||||
"realitySettings": {
|
||||
"serverName": "www.amd.com",
|
||||
"fingerprint": "chrome",
|
||||
"publicKey": "AMoGtXyztJYD6GRP6m8K82Mi-5vthrNrppJkEmconTU",
|
||||
"shortId": "9cd28fd258f8b99c"
|
||||
},
|
||||
"xhttpSettings": {
|
||||
"path": "/",
|
||||
"mode": "auto"
|
||||
}
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
Reference in New Issue
Block a user