docs: describe same-interface STUN estimates and working endpoint addresses
This commit is contained in:
1 parent
f5d923a671
commit
8983026625
3 files changed
+23
-10
No files matched your search
@@ -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.
|
||||
@@ -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
@@ -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).
|
||||
Reference in new issue
Block a user