nat: finish observer-only rounds and document unknown-type candidates

This commit is contained in:
evgeny committed 2026-10-17 17:50:28 +02:00
1 parent 71abf74bfc
commit 37461bb938
3 files changed
+11 -1

No files matched your search

+8
View File
@@ -60,6 +60,14 @@ eim filtered — внешний IP:порт одинаковый, серия п
Известный тип NAT можно сохранить, даже если входящие проверить не удалось.
Таймаут и отсутствие подходящих узлов сами по себе не означают strict.
Если один пир уже увидел публичный IP:порт, отличный от локального, этот адрес
сразу сохраняется как NAT с type=UNKNOWN. Он публикуется отдельно от адреса
интерфейса и остаётся кандидатом для пробного подключения: одного наблюдения
недостаточно, чтобы обещать тот же адрес для других IP или открытый вход.
Уже знакомый помощник пригоден для измерения типа NAT, хотя проверить незнакомый
вход через него нельзя. Потеря результата входящих не останавливает сравнение
адресов через доступные публичные узлы; ожидание одного этапа ограничено по времени.
Соединения по LAN работают независимо и не сбрасывают интернет-профиль.
Если доступны только локальные узлы, определить интернет-NAT нельзя.
Результат относится к проверенному UDP-сокету: проверка STUN с другого порта
+1 -1
View File
@@ -770,7 +770,7 @@ static void owner_ping_cb(int success, uint16_t rtt, void *arg, uint64_t nonce,
!route_ping_addr_equal(&state->measured_address, &observed, 1)))
clear_profile(state, NAT_REASON_ADDRESS_CHANGED);
remember_address(state, &observed);
if (!state->helper) { owner_finish(state, NAT_REASON_NO_HELPER); return; }
if (!state->helper) { state->cycling = 0; owner_finish(state, NAT_REASON_NO_HELPER); return; }
if (owner_run(state, NAT_STEP_PREPARE)) owner_finish(state, NAT_REASON_CONTROL_LOST);
return;
}
+2
View File
@@ -4,6 +4,8 @@
* DEPENDENT (strict) — внешний IP:порт зависит от IP назначения.
* inbound: OPEN — пакеты от незнакомого IP проходят; CONTACT — проходят после исходящего контакта (оценка filtered).
* UNKNOWN в любом свойстве означает, что данных для его определения пока недостаточно.
* Одно соединение может подтвердить NAT-адрес: он сохраняется в socket->nat_addr с типом UNKNOWN
* и публикуется как NAT-кандидат. Это не адрес интерфейса и не подтверждение открытого входа.
* Для UDP сочетания EIM+OPEN и EIM+CONTACT означают eim open и eim filtered. TCP-вход проверяется отдельно.
* create(instance) запускает автоматические асинхронные проверки через доступные узлы сети.
* get_status(detector, socket, &status) возвращает результат в status.effective_profile и ход проверки в остальных полях.