mirror of
https://github.com/anten-ka/kaskad-pro.git
synced 2026-05-19 11:26:02 +00:00
Fix: ping timeout explanation with SSH command, self_update prompts for PAT on private repo
Made-with: Cursor
This commit is contained in:
72
install.sh
72
install.sh
@@ -261,10 +261,16 @@ probe_server_cli() {
|
|||||||
[ -n "$_RET_NOTE" ] && set_alias_note "$ip" "$_RET_NOTE"
|
[ -n "$_RET_NOTE" ] && set_alias_note "$ip" "$_RET_NOTE"
|
||||||
|
|
||||||
if [ ${#pings[@]} -eq 0 ]; then
|
if [ ${#pings[@]} -eq 0 ]; then
|
||||||
echo -e "${YELLOW}[WARN] Сервер не отвечает на ICMP ping.${NC}"
|
echo -e "${YELLOW}━━━ Сервер не ответил на ICMP ping ━━━${NC}"
|
||||||
echo -e "${WHITE}(Это нормально для VLESS/XRay — ICMP часто заблокирован)${NC}"
|
echo -e "${WHITE}Это нормально для VLESS / XRay / Reality — они часто блокируют ICMP.${NC}"
|
||||||
echo -e "${WHITE}TCP-проверка будет доступна после добавления правила.${NC}"
|
echo -e "${WHITE}После добавления правила ping будет работать через TCP.${NC}"
|
||||||
read -p "Продолжить? (y/n): " ans
|
echo ""
|
||||||
|
echo -e "${CYAN}Если хотите включить ICMP на удалённом сервере:${NC}"
|
||||||
|
echo -e " ${WHITE}ssh root@${ip}${NC}"
|
||||||
|
echo -e " ${GREEN}sysctl -w net.ipv4.icmp_echo_ignore_all=0${NC}"
|
||||||
|
echo -e " ${GREEN}echo 'net.ipv4.icmp_echo_ignore_all=0' >> /etc/sysctl.conf${NC}"
|
||||||
|
echo ""
|
||||||
|
read -p "Продолжить добавление? (y/n): " ans
|
||||||
[[ "$ans" != "y" ]] && return 1
|
[[ "$ans" != "y" ]] && return 1
|
||||||
fi
|
fi
|
||||||
return 0
|
return 0
|
||||||
@@ -307,7 +313,9 @@ probe_server_tg() {
|
|||||||
pavg=$(printf '%s\n' "${pings[@]}" | awk '{s+=$1} END {printf "%.2f", s/NR}')
|
pavg=$(printf '%s\n' "${pings[@]}" | awk '{s+=$1} END {printf "%.2f", s/NR}')
|
||||||
result+="<b>Среднее: ${pavg}ms</b> | Потеряно: $plost/3\n"
|
result+="<b>Среднее: ${pavg}ms</b> | Потеряно: $plost/3\n"
|
||||||
else
|
else
|
||||||
result+="<b>Сервер не отвечает</b>\n"
|
result+="<b>Сервер не отвечает на ICMP</b>\n"
|
||||||
|
result+="(Нормально для XRay/VLESS)\n"
|
||||||
|
result+="TCP-ping заработает после добавления.\n"
|
||||||
fi
|
fi
|
||||||
echo "$result"
|
echo "$result"
|
||||||
}
|
}
|
||||||
@@ -695,18 +703,42 @@ manage_aliases_menu() {
|
|||||||
|
|
||||||
self_update() {
|
self_update() {
|
||||||
local repo_url="https://raw.githubusercontent.com/anten-ka/kaskad-pro/main/install.sh"
|
local repo_url="https://raw.githubusercontent.com/anten-ka/kaskad-pro/main/install.sh"
|
||||||
local update_token; update_token=$(bot_get_state "system" "UPDATE_TOKEN" 2>/dev/null)
|
local update_token
|
||||||
|
update_token=$(bot_get_state "system" "UPDATE_TOKEN" 2>/dev/null)
|
||||||
|
[ -z "$update_token" ] && update_token=$(grep "^GITHUB_PAT=" "$KASKAD_CONF" 2>/dev/null | cut -d'"' -f2)
|
||||||
echo -e "${YELLOW}[*] Загрузка обновления...${NC}"
|
echo -e "${YELLOW}[*] Загрузка обновления...${NC}"
|
||||||
local ok=0
|
local ok=0
|
||||||
[ -n "$update_token" ] && curl -sL -H "Authorization: token $update_token" "$repo_url" -o /tmp/kaskad_update.sh 2>/dev/null && ok=1
|
[ -n "$update_token" ] && curl -sL -H "Authorization: token $update_token" "$repo_url" -o /tmp/kaskad_update.sh 2>/dev/null \
|
||||||
[ "$ok" -eq 0 ] && wget -qO /tmp/kaskad_update.sh "$repo_url" 2>/dev/null && ok=1
|
&& head -1 /tmp/kaskad_update.sh 2>/dev/null | grep -q "#!/bin/bash" && ok=1
|
||||||
[ "$ok" -eq 0 ] && [ -n "$update_token" ] && wget -qO /tmp/kaskad_update.sh --header="Authorization: token $update_token" "$repo_url" 2>/dev/null && ok=1
|
if [ "$ok" -eq 0 ]; then
|
||||||
|
curl -sL "$repo_url" -o /tmp/kaskad_update.sh 2>/dev/null \
|
||||||
|
&& head -1 /tmp/kaskad_update.sh 2>/dev/null | grep -q "#!/bin/bash" && ok=1
|
||||||
|
fi
|
||||||
|
if [ "$ok" -eq 0 ]; then
|
||||||
|
echo -e "${RED}Не удалось скачать. Репозиторий приватный.${NC}"
|
||||||
|
echo -e "${WHITE}Введите GitHub PAT (токен доступа) или Enter для отмены:${NC}"
|
||||||
|
echo -e "${CYAN}(Создать: GitHub → Settings → Developer settings → Personal access tokens)${NC}"
|
||||||
|
read -p "> " new_token
|
||||||
|
if [ -n "$new_token" ]; then
|
||||||
|
curl -sL -H "Authorization: token $new_token" "$repo_url" -o /tmp/kaskad_update.sh 2>/dev/null \
|
||||||
|
&& head -1 /tmp/kaskad_update.sh 2>/dev/null | grep -q "#!/bin/bash" && ok=1
|
||||||
|
if [ "$ok" -eq 1 ]; then
|
||||||
|
mkdir -p "$BOT_STATE_DIR"
|
||||||
|
bot_set_state "system" "UPDATE_TOKEN=$new_token"
|
||||||
|
save_config_val "GITHUB_PAT" "$new_token"
|
||||||
|
echo -e "${GREEN}Токен сохранён для будущих обновлений.${NC}"
|
||||||
|
else
|
||||||
|
echo -e "${RED}Токен не подошёл или ошибка сети.${NC}"
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
fi
|
||||||
if [ "$ok" -eq 1 ] && [ -s /tmp/kaskad_update.sh ]; then
|
if [ "$ok" -eq 1 ] && [ -s /tmp/kaskad_update.sh ]; then
|
||||||
cp -f /tmp/kaskad_update.sh /usr/local/bin/gokaskad; chmod +x /usr/local/bin/gokaskad; rm -f /tmp/kaskad_update.sh
|
cp -f /tmp/kaskad_update.sh /usr/local/bin/gokaskad; chmod +x /usr/local/bin/gokaskad; rm -f /tmp/kaskad_update.sh
|
||||||
systemctl restart kaskad-bot 2>/dev/null; systemctl restart kaskad-monitor 2>/dev/null
|
systemctl restart kaskad-bot 2>/dev/null; systemctl restart kaskad-monitor 2>/dev/null
|
||||||
echo -e "${GREEN}[OK] Обновлён! Перезапустите: gokaskad${NC}"; log_action "Self-update completed"
|
echo -e "${GREEN}[OK] Обновлён! Перезапустите: gokaskad${NC}"; log_action "Self-update completed"
|
||||||
else
|
else
|
||||||
echo -e "${RED}[ERROR] Не удалось.${NC}"; rm -f /tmp/kaskad_update.sh
|
[ "$ok" -eq 0 ] && echo -e "${RED}[ERROR] Не удалось обновить.${NC}"
|
||||||
|
rm -f /tmp/kaskad_update.sh
|
||||||
fi
|
fi
|
||||||
read -p "Нажмите Enter..."
|
read -p "Нажмите Enter..."
|
||||||
}
|
}
|
||||||
@@ -801,7 +833,18 @@ ping_live() {
|
|||||||
done
|
done
|
||||||
|
|
||||||
trap - INT
|
trap - INT
|
||||||
echo ""; read -p "Нажмите Enter для возврата в меню..."
|
echo ""
|
||||||
|
if [ ${#results[@]} -eq 0 ] && [ "$count" -gt 0 ]; then
|
||||||
|
echo -e "${YELLOW}━━━ Сервер не ответил ни разу ━━━${NC}"
|
||||||
|
echo -e "${WHITE}ICMP заблокирован, а TCP-соединение не удалось.${NC}"
|
||||||
|
echo ""
|
||||||
|
echo -e "${CYAN}Чтобы включить ping на удалённом сервере:${NC}"
|
||||||
|
echo -e " ${WHITE}ssh root@${ip}${NC}"
|
||||||
|
echo -e " ${GREEN}sysctl -w net.ipv4.icmp_echo_ignore_all=0${NC}"
|
||||||
|
echo -e " ${GREEN}echo 'net.ipv4.icmp_echo_ignore_all=0' >> /etc/sysctl.conf${NC}"
|
||||||
|
echo ""
|
||||||
|
fi
|
||||||
|
read -p "Нажмите Enter для возврата в меню..."
|
||||||
}
|
}
|
||||||
|
|
||||||
ping_menu() {
|
ping_menu() {
|
||||||
@@ -1236,8 +1279,11 @@ bot_handle_callback() {
|
|||||||
tg_edit "$chat_id" "$msg_id" "🏓 <b>$lb</b>\nРежим:" "$(kbd_ping_opts "$ip")" ;;
|
tg_edit "$chat_id" "$msg_id" "🏓 <b>$lb</b>\nРежим:" "$(kbd_ping_opts "$ip")" ;;
|
||||||
po:*) local ip="${data#po:}"; local lb; lb=$(fmt_ip_short "$ip")
|
po:*) local ip="${data#po:}"; local lb; lb=$(fmt_ip_short "$ip")
|
||||||
( local ms; ms=$(smart_ping "$ip" 3)
|
( local ms; ms=$(smart_ping "$ip" 3)
|
||||||
[ -n "$ms" ] && tg_send "$chat_id" "🏓 <b>$lb</b>\n<code>${ms} ms</code>" "$(kbd_back)" > /dev/null \
|
if [ -n "$ms" ]; then
|
||||||
|| tg_send "$chat_id" "🏓 <b>$lb</b>\n<code>timeout</code>" "$(kbd_back)" > /dev/null ) & ;;
|
tg_send "$chat_id" "🏓 <b>$lb</b>\n<code>${ms} ms</code>" "$(kbd_back)" > /dev/null
|
||||||
|
else
|
||||||
|
tg_send "$chat_id" "🏓 <b>$lb</b>\n<code>timeout</code>\n\n<i>ICMP заблокирован на сервере.\nВключить:</i>\n<code>sysctl -w net.ipv4.icmp_echo_ignore_all=0</code>" "$(kbd_back)" > /dev/null
|
||||||
|
fi ) & ;;
|
||||||
p10:*) local ip="${data#p10:}"; local lb; lb=$(fmt_ip_short "$ip")
|
p10:*) local ip="${data#p10:}"; local lb; lb=$(fmt_ip_short "$ip")
|
||||||
( local resp; resp=$(tg_send "$chat_id" "🏓 $lb (10x)..." "")
|
( local resp; resp=$(tg_send "$chat_id" "🏓 $lb (10x)..." "")
|
||||||
local mid; mid=$(echo "$resp" | jq -r '.result.message_id // empty')
|
local mid; mid=$(echo "$resp" | jq -r '.result.message_id // empty')
|
||||||
|
|||||||
Reference in New Issue
Block a user