Files
knowledge-base/claude-memory/mas-niikn.md
2026-04-19 12:00:42 +00:00

7.9 KiB
Raw Blame History

MAS НИИКН — ОТКАЧЕН 2026-03-05

Статус MAS: ОТКАЧЕН (snapshot rollback)

  • Proxmox snapshot pre-mas-deploy → восстановлен на VM 107
  • msc4108_enabled: изменён на false в homeserver.yaml (без MAS вызывает краш Synapse)
  • NPM server_proxy.conf удалён с LXC 102
  • Nextcloud OIDC: восстановлен client "Matrix Synapse" с redirect /_synapse/client/oidc/callback

Nextcloud Talk (VM 108, 192.168.1.200) — РАБОТАЕТ

  • TURN: niikn.com:3479, secret: ebf6a8ce0fd1629c2da55356169feea7ab118a18368c2550
  • STUN: stun.nextcloud.com:443 + niikn.com:3479
  • Signaling: https://niikn.com/standalone-signaling/
  • eturnal (TURN) внутри NC AIO Docker (172.18.0.4:3479)
  • Janus (WebRTC SFU) внутри того же контейнера

Исправление: Janus nat_1_1_mapping для внешних звонков

  • Проблема: Janus рекламировал Docker-внутренние IP (172.18.0.4, fd74:...) как ICE кандидаты
  • Внешние клиенты (iPhone по сотовой) не могли установить WebRTC соединение — ICE failed
  • Решение: nat_1_1_mapping = "85.235.181.190" и rtp_port_range = "20000-20100" в janus.jcfg
  • eturnal: relay_ipv4_addr: "85.235.181.190" (вместо контейнерного IP)
  • Контейнер read-only rootfs → конфиг копируется в /tmp, Janus перезапускается с /tmp/janus.jcfg
  • Убран --full-trickleс ним ICE-кандидаты терялись из-за race condition в сигнальном сервере
    • С full-trickle: кандидаты отправляются отдельно от SDP → "No MCU subscriber found" → потеряны
    • Без full-trickle (half-trickle): кандидаты включены в SDP → доставляются надёжно
  • Автопатч: /opt/talk-janus-patch.sh + systemd talk-janus-patch.service (enabled)
  • Скрипт: ждёт контейнер → iptables DNAT+MASQUERADE → патчит eturnal.yml → копирует/патчит janus.jcfg → перезапускает Janus без --full-trickle → убивает signaling (supervisord рестартит)

Текущее состояние Talk (2026-03-05) — ТРЕБУЕТ ДОРАБОТКИ

  • Janus PID 9576: half-trickle, nat_1_1_mapping=85.235.181.190, /tmp/janus.jcfg
  • Signaling PID 12313: свежий, подключён к Janus на ws://127.0.0.1:8188
  • Supervisord (PID 7) управляет eturnal, nats, signaling; Janus запущен вручную (supervisord сдался после 3 попыток)
  • iptables на VM 200: DNAT+FORWARD+MASQUERADE для UDP 20000:20100 и 49152:49252 → 172.18.0.4

Нерешённые проблемы

  1. DTLS alert/timeout — subscriber/publisher получают hangup (DTLS alert), вызов переподключается
    • tcpdump подтвердил: RTP-пакеты доходят до контейнера, но DTLS handshake не завершается
    • Может быть связано с MTU на сотовой сети или фрагментацией DTLS
  2. "The user is not invited to this room" — после перезапуска signaling старые токены клиентов невалидны
    • Решение: обоим участникам нужно перезагрузить страницу (F5) для получения свежего токена
    • Нужно проверить работает ли после перезагрузки страниц
  3. Supervisord не управляет нашим Janus — при краше Janus не перезапустится автоматически
    • Supervisord запускает оригинальный Janus с --full-trickle и без nat_1_1_mapping
    • Наш Janus запущен через docker exec -d — без автоперезапуска
    • Нужно: либо модифицировать supervisord.conf (но rootfs read-only), либо обёртка-watchdog

Что нужно сделать при возврате

  • Попросить пользователя перезагрузить страницы обоих клиентов и протестировать звонок
  • Если DTLS всё ещё падает — попробовать dtls_mtu = 1200 в janus.jcfg
  • Решить проблему автоперезапуска Janus (watchdog или модификация /supervisord.conf в /tmp)
  • Проверить звонки LAN↔LAN, LAN↔сотовая, сотовая↔сотовая
  • Обновить /opt/talk-janus-patch.sh если нужно после тестов

Исправление: Netbird VPN ломал внешний доступ к Talk

  • Проблема: Netbird VPN (wt0) перехватывал весь внешний трафик через таблицу маршрутизации netbird
  • Пакеты SYN приходили через ens18 (MikroTik), но SYN-ACK уходили через wt0 (Netbird) — асимметричный роутинг
  • Диагностика: tcpdump на bridge показал что контейнер отвечает SYN-ACK, но они не доходят до ens18
  • ip route get 194.26.100.165 → показывал dev wt0 table netbird вместо dev ens18
  • Решение: ip rule add from 172.18.0.0/16 lookup main priority 104
  • Постоянный скрипт: /etc/networkd-dispatcher/routable.d/50-docker-routing.sh
  • После исправления порт 3479 открыт из Канады, Индии, Нидерландов, Турции

MikroTik NAT правила (192.168.1.1) — ДЕЙСТВУЮЩИЕ

  • Talk-TURN-TCP: dstnat 85.235.181.190:3479 → 192.168.1.200:3479
  • Talk-TURN-UDP: dstnat 85.235.181.190:3479 → 192.168.1.200:3479
  • Janus-RTP-UDP: dstnat 85.235.181.190:20000-20100 → 192.168.1.200
  • TURN-relay-UDP: dstnat 85.235.181.190:49152-49252 → 192.168.1.200
  • Hairpin Talk TURN TCP/UDP: srcnat masquerade 192.168.1.0/24 → 192.168.1.200:3479
  • Matrix TURN TCP/UDP: dstnat 3478 → 192.168.1.133:3478
  • Matrix Federation: dstnat 8448 → 192.168.1.133:8448
  • Hairpin TURN dstnat/srcnat TCP/UDP: для 192.168.1.0/24 → 85.235.181.190:3478 → 192.168.1.133

VM 200 UFW — открытые порты

  • 22/tcp, 3479/tcp+udp, 49152:49252/udp, 20000:20100/udp — from Anywhere
  • 11000 — from 192.168.1.22 (NPM)
  • 80, 8080, 8443, 8000, 9443, 3389, 3390 — LAN only
  • Tailscale/Netbird (wt0) — all traffic

Element X / Element Call (2026-03-05)

  • well-known /.well-known/matrix/client обновлён через NPM advanced_config (proxy host #18)
  • Добавлено: "org.matrix.msc4143.rtc_foci": [] — mesh mode (P2P без SFU)
  • Для групповых звонков нужен LiveKit SFU (не развёрнут)
  • homeserver.yaml НЕ изменён (SSH к VM 107 заблокирован fail2ban)
  • Также: msc4108_enabled: false — QR-вход отключен (требует MAS)

SSH доступ к VM 107 (2026-03-05) — ПРОБЛЕМА

  • fail2ban забанил IP 10.0.0.237 (jump host) и 192.168.1.200 (VM 200)
  • Порт 22 открыт (SSH banner отдаётся), но пароль отклоняется
  • QEMU guest agent не установлен — Proxmox API exec не работает
  • sshpass не установлен на Proxmox хосте (192.168.1.201)
  • Решение: нужно разбанить IP через Proxmox console (noVNC/SPICE) или ждать expiry

Данные MAS (для возможного повторного развёртывания)

  • DB: mas/MASniikn2026
  • Matrix secret: 60pMasWfQd8XUyxix932yIxsweyCG89x
  • Полный конфиг: /root/mas-config.yaml
  • syn2mas: 97 пользователей, 2 с паролями, 2 с OAuth