unifi: adoption свитча+U7-LR; фикс system_ip override + DNS unifi, host-mode откатан

- U7-LR не виделся = битый порт 5 свитча (PoE есть, линк down) -> порт 8
- stuck 'Принятие' = Docker bridge отдавал внутренний IP -> system_ip=10.0.0.196
- DNS unifi->10.0.0.196 на OpenWrt для автообнаружения
- host networking сломал mongo-URI кэш + автодетект IP, откатан на bridge
- USG физически не в сети (0 следов в БД)

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
dttb
2026-06-15 16:18:18 +03:00
parent 28b136cc8b
commit 35d58a687a

View File

@@ -55,7 +55,30 @@ pct exec 140 -- bash -c 'cd /opt/unifi && docker compose restart'
pct exec 140 -- bash -c 'cd /opt/unifi && docker compose pull && docker compose up -d' # апдейт
```
## Adoption устройств (2026-06-15, позже в тот же день)
Принимали **USW-Lite-16-PoE** (10.0.0.111) и **U7-LR**. Грабли:
### U7-LR не появлялся — физика порта свитча
Точка была в **порту 5** свитча: PoE подавался (Class 4, 4.41 Вт), но **линк down**, 0 пакетов, DHCP не получала; после передёргивания PoE детект вообще пропал (Class Unknown). → **битый порт/патч-корд**. Переткнули в **порт 8** — ожила: IP 10.0.0.243, линк 1000F, firmware 8.0.12. Вывод: «питание есть, а линка нет» = сначала кабель/порт, не контроллер.
### Stuck «Принятие» + ничего не автообнаруживается — Docker inform-host
Контроллер в Docker **bridge** отдавал устройствам inform-host = свой внутренний IP контейнера (`172.18.0.x`), до которого устройства не достучаться → adoption висит. Плюс заводская точка ищет `http://unifi:8080/inform`, а DNS-записи `unifi` не было.
**Фикс (рабочий, оставлен):**
1. **DNS на OpenWrt 10.0.0.1**: `uci add dhcp domain``name=unifi ip=10.0.0.196` → commit + `dnsmasq restart`. Теперь заводские устройства сами находят контроллер (как на Передельках).
2. **`system_ip=10.0.0.196`** в `/opt/unifi/config/data/system.properties` (был закомментирован `# system_ip=a.b.c.d`) + `docker restart unifi-network-application`. В логе стало `Current System IP: 10.0.0.196` (было `172.18.0.3`). Контроллер теперь отдаёт верный inform-host.
3. `set-inform http://10.0.0.196:8080/inform` на устройствах (ssh ubnt/ubnt) для немедленного появления.
Результат: оба `adopted:true` (проверено `docker exec unifi-db mongo unifi --eval 'db.device.find(...)'`).
### ⚠️ host networking НЕ применять (пробовал — откатил)
Переводил оба контейнера в `network_mode: host`**сломалось**:
- linuxserver-образ кэширует mongo-URI в `system.properties` при первом старте и НЕ перечитывает env → в host остался `unifi-db:27017` (не резолвится) → `MongoTimeoutException`, краш-луп.
- контроллер в host автодетектил `Current System IP: 172.18.0.1` (docker-бридж), не 10.0.0.196.
Правильное решение — **оставить bridge + `system_ip` override**, а не host. Бэкап bridge-compose: `/opt/unifi/docker-compose.yml.bak-bridge-*`.
## Что осталось / на заметку
- Контроллер пустой — устройств UniFi в домашней сети (10.0.0.0/24) пока нет (роутер — OpenWrt). Готов к adopt новых AP/switch.
- Для adopt устройств из других подсетей — set-inform на UI или DNS `unifi → <ip>` (как на Передельках).
- **USG не adopt'ится — его физически нет в сети** (нет DHCP-аренды, нет на живых портах свитча, в БД контроллера 0 следов). Сначала запитать/воткнуть в живой порт; как появится — с DNS `unifi` + `system_ip` примется сам.
- `.196` — статика; убедиться, что вне DHCP-пула OpenWrt.
- При смене IP контроллера — обновить и DNS `unifi`, и `system_ip`.