333.i2p

Форум, посвященный разработке и поддержке i2pd
 
Sun, 29 May 2022, 06:07pm #1
Люк
Участник
Registered: May 2022
Последний раз: Tue, 07 Jun 2022
Сообщения: 4

Взаимодействие клиента с сервером в I2P выглядит так. Сервер публикует в NetDB Leaseset со списком входящих туннелей. Когда клиент хочет обратиться к серверу, то он получает Leaseset из NetDB, обращается к серверу через входящие туннели. Когда туннели сервера обновляются, клиент их получает не из NetDB, а непосредственно от сервера. Всем клиентам сообщается одинаковый список входящих туннелей.

Предлагаю улучшение для серверов, принимающих или раздающих большие файлы, т.е. использующих длительные соединения с непрерывной передачей данных.
Изначально все клиенты используют одни и те же входящие туннели сервера, получаемые из NetDB, других вариантов нет. Когда объем передаваемых данных (или время соединения) превысил заданный порог, сервер создает 1-2 входящих и исходящих туннеля, которые будет использовать исключительно с этим клиентом. Клиенту теперь отдает Leaseset с этими уникальными входящими туннелями. Постепенно клиент пересаживается на них.
Таким образом мы избегаем ситуации, когда большое количество клиентов совместно используют одни и те же туннели сервера и перегружают их. Описанная схема имеет общие черты с работой onion-сервисов, в которых к каждому к клиенту выстраивается своя цепочка.
Если клиент, посаженный на уникальные туннели, перестал использовать пропускную способность, сервер будет его пересаживать обратно на общие туннели и закрывать ненужные уникальные. Уникальные туннели отключившегося клиента можно перераспределить между другими клиентами или закрыть.

Offline
Sun, 29 May 2022, 07:12pm #2
orignal
Директор
Wlm
Registered: February 2016
Последний раз: 14 часов назад
Сообщения: 212

Надо подумать нет ли тут возможности для атаки и деанона сервера.
В целом идея здравая, что для каждого клиента формируется уникальный лизсет со своим набором тоннелей.

Offline
Tue, 07 Jun 2022, 08:37pm #3
Люк
Участник
Registered: May 2022
Последний раз: Tue, 07 Jun 2022
Сообщения: 4

orignal wrote:

Надо подумать нет ли тут возможности для атаки и деанона сервера.
В целом идея здравая, что для каждого клиента формируется уникальный лизсет со своим набором тоннелей.

Думаю, что это зависит от соотношения трафика и количества своих туннелей к транзитным.
Чтобы не получить деанон, подключение нового клиента не должно мгновенно триггерить создание известного количества туннелей. Туннели должны появляться при длительной активности клиента, в случайном количестве 1-2. По всем параметрам нужна рандомизация. Сколько трафика должно быть передано этому клиенту, сколько времени он должен быть активен, прежде чем его пересаживать на персональный лизсет, надо рандомизировать. Туннели от других клиентов переиспользовать. Так снизится риск от этой фичи, мое мнение.

Offline
Sun, 22 Jan 2023, 01:25am #4
uis
Участник
Registered: April 2021
Последний раз: Sat, 20 Apr 2024
Сообщения: 5

Ещё можно заранее создать несколько тунелей, которые не будут публиковвться в ls.

Offline
Mon, 23 Jan 2023, 08:18am #5
lecho24
Участник
Registered: June 2022
Последний раз: Mon, 09 Sep 2024
Сообщения: 39

orignal wrote:

В целом идея здравая, что для каждого клиента формируется уникальный лизсет со своим набором тоннелей.

Вот как бы это еще совместить со списками разрешенных/запрещенных клиентов и с механизмом, рассчитанным на тысячи клиентов в списке и чтение этой базы без перезагрузки сервиса... По kill -HUP - перечитывание туннелей так и не работает (и не надо такого механизма для списков).

Offline