Document signed profile source and reproducible isolated STUN bench
This commit is contained in:
1 parent
138b31a519
commit
03cecbc9e6
3 files changed
+23
-2
No files matched your search
@@ -9,6 +9,7 @@ dist_license_DATA = LICENSE LICENSING THIRD_PARTY_NOTICES
|
||||
|
||||
EXTRA_DIST = readme.md \
|
||||
doc/nat_detection.txt \
|
||||
doc/stun_nat.md \
|
||||
doc/node_snapshot.md \
|
||||
tinycrypt/LICENSE \
|
||||
tools/chatgui/zxing-cpp/LICENSE \
|
||||
|
||||
@@ -13,12 +13,15 @@
|
||||
8-битный `ver` сохраняется как диагностический счётчик; свежесть определяется
|
||||
только timestamp.
|
||||
|
||||
Профиль endpoint в SOCKMETA содержит независимые `mapping` и `inbound`,
|
||||
Профиль endpoint в SOCKMETA содержит независимые `mapping` и `inbound`, источник `source`,
|
||||
`evidence_id` и `checked_at`. Последние относятся к измерению владельца,
|
||||
а не к версии всего NODEINFO: повтор записи или изменение имени не продлевает
|
||||
измерение. Новые поля профиля на проводе кодируются явными BE-байтами;
|
||||
границы списков metadata/адресов/REALITY также входят в каноническую подпись.
|
||||
Алгоритм и условия неопределённости описаны в `doc/nat_detection.txt`.
|
||||
`source=ETCP` обозначает измерение рабочего endpoint, `source=STUN` — резервную оценку
|
||||
по IP/netif с другого порта. Source входит в подпись; SOCKMETA занимает 21 байт.
|
||||
STUN mapped endpoint не публикуется как внешний адрес рабочего сокета.
|
||||
|
||||
Таблица `node_snapshots` хранит полную сериализованную запись без группового
|
||||
окружения. `node_addresses` остаётся проекцией для поиска и отображения, а не
|
||||
@@ -27,7 +30,7 @@ snapshot загрузка использует его. Локальная пуб
|
||||
ошибка сохранения не разрешает публикацию новой версии.
|
||||
|
||||
В проекции адресов сохраняются `nat_mapping`, `nat_inbound`, `nat_evidence`,
|
||||
`nat_checked`, `address_kind`. Уникальность определяется endpoint и видом адреса,
|
||||
`nat_checked`, `nat_source`, `address_kind`. Уникальность определяется endpoint и видом адреса,
|
||||
а не отображаемым классом NAT. Старый производный формат пересоздаётся;
|
||||
bootstrap-загрузка без подписанного snapshot не подтверждает NAT-профиль.
|
||||
|
||||
|
||||
@@ -22,6 +22,23 @@ python3 tests/stream_netns/run.py
|
||||
python3 tests/stream_netns/run.py --nat-only --tcp
|
||||
```
|
||||
|
||||
Резервное определение типа STUN на отдельных портах и переход к измерению ETCP:
|
||||
|
||||
```sh
|
||||
python3 tests/stream_netns/run.py --stun-only --output /tmp/stun-interface-netns
|
||||
```
|
||||
|
||||
Два RFC5780-сервера работают на двух реальных публичных IP, каждый с двумя UDP-портами.
|
||||
По очереди проверяются n03 (cone), n14 (restricted) и n05 (dependent mapping).
|
||||
Два рабочих порта одного IP/netif используют одну STUN-пробу. Сначала у владельца
|
||||
нет ETCP-пиров, затем появляется один наблюдатель, затем независимый помощник.
|
||||
Проверяются source=STUN -> source=ETCP, приоритет рабочего измерения и отсутствие
|
||||
тестового внешнего порта в рекламе рабочего сокета. JOIN/стриминг в этом режиме не запускаются.
|
||||
Случайные тестовые порты получают тот же класс NAT; правила для рабочего 32000 сохраняются.
|
||||
Для испытания случайных портов активен один клиент каждого выбранного NAT-шлюза.
|
||||
Расширенная классификация restricted/dependent включает реальные таймауты CHANGE,
|
||||
поэтому этот режим обычно занимает несколько минут. Результат: `stun-result.json`.
|
||||
|
||||
`--nat-check` выполняет ту же проверку перед обычными JOIN/Merkle/BGP/стримингом.
|
||||
Контроллер сначала запускает только ядро с ручными NAT-раундами, переносит
|
||||
подписанные снимки через RPC и создаёт нужные NCD-подключения. Наблюдения,
|
||||
|
||||
Reference in new issue
Block a user