Add Object B and self-growth canons with Cursor ledger rules; refresh connectivity and VPN runbooks.

Track day metrics/anamnesis HARD rules under .cursor/rules and personal docs so each screening updates days/{KIN}, dynamics, and big-data ledger.

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
ahauimix
2026-07-26 10:22:56 +08:00
parent 4bc9629a09
commit 0238aa7c02
214 changed files with 121312 additions and 388 deletions

View File

@@ -1,2 +0,0 @@
*
!.gitignore

View File

@@ -0,0 +1,35 @@
#!/usr/bin/env bash
# Добавляет в ~/.zshrc короткие алиасы: exit-ru / exit-local / exit-ru-do / exit-status
set -e
ROOT="$(cd "$(dirname "${BASH_SOURCE[0]}")/../.." && pwd)"
RC="${ZDOTDIR:-$HOME}/.zshrc"
MARKER="# local_machine ssh-exit aliases"
snippet=$(cat <<EOF
$MARKER
alias exit-ru='$ROOT/scripts/vpn/exit-via-ru.sh'
alias exit-local='$ROOT/scripts/vpn/exit-via-local.sh'
alias exit-ru-do='$ROOT/scripts/vpn/exit-via-ru-do.sh'
alias exit-status='$ROOT/scripts/vpn/ssh-exit-mode.sh status'
alias exit-verify='$ROOT/scripts/vpn/ssh-exit-mode.sh verify'
EOF
)
touch "$RC"
if grep -qF "$MARKER" "$RC" 2>/dev/null; then
echo "Алиасы уже есть в $RC"
else
{
echo ""
echo "$snippet"
} >> "$RC"
echo "Добавлено в $RC"
fi
echo ""
echo "Подхватить сейчас: source $RC"
echo "Или в новом терминале:"
echo " exit-ru # интернет через RU (системный SOCKS)"
echo " exit-local # обратно на локальный IP"
echo " exit-verify # проверить IP через SOCKS"

View File

@@ -1,12 +1,26 @@
#!/usr/bin/env bash
# Переключение режима выхода в интернет через SSH SOCKS (macOS / Linux).
# См. docs/connectivity/vpn/SSH_EXIT_MODES.md
#
# Типичный кейс из‑за рубежа (RUсервисы режут иностранный IP):
# ./scripts/vpn/exit-via-ru.sh # SOCKS + системный прокси macOS → IP RU
# ./scripts/vpn/exit-via-local.sh # стоп туннелей + системный SOCKS off
set -e
SSH_EXIT_MAIN_PORT="${SSH_EXIT_MAIN_PORT:-10809}"
SSH_EXIT_STOP_PORTS="${SSH_EXIT_STOP_PORTS:-10809 1081 1082}"
SSH_EXIT_RU_HOST="${SSH_EXIT_RU_HOST:-hsites-ahau}"
# На macOS по умолчанию включаем системный SOCKS (Safari/Chrome и т.п.).
# Отключить: SSH_EXIT_SYSTEM_PROXY=0
if [ -z "${SSH_EXIT_SYSTEM_PROXY+x}" ]; then
if [ "$(uname -s)" = "Darwin" ]; then
SSH_EXIT_SYSTEM_PROXY=1
else
SSH_EXIT_SYSTEM_PROXY=0
fi
fi
SSH_EXIT_NET_SERVICE="${SSH_EXIT_NET_SERVICE:-Wi-Fi}"
SSH_SSH_STABLE_OPTS="-o TCPKeepAlive=yes -o IPQoS=throughput -o ServerAliveInterval=60 -o ServerAliveCountMax=4"
SSH_SSH_RU_OPTS="-o TCPKeepAlive=yes -o ServerAliveInterval=30 -o ServerAliveCountMax=6"
@@ -15,26 +29,60 @@ usage() {
Usage: $(basename "$0") COMMAND
local | off | stop Остановить SSH SOCKS на портах: $SSH_EXIT_STOP_PORTS
(трафик без SOCKS — ваш локальный публичный IP).
+ на macOS выключить системный SOCKS (если SSH_EXIT_SYSTEM_PROXY=1).
ru SOCKS 127.0.0.1:$SSH_EXIT_MAIN_PORT → выход с RU ($SSH_EXIT_RU_HOST).
+ на macOS включить системный SOCKS → браузер с IP RU.
ru-do SOCKS 127.0.0.1:$SSH_EXIT_MAIN_PORT → Mac → RU → DO → интернет
(telegram-socks-via-do). Без RU — ошибка (без прямого Mac→DO).
ru-do SOCKS 127.0.0.1:$SSH_EXIT_MAIN_PORT → Mac → RU → DO
(telegram-socks-via-do). Снаружи IP DO.
status Кто слушает порты из SSH_EXIT_STOP_PORTS.
status Порты + системный SOCKS (macOS).
verify Показать IP без SOCKS и через 127.0.0.1:$SSH_EXIT_MAIN_PORT.
verify IP без SOCKS и через 127.0.0.1:$SSH_EXIT_MAIN_PORT.
Env:
SSH_EXIT_MAIN_PORT Порт SOCKS для ru / ru-do (по умолчанию 10809).
SSH_EXIT_STOP_PORTS Порты для команды local (пробелы).
SSH_EXIT_RU_HOST Хост только-RU (по умолчанию hsites-ahau).
SSH_EXIT_MAIN_PORT Порт SOCKS (по умолчанию 10809).
SSH_EXIT_STOP_PORTS Порты для local (пробелы).
SSH_EXIT_RU_HOST Хост только-RU (по умолчанию hsites-ahau).
SSH_EXIT_SYSTEM_PROXY 1 = трогать системный SOCKS на macOS (по умолчанию 1 на Darwin).
SSH_EXIT_NET_SERVICE Сервис networksetup (по умолчанию Wi-Fi).
Требуется ~/.ssh/config: $SSH_EXIT_RU_HOST, telegram-socks-via-do (шаблон — docs/connectivity/PROXY_GUIDE.md).
Требуется ~/.ssh/config: $SSH_EXIT_RU_HOST, telegram-socks-via-do.
EOF
}
is_darwin() {
[ "$(uname -s)" = "Darwin" ]
}
system_proxy_wanted() {
[ "$SSH_EXIT_SYSTEM_PROXY" = "1" ] && is_darwin && command -v networksetup >/dev/null 2>&1
}
enable_system_socks() {
system_proxy_wanted || return 0
# PAC поверх SOCKS часто ломает выход — гасим.
networksetup -setautoproxystate "$SSH_EXIT_NET_SERVICE" off 2>/dev/null || true
networksetup -setsocksfirewallproxy "$SSH_EXIT_NET_SERVICE" 127.0.0.1 "$SSH_EXIT_MAIN_PORT"
networksetup -setsocksfirewallproxystate "$SSH_EXIT_NET_SERVICE" on
echo "Системный SOCKS ($SSH_EXIT_NET_SERVICE): 127.0.0.1:$SSH_EXIT_MAIN_PORT ON"
}
disable_system_socks() {
system_proxy_wanted || return 0
networksetup -setsocksfirewallproxystate "$SSH_EXIT_NET_SERVICE" off 2>/dev/null || true
echo "Системный SOCKS ($SSH_EXIT_NET_SERVICE): OFF"
}
print_system_socks() {
if ! is_darwin || ! command -v networksetup >/dev/null 2>&1; then
return 0
fi
echo "=== Системный SOCKS ($SSH_EXIT_NET_SERVICE) ==="
networksetup -getsocksfirewallproxy "$SSH_EXIT_NET_SERVICE" 2>/dev/null || true
}
stop_dynamic_tunnels() {
local p
for p in $SSH_EXIT_STOP_PORTS; do
@@ -51,8 +99,10 @@ stop_dynamic_tunnels() {
}
cmd_local() {
# Сначала снимаем системный SOCKS — иначе при мёртвом туннеле сеть «висит».
disable_system_socks
stop_dynamic_tunnels
echo "SSH SOCKS на портах ($SSH_EXIT_STOP_PORTS) остановлены. Выход в интернетс локального IP (если в приложениях отключён SOCKS-прокси)."
echo "SSH SOCKS на портах ($SSH_EXIT_STOP_PORTS) остановлены. Выход — с локального публичного IP."
}
ensure_port_free() {
@@ -66,17 +116,37 @@ ensure_port_free() {
sleep 0.3
fi
fi
if lsof -i :"$SSH_EXIT_MAIN_PORT" -sTCP:LISTEN -t >/dev/null 2>&1; then
if command -v lsof >/dev/null 2>&1 && lsof -i :"$SSH_EXIT_MAIN_PORT" -sTCP:LISTEN -t >/dev/null 2>&1; then
echo "Ошибка: порт $SSH_EXIT_MAIN_PORT всё ещё занят. Закройте процесс вручную или: $0 local"
exit 1
fi
}
wait_socks_ready() {
local i
for i in 1 2 3 4 5 6 7 8 9 10; do
if command -v lsof >/dev/null 2>&1; then
if lsof -i :"$SSH_EXIT_MAIN_PORT" -sTCP:LISTEN -t >/dev/null 2>&1; then
return 0
fi
else
sleep 0.5
return 0
fi
sleep 0.3
done
echo "Ошибка: SOCKS на :$SSH_EXIT_MAIN_PORT не поднялся." >&2
exit 1
}
cmd_ru() {
ensure_port_free
# shellcheck disable=SC2086
ssh -D "$SSH_EXIT_MAIN_PORT" -f -N $SSH_SSH_RU_OPTS "$SSH_EXIT_RU_HOST"
wait_socks_ready
enable_system_socks
echo "SOCKS 127.0.0.1:$SSH_EXIT_MAIN_PORT$SSH_EXIT_RU_HOST (выход с IP RU-прокси)."
echo "Проверка: $0 verify | в браузере: https://ipinfo.io (ожидается RU)"
}
cmd_ru_do() {
@@ -87,6 +157,8 @@ cmd_ru_do() {
fi
# shellcheck disable=SC2086
ssh -D "$SSH_EXIT_MAIN_PORT" -f -N $SSH_SSH_STABLE_OPTS telegram-socks-via-do
wait_socks_ready
enable_system_socks
echo "SOCKS 127.0.0.1:$SSH_EXIT_MAIN_PORT$SSH_EXIT_RU_HOST → DO (telegram-socks-via-do). Снаружи виден IP DO."
}
@@ -94,22 +166,24 @@ cmd_status() {
local p any=0
if ! command -v lsof >/dev/null 2>&1; then
echo "lsof не найден — статус портов недоступен."
exit 1
fi
for p in $SSH_EXIT_STOP_PORTS; do
if lsof -i :"$p" -sTCP:LISTEN -t >/dev/null 2>&1; then
echo "--- :$p ---"
lsof -i :"$p" -sTCP:LISTEN
any=1
else
for p in $SSH_EXIT_STOP_PORTS; do
if lsof -i :"$p" -sTCP:LISTEN -t >/dev/null 2>&1; then
echo "--- :$p ---"
lsof -i :"$p" -sTCP:LISTEN
any=1
fi
done
if [ "$any" = 0 ]; then
echo "Ни один из портов не слушает: $SSH_EXIT_STOP_PORTS"
fi
done
if [ "$any" = 0 ]; then
echo "Ни один из портов не слушает: $SSH_EXIT_STOP_PORTS"
fi
echo ""
print_system_socks
}
cmd_verify() {
echo "Без прокси (локальный выход):"
echo "Без прокси (локальный выход / curl игнорирует системный SOCKS):"
curl -sS --max-time 12 https://ipinfo.io/ip 2>/dev/null || echo "(ошибка curl)"
echo ""
echo "Через SOCKS socks5h://127.0.0.1:$SSH_EXIT_MAIN_PORT:"
@@ -118,6 +192,8 @@ cmd_verify() {
echo "Кратко через SOCKS (ip + страна):"
curl -sS --max-time 12 -x "socks5h://127.0.0.1:$SSH_EXIT_MAIN_PORT" https://ipinfo.io/json 2>/dev/null \
| sed -n 's/.*"ip": *"\([^"]*\)".*/IP: \1/p; s/.*"country": *"\([^"]*\)".*/country: \1/p' 2>/dev/null | head -4 || true
echo ""
print_system_socks
}
case "${1:-}" in