diff --git a/docs/devlog.md b/docs/devlog.md index e6031f9a..99b2d5b0 100644 --- a/docs/devlog.md +++ b/docs/devlog.md @@ -1,4 +1,76 @@ +## 2023-02-24 + +TODO: libpcp-gateway-detection + + Посмотреть, как libpcp ищет шлюз. + + +TODO: gateway-detection + + Пытаться обнаружить UPnP gateway что бы просить у него пробросить + порт. + + Обычно это SOHO роутер, где может функционировать NAT-PMP или + UPnP. + + Если это модный домашний роутер типа Keenetic, там, скорее всего, + будет и то, и другое. + + Если это что-то не очень модное (Mac), то там может быть только NAT-PMP + и мы не найдем сам gateway методом UPnP. + + Что нам остаётся: + + 1. Пытаться обнаружить его через PCP Discovery + 2. Взять системный Gateway из выхлопа команд (ifconfig, ipconfig и т.п) + 3. Взять адрес gateway из конфига + 4. Задавать команду поиска Gateway тоже в конфиге (может быть проблематично) + + В случае поиска через UPnP да и в любом вообще случае --- мы не можем быть + уверены, что это вообще наш gateway, через который мы ходим в интернет. + + Это может быть какая-то L3 топология с цепочкой роутеров, тогда нас, скорее + всего, ждёт провал. Мы видим, однако, что узел каким-то образом всё равно + в таком случае работает, только почему-то не добавляется в PEX (расследовать). + + Вероятно, алгоритмы NAT приоткрывают дырку очень ненадолго. + + Таким образом, мы видим, что задача поэтапная и хорошего решения нет, любое вызывает + какие-то проблемы. + + Таким образом, в первом приближении предлагается пойти по пути Syncthing: + + 1. Найти какой-то роутер по SSDP: + + ``` + M-SEARCH * HTTP/1.1 + HOST: 239.255.255.250:1900 + MAN: "ssdp:discover" + MX: 2 + ST: urn:schemas-upnp-org:device:InternetGatewayDevice:1 + ``` + + 2. Попросить его открыть порты (по NAT-PMP) + + Если мы попросим открыть порты по NAT-PMP и он это сделает, + скорее всего, это наш роутер. + + Первый этап: нахождение роутера + + 1. Взять из конфига, если есть + 2. Разослать SSDP запрос, посмотреть, кто откликнется + + Без рутовых прав мы не можем: сами пользоваться ICMP, слушать + сетевые интерфейсы / переводить их в промискуитетный режим. + + Не зная на какой мы системе, мы не можем вызывать команды типа + ipconfig/ifconfig/ip addr (хотя можем попытаться перебрать их все) + + (Посмотреть, как сделать в libpcp --- оно каким-то образом пытается + найти default gateway сначала). + + ## 2023-02-23 TODO: http-cache-protocol diff --git a/docs/drafts/mnemonic-hashes.txt b/docs/drafts/mnemonic-hashes.txt new file mode 100644 index 00000000..47d4a370 --- /dev/null +++ b/docs/drafts/mnemonic-hashes.txt @@ -0,0 +1,2 @@ +``` +```