feat(nat): confirm direct open profile from accepted public connections
This commit is contained in:
1 parent
37e092672a
commit
df2f6ff300
3 files changed
+47
-7
No files matched your search
@@ -2,13 +2,15 @@
|
||||
* Результат — address_profile с двумя независимыми свойствами:
|
||||
* mapping: UNCHANGED — адрес не меняется; EIM — внешний IP:порт одинаков для разных IP назначения;
|
||||
* DEPENDENT (strict) — внешний IP:порт зависит от IP назначения.
|
||||
* inbound: OPEN — пакеты от незнакомого IP проходят; CONTACT — проходят после исходящего контакта (оценка filtered).
|
||||
* inbound: OPEN — подтверждён вход; CONTACT — пакеты проходят после исходящего контакта (оценка filtered).
|
||||
* Принятое UDP/TCP-подключение с публичными локальным и удалённым IP сразу даёт UNCHANGED+OPEN (direct/open).
|
||||
* Для этого правила прежний исходящий контакт с IP пира не препятствие; LAN и SOCKS его не подтверждают.
|
||||
* UNKNOWN в любом свойстве означает, что данных для его определения пока недостаточно.
|
||||
* Одно соединение может подтвердить NAT-адрес: он сохраняется в socket->nat_addr с типом UNKNOWN
|
||||
* и публикуется как NAT-кандидат. Это не адрес интерфейса и не подтверждение открытого входа.
|
||||
* Для UDP сочетания EIM+OPEN и EIM+CONTACT означают eim open и eim filtered.
|
||||
* Для TCP непубличный локальный IP сразу означает NAT; публичный IP сравнивается с наблюдением одного пира.
|
||||
* TCP не определяет тип NAT/входящие: сохраняет внешний IP с портом 0, непригодным для подключения.
|
||||
* TCP не запускает активных проб входа: OPEN даёт только принятое подключение; внешний IP сохраняется с портом 0.
|
||||
* EIM+UNKNOWN отображается как EIM?: внешний адрес совпал, незнакомый вход не удалось проверить.
|
||||
* Если своего измерения mapping нет, совпадение у двух STUN-серверов на том же IP/интерфейсе даёт предварительный EIM?.
|
||||
* Его source=STUN, inbound=UNKNOWN; внешний порт берётся только из наблюдения рабочего сокета, а не из STUN.
|
||||
@@ -95,7 +97,9 @@ int nat_detection_ping_allowed(struct NAT_DETECTION *detector, struct ETCP_SOCKE
|
||||
const uint8_t peer_key[32], const struct sockaddr_storage *source,
|
||||
uint8_t flags, const uint8_t *tag, size_t length);
|
||||
|
||||
/* Сообщить о готовности link; при отсутствии результата запланировать измерение его локального сокета. */
|
||||
/* Сообщить о готовности link после UDP INIT или STCP handshake. Принятый вход с двумя публичными IP
|
||||
* подтверждает direct/open у принимающего сокета; иначе при отсутствии результата планируется измерение.
|
||||
* Для TCP фактический локальный IP должен совпадать с IP интерфейса этого сокета. */
|
||||
void nat_detection_link_ready(struct NAT_DETECTION *detector, struct ETCP_LINK *link);
|
||||
|
||||
/* Сообщить об утрате/перезапуске connection; запланировать пересмотр маршрутов и отмену зависимых проверок при их потере. */
|
||||
|
||||
Reference in new issue
Block a user