docs: describe same-interface STUN estimates and working endpoint addresses

This commit is contained in:
evgeny committed 2026-10-17 18:47:41 +02:00
1 parent f5d923a671
commit 8983026625
3 files changed
+23 -10

No files matched your search

+8 -2
View File
@@ -56,6 +56,12 @@ eim filtered — внешний IP:порт одинаковый, серия п
EIM? — два направления видят одинаковый внешний IP:порт, но незнакомый вход
проверить не удалось, например все доступные помощники уже были знакомы.
Это EIM с неизвестной доступностью входящих, без обещания открытого входа.
Такой же предварительный EIM? дают два STUN-сервера, видящие одинаковый внешний
IP:порт тестового сокета на том же локальном IP и интерфейсе. Поддержка запроса
с незнакомого IP для этого не нужна. Источник оценки — STUN, вход остаётся UNKNOWN.
Измерение рабочего сокета имеет приоритет; STUN-оценка действует до пяти минут
и обновляется автоматически. Публичный порт для подключения берётся только
из наблюдения рабочего сокета: внешний порт STUN в него не подставляется.
Если внешний IP:порт совпадает с локальным, отдельно отмечается отсутствие
трансляции адреса. Доступность входящих всё равно проверяется.
@@ -74,5 +80,5 @@ EIM? — два направления видят одинаковый внеш
Соединения по LAN работают независимо и не сбрасывают интернет-профиль.
Если доступны только локальные узлы, определить интернет-NAT нельзя.
Результат относится к проверенному UDP-сокету: проверка STUN с другого порта
и работа TCP не заменяют это измерение.
STUN на другом порту даёт предварительную оценку типа NAT для того же IP/интерфейса.
Работа TCP не заменяет проверку UDP.
+4 -2
View File
@@ -23,8 +23,10 @@ ID и время измерения не передаются: последни
адрес `TOPO_ADDR_NAT` при `mapping=UNKNOWN`, `inbound=UNKNOWN`: это NAT-кандидат
для пробного подключения, а не адрес интерфейса или подтверждённый открытый вход.
Общий внешний адрес подтверждает EIM; strict не публикует универсальный NAT-адрес.
Source входит в подпись; SOCKMETA занимает 5 байт. STUN другого порта остаётся
отдельной диагностикой и не назначает профиль или внешний адрес рабочего сокета.
Source входит в подпись; SOCKMETA занимает 5 байт. `source=STUN` означает предварительный
EIM? для того же локального IP/netif с неизвестным входом; измерение ETCP приоритетно.
Владелец снимает STUN-оценку после TTL. Внешний адрес тестового порта не публикуется:
NAT-кандидат по-прежнему требует наблюдения рабочего сокета.
Таблица `node_snapshots` хранит полную сериализованную запись без группового
окружения. `node_addresses` остаётся проекцией для поиска и отображения, а не
+11 -6
View File
@@ -5,11 +5,15 @@
Для каждой группы создаётся один собственный неблокирующий UDP-сокет с тем же локальным IP,
привязкой к устройству и Linux SO_MARK / FreeBSD FIB. Тестовый порт выбирается случайно из 49152–65535.
Модуль сам регистрирует чтение в uasync, принимает STUN и закрывает свой сокет после измерения.
STUN не меняет исходный ETCP fd, его порт и обработчики. Результат остаётся независимой
диагностикой IP/netif через `stun_nat` API. Он не назначает mapping/inbound рабочему сокету
даже при NO_OBSERVER/NO_HELPER: поведение NAT на другом порту может отличаться.
Ни профиль, ни mapped endpoint тестового порта не переносятся в `nat_addr` или NODEINFO
рабочего сокета. Детектор рабочего endpoint описан в `doc/nat_detection.txt`.
STUN не меняет исходный ETCP fd, его порт и обработчики. Через `stun_nat` API модуль
`nat_detection` получает предварительную оценку для рабочих сокетов того же IP/netif
с совпадающими mark/FIB/device. Если два разных IP видят одинаковый стабильный внешний
IP:порт и есть трансляция адреса, рабочий профиль получает EIM? с source=STUN и inbound=UNKNOWN.
Это действует и для обычных серверов без запроса с незнакомого IP. Filtering тестового порта
не переносится; измерение mapping рабочего сокета всегда имеет приоритет.
Оценка снимается после TTL, отключения STUN, смены пути или противоречащего внешнего IP.
Тестовый mapped endpoint не копируется в `nat_addr` и NODEINFO: адрес для подключения
должен быть получен наблюдением самого рабочего сокета. Детектор описан в `doc/nat_detection.txt`.
## Конфигурация
@@ -94,6 +98,7 @@ DEBUG содержит этапы, transaction ID, повторы, RTT, DNS и
Linux-тест `test_stun_nat` использует реальные локальные UDP-сокеты и ускоренные часы:
обычный STUN, все классы RFC 5780, недоступные альтернативы, потеря запроса, неверные/поздние ответы,
резервные серверы, DNS, нестабильный mapping, отмена и повторная проверка, изменение состава сокетов.
Каждый сценарий проверяет неизменность исходного ETCP-сокета и освобождение таймеров.
Сценарии проверяют сохранность рабочего fd/порта, предварительный EIM?, приоритет ETCP,
снятие оценки после TTL, совпадение IP/netif и освобождение таймеров.
Ссылки: [RFC 5780](https://www.rfc-editor.org/rfc/rfc5780), [STUN RFC 8489](https://www.rfc-editor.org/rfc/rfc8489).