diff --git a/scripts/ru-bypass.sh b/scripts/ru-bypass.sh index 104222b..fe4cb9b 100644 --- a/scripts/ru-bypass.sh +++ b/scripts/ru-bypass.sh @@ -13,6 +13,7 @@ GATEWAY="${GATEWAY:-192.168.1.1}" DEV="${DEV:-wlp1s0}" +LOCAL_DNS="${LOCAL_DNS:-}" SETNAME="ru-direct" CACHE="/var/cache/ru-delegations.txt" IPSET_SAVE="/etc/ipset.conf" @@ -173,6 +174,18 @@ for net in $LOCAL_NETS; do ip route replace "$net" via "$GATEWAY" dev "$DEV" 2>/dev/null done +# --- DNS для *.loc через LOCAL_DNS (если задан) --- + +if [ -n "$LOCAL_DNS" ]; then + if command -v resolvectl >/dev/null 2>&1; then + resolvectl dns "$DEV" "$LOCAL_DNS" 2>/dev/null && \ + resolvectl domain "$DEV" "~loc" 2>/dev/null && \ + echo "DNS для *.loc → $LOCAL_DNS (интерфейс $DEV)" + else + echo "Предупреждение: resolvectl не найден, LOCAL_DNS=$LOCAL_DNS не применён" + fi +fi + # --- Правило в UFW before.rules (однократно, после создания ipset) --- UFW_MARKER="match-set $SETNAME" diff --git a/setup.sh b/setup.sh index 58d14a0..70f3927 100755 --- a/setup.sh +++ b/setup.sh @@ -46,18 +46,21 @@ case "$choice" in bash scripts/ai-setup.sh ;; 2) - echo -e "${GRY}Нужно указать два параметра твоей локальной сети:${CLR}" - echo -e "${GRY} GATEWAY — IP домашнего/офисного роутера (через него пойдёт .ru трафик напрямую)${CLR}" - echo -e "${GRY} DEV — сетевой интерфейс (wifi или провод), через который ты подключён к роутеру${CLR}" + echo -e "${GRY}Нужно указать параметры твоей локальной сети:${CLR}" + echo -e "${GRY} GATEWAY — IP домашнего/офисного роутера (через него пойдёт .ru трафик напрямую)${CLR}" + echo -e "${GRY} DEV — сетевой интерфейс (wifi или провод), через который ты подключён к роутеру${CLR}" + echo -e "${GRY} LOCAL_DNS — IP офисного DNS-сервера для разрешения *.loc доменов (необязательно)${CLR}" echo "" net_conf="$HOME/.config/ai-setup/network_$(hostname).conf" auto_gw=$(ip route show default 2>/dev/null | awk '/default/ {print $3; exit}') auto_dev=$(ip route show default 2>/dev/null | awk '/default/ {print $5; exit}') auto_gw="${auto_gw:-192.168.1.1}" auto_dev="${auto_dev:-wlp1s0}" + saved_local_dns="" if [ -f "$net_conf" ]; then saved_gw=$(grep '^GATEWAY=' "$net_conf" | cut -d= -f2) saved_dev=$(grep '^DEV=' "$net_conf" | cut -d= -f2) + saved_local_dns=$(grep '^LOCAL_DNS=' "$net_conf" | cut -d= -f2) auto_gw="${saved_gw:-$auto_gw}" auto_dev="${saved_dev:-$auto_dev}" echo -e "Загружены сохранённые параметры для ${BLD}$(hostname)${CLR}: GATEWAY=${BLD}${auto_gw}${CLR} DEV=${BLD}${auto_dev}${CLR}" @@ -66,14 +69,17 @@ case "$choice" in fi echo -e "${GRY}(просто Enter чтобы принять, или введи другое значение)${CLR}" echo "" - read -rp "GATEWAY (IP роутера) [${auto_gw}]: " gw - read -rp "DEV (интерфейс) [${auto_dev}]: " dev + read -rp "GATEWAY (IP роутера) [${auto_gw}]: " gw + read -rp "DEV (интерфейс) [${auto_dev}]: " dev + read -rp "LOCAL_DNS (DNS для *.loc) [${saved_local_dns:-пусто}]: " local_dns gw="${gw:-$auto_gw}" dev="${dev:-$auto_dev}" + [ "$local_dns" = "пусто" ] && local_dns="" + local_dns="${local_dns:-$saved_local_dns}" mkdir -p "$HOME/.config/ai-setup" - printf 'GATEWAY=%s\nDEV=%s\n' "$gw" "$dev" > "$net_conf" + printf 'GATEWAY=%s\nDEV=%s\nLOCAL_DNS=%s\n' "$gw" "$dev" "$local_dns" > "$net_conf" echo "" - sudo GATEWAY="$gw" DEV="$dev" bash scripts/ru-bypass.sh + sudo GATEWAY="$gw" DEV="$dev" LOCAL_DNS="$local_dns" USER_HOME="$HOME" bash scripts/ru-bypass.sh ;; 3) echo -e "${YEL}Перед этим выйди из Claude Code — сессия сменит IP.${CLR}"