Files
local_machine/docs/connectivity/HOTSPOT_NETWORK_EMERGENCY.md

118 lines
4.1 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# Emergency: сеть после переподключения хотспота (macOS)
---
## Одна команда (из любой папки)
```bash
bash /Users/eternal/code/local_machine/docs/connectivity/scripts/macos-hotspot-network-recover.sh recover
```
Запросит **пароль sudo**, затем: PAC/SOCKS off → **DHCP**`ifconfig down`**`route -n flush`** → DNS → DHCP → **Joplin alias `*.100`**.
Диагностика:
```bash
bash /Users/eternal/code/local_machine/docs/connectivity/scripts/macos-hotspot-network-recover.sh status
```
---
## RCA (почему старый `recover` не помогал)
### 1. Ядерный сброс не выполнялся
Скрипт проверял `sudo -n` (passwordless). Без NOPASSWD в sudoers он **пропускал** `route flush` и делал только toggle WiFi — **недостаточно** при ARP `REJECT`.
Ручная «ядерная кнопка» работала, потому что вы вводили пароль и реально сбрасывали маршруты.
**Исправлено:** `recover` всегда вызывает `sudo` с запросом пароля.
### 2. Manual IPv4 на WiFi (Joplin) ломал маршрут
`/var/log/wifi.log` при reconnect:
```
IP Address: 10.219.227.100
Default Gateway IP Address: 10.219.227.39
No Router MAC Address
ROUTER_MAC_ADDR = 0x000000000000
```
В prefs оставался шлюз `10.219.227.39`, хотспот уже в `10.36.136.x``ping``Host is down`, `curl` мёртв.
**Исправлено:** WiFi **только DHCP**; Joplin — **alias** `<подсеть>.100` на `en0` (не трогает default route). См. [apps/joplin/STABLE_SETUP.md](./apps/joplin/STABLE_SETUP.md).
### 3. PAC / SOCKS (вторично)
PAC на `:1089` без сервера усиливает сбои, но **не объясняет** `ping 8.8.8.8 → No route to host`.
---
## Что делает `recover` сейчас
| Шаг | Действие |
|-----|----------|
| 1 | PAC off |
| 2 | SOCKS off |
| 3 | `networksetup -setdhcp Wi-Fi` (снимает Manual) |
| 4 | `sudo ifconfig en0 down` |
| 5 | `sudo route -n flush` |
| 6 | DNS flush + `ifconfig up` + `ipconfig DHCP` |
| 7 | Ждёт gateway (до 30 с) |
| 8 | `ifconfig en0 alias <subnet>.100` для Joplin |
---
## Ядерная кнопка (если скрипт недоступен)
```bash
sudo networksetup -setdhcp "Wi-Fi"
sudo ifconfig en0 down
sudo route -n flush
sudo dscacheutil -flushcache
sudo killall -HUP mDNSResponder
sudo ifconfig en0 up
sudo ipconfig set en0 DHCP
bash /Users/eternal/code/local_machine/docs/connectivity/scripts/macos-hotspot-network-recover.sh recover
```
---
## Диагностика
```bash
networksetup -getinfo "Wi-Fi"
ifconfig en0 | grep inet
route -n get default
bash /Users/eternal/code/local_machine/docs/connectivity/scripts/macos-hotspot-network-recover.sh status
./docs/apps/joplin/scripts/joplin-webdav-status.sh
grep -E 'Router MAC|No Router' /var/log/wifi.log | tail -5
```
| Признак | Причина |
|---------|---------|
| Manual + другая подсеть в gateway | Старый Joplin static |
| `No Router MAC` в wifi.log | ARP на шлюз не прошёл |
| `REJECT` в route get gateway | Нужен route flush |
| Primary DHCP OK, нет `*.100` alias | Запустить `recover` |
---
## Профилактика
1. **Не** использовать Manual WiFi для Joplin — только DHCP + alias.
2. После **каждого** reconnect: одна команда `recover` выше.
3. PAC on — только если на **1089** слушает сервер.
4. `exit-via-ru-do.sh`**после** рабочего `curl https://1.1.1.1`.
---
## Связанные документы
| Документ | Зачем |
|----------|--------|
| [apps/joplin/STABLE_SETUP.md](./apps/joplin/STABLE_SETUP.md) | DHCP + alias |
| [PROXY_EMERGENCY.md](./PROXY_EMERGENCY.md) | SSH / SOCKS |
| [README.md](./README.md) | Оглавление |