118 lines
4.1 KiB
Markdown
118 lines
4.1 KiB
Markdown
# 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 Wi‑Fi — **недостаточно** при ARP `REJECT`.
|
||
|
||
Ручная «ядерная кнопка» работала, потому что вы вводили пароль и реально сбрасывали маршруты.
|
||
|
||
**Исправлено:** `recover` всегда вызывает `sudo` с запросом пароля.
|
||
|
||
### 2. Manual IPv4 на Wi‑Fi (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` мёртв.
|
||
|
||
**Исправлено:** Wi‑Fi **только 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 Wi‑Fi для 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) | Оглавление |
|