Document grouped control, isolated helper ports and ingress correlation
This commit is contained in:
1 parent
179aa0ef35
commit
2ba011d3fd
2 files changed
+34
-22
No files matched your search
+28
-19
@@ -23,23 +23,29 @@ DEPENDENT означает различие mapping на испытанных н
|
||||
UDP-раунд
|
||||
---------
|
||||
|
||||
1. Владелец A выбирает живого наблюдателя B с доступным native UDP endpoint.
|
||||
1. Владелец A рассматривает узлы всех активных UTUN/CHAT-групп и выбирает одну группу
|
||||
с маршрутами к наблюдателю B и отдельному помощнику C. Следующие хопы управления
|
||||
должны быть READY. Прямые ETCP/UDP-линки к B/C не обязательны; B нужен доступный UDP endpoint.
|
||||
Через проверяемый сокет S выполняет OBSERVE. Ответ содержит фактический
|
||||
source IP:port, наблюдаемый B, и исходный тег S/generation/round.
|
||||
2. Через уже установленный ETCP к B запрашивает поиск помощника C.
|
||||
B выбирает C из своих работающих UDP-пиров и возвращает его ключ и endpoint.
|
||||
Собственный подтверждённый NAT-профиль B/C не требуется: иначе bootstrap
|
||||
зависел бы от уже завершённой детекции. Пригодность подтверждают реальные пробы.
|
||||
3. Если внешний IP C совпадает с IP B, A исключает C и командует B искать
|
||||
следующего помощника. Совпадающие Node ID и разные порты одного IP не дают
|
||||
source IP:port, наблюдаемый B, и исходный тег S/generation/round/group.
|
||||
2. A выбирает C по подписанному NODEINFO выбранной группы. Его рабочий UDP-сокет
|
||||
задаёт интерфейс/семейство; C использует два отдельных probe_only порта,
|
||||
чтобы помощь другому узлу не открывала фильтр его собственного рабочего endpoint.
|
||||
C может находиться за NAT, независимо от политики PUBLIC/NAT и собственного профиля.
|
||||
3. Управление RUN/RESULT идёт A -> B -> C через router в одной группе с подписью
|
||||
и шифрованием. C сначала отправляет ADDRESS_CHECK с primary-порта к endpoint A,
|
||||
реально наблюдавшемуся B. Аутентичный ingress на S до исходящего контакта подтверждает OPEN.
|
||||
PONG возвращает наблюдаемый внешний endpoint C. При отсутствии PONG C узнаёт mapping
|
||||
своего primary-порта через B, после чего выполняется контролируемый PRE из трёх проб.
|
||||
4. Если внешний IP C совпадает с IP B или S ранее контактировал с C, A пробует
|
||||
другие пары и группы. Совпадающие Node ID и разные порты одного IP не дают
|
||||
независимого IP-наблюдения. При отсутствии второго IP результат неполный.
|
||||
4. Для входящего испытания выбирается C, с IP которого S ранее не контактировал.
|
||||
Все команды C идут A -> B -> C. До первого испытания A не шлёт UDP к C.
|
||||
C отправляет три аутентифицированные ADDRESS_CHECK к endpoint из наблюдения B.
|
||||
A регистрирует фактический ingress на S; один отчёт о PONG не заменяет ingress.
|
||||
5. После завершения первого испытания S выполняет OBSERVE к основному порту C,
|
||||
затем к другому UDP-порту того же помощника. Вспомогательный порт принадлежит
|
||||
наблюдателю, скрыт из NODEINFO и исключён из NCD. Проверяемый S не меняется.
|
||||
При выборе пары сначала сохраняется возможность свежего помощника; ранее контактировавшая
|
||||
пара используется для mapping после исчерпания свежих. Отчёт о PONG не заменяет ingress на S.
|
||||
5. После первого испытания S выполняет OBSERVE к primary C. При различии mapping
|
||||
с B уже известен DEPENDENT. Иначе C отдельно измеряет внешний endpoint второго порта
|
||||
через A; если фильтр A мешает — через B. S выполняет OBSERVE к этому endpoint.
|
||||
Оба порта C скрыты из NODEINFO и исключены из NCD. Проверяемый S не меняется.
|
||||
6. Если первый ingress отсутствовал, C здоров и mapping к C совпал с mapping к B,
|
||||
после исходящего контакта выполняется второе входящее испытание от того же C.
|
||||
Контролируемый переход до/после контакта даёт CONTACT_REQUIRED.
|
||||
@@ -100,14 +106,17 @@ listener удалённого клиента. SOCKS5 UDP не классифиц
|
||||
как контекст другого типа. Произвольный выбор первого IPv4/TCP-сокета запрещён.
|
||||
|
||||
Broker принимает RUN только для записанного им UDP-наблюдения данного владельца.
|
||||
Размер wire, версия, enum, границы списка исключений и ненулевые поколения/раунды
|
||||
проверяются до обработки. Числа новых сообщений — BE, IP — сетевые байты.
|
||||
owner_key и helper_key имеют разные поля и никогда не меняют значение по роли.
|
||||
Участники и ключи берутся из подписанного реестра выбранной группы. SOURCE читается
|
||||
из проверенного router-заголовка, не из ETCP next hop. Управление занимает 136 байт,
|
||||
не содержит списков исключений и копий ключей. Размер, версия, enum и ненулевые
|
||||
group/generation/round/token проверяются до обработки. Числа BE, IP — сетевые байты.
|
||||
|
||||
На смене адреса, закрытии сокета, reset/DELETE транспорта и остановке ядра
|
||||
отменяются собственные раунды и связанные helper jobs. Поздние ответы не
|
||||
применяются к новому socket generation даже при повторном ID и IP:port.
|
||||
Детектор останавливается до разборки групп, сокетов и соединений.
|
||||
Удаление выбранной группы отменяет её раунды, jobs и наблюдения до закрытия router-каналов;
|
||||
другие группы и последний успешный профиль сохраняются. Детектор останавливается
|
||||
до разборки групп, сокетов и соединений.
|
||||
|
||||
Публикация и NCD
|
||||
---------------
|
||||
|
||||
Reference in new issue
Block a user