Browse Source

Document signed profile source and reproducible isolated STUN bench

master
evgeny 12 hours ago
parent
commit
b3830e0264
  1. 1
      Makefile.am
  2. 7
      doc/node_snapshot.md
  3. 17
      tests/stream_netns/README.md

1
Makefile.am

@ -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 \

7
doc/node_snapshot.md

@ -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-профиль.

17
tests/stream_netns/README.md

@ -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-подключения. Наблюдения,

Loading…
Cancel
Save