mirror of https://github.com/voidlizard/hbs2
devlog
This commit is contained in:
parent
9c5d9e01f8
commit
0764bbca44
|
@ -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
|
||||
|
|
|
@ -0,0 +1,2 @@
|
|||
```
|
||||
```
|
Loading…
Reference in New Issue