]> Cypherpunks.ru repositories - nncp.git/blobdiff - doc/usecases.ru.texi
SO_REUSEPORT is applied only to multicast UDP ports
[nncp.git] / doc / usecases.ru.texi
index da05881bcab828d0e636e16d18fab1df05a2f8ea..860f4013685250d155293f6c4eab4519e917bb72 100644 (file)
@@ -2,31 +2,32 @@
 @section Сценарии использования
 
 @menu
-* Доступность почтового сервера время от времени: UsecaseMailRU.
-* Легковесная и быстрая замена POP3/IMAP4: UsecasePOPRU.
-* Ненадёжный/дорогой канал связи: UsecaseUnreliableRU.
-* Медленная/дорогая связь для больших объёмов данных, плохой QoS: UsecaseQoSRU.
-* Экстремальные наземные окружающие условия, нет связи: UsecaseNoLinkRU.
-* Односторонняя широковещательная связь: UsecaseBroadcastRU.
-* Спутниковые каналы связи: UsecaseSatelliteLinksRU.
-* Частные, изолированные MitM/Sybil-устойчивые сети: UsecaseF2FRU.
-* Высоко защищённые изолированные компьютеры с воздушным зазором: UsecaseAirgapRU.
-* Обход сетевой цензуры, здоровье: UsecaseCensorRU.
-* Разведка, шпионаж, тайная агентура: UsecaseSpyRU.
-* Дешёвая ночная связь: UsecaseCallerRU.
+* Доступность почтового сервера время от времени: UsecaseMailRU
+* Легковесная и быстрая замена POP3/IMAP4: UsecasePOPRU
+* Ненадёжный/дорогой канал связи: UsecaseUnreliableRU
+* Медленная/дорогая связь для больших объёмов данных, плохой QoS: UsecaseQoSRU
+* Экстремальные наземные окружающие условия, нет связи: UsecaseNoLinkRU
+* Односторонняя широковещательная связь: UsecaseBroadcastRU
+* Спутниковые каналы связи: UsecaseSatelliteLinksRU
+* Частные, изолированные MitM/Sybil-устойчивые сети: UsecaseF2FRU
+* Высоко защищённые изолированные компьютеры с воздушным зазором: UsecaseAirgapRU
+* Обход сетевой цензуры, здоровье: UsecaseCensorRU
+* Разведка, шпионаж, тайная агентура: UsecaseSpyRU
+* Дешёвая ночная связь: UsecaseCallerRU
+* Мультивещательная flooding рассылка: UsecaseMulticastRU
 @end menu
 
 @node UsecaseMailRU
 @subsection Доступность почтового сервера время от времени
 
 Представьте, что у вас есть собственный @url{http://www.postfix.org/,
-Postfix} SMTP сервер подключённый к Интернету. Но вы читаете и пишете
¿Ð¾Ñ\87Ñ\82овÑ\8bе Ñ\81ообÑ\89ениÑ\8f Ð½Ð° Ñ\81воÑ\91м Ð½Ð¾Ñ\83Ñ\82бÑ\83ке, ÐºÐ¾Ñ\82оÑ\80Ñ\8bй Ð¿Ð¾Ð´ÐºÐ»Ñ\8eÑ\87аеÑ\82Ñ\81Ñ\8f Ðº Ð½ÐµÐ¼Ñ\83 Ð»Ð¸Ñ\88Ñ\8c
²Ñ\80емÑ\8f Ð¾Ñ\82 Ð²Ñ\80емени. Ð\9aак Ð¾Ð¿Ñ\83Ñ\81Ñ\82оÑ\88иÑ\82Ñ\8c Ð¾Ñ\87еÑ\80едÑ\8c Ð¸Ð· Ð¾Ð¶Ð¸Ð´Ð°Ñ\8eÑ\89иÑ\85 Ñ\81ообÑ\89ений ÐºÐ¾Ð³Ð´Ð°
-ноутбук подключён?
+Postfix}/@url{http://www.exim.org/, Exim} SMTP сервер подключённый к
\98нÑ\82еÑ\80неÑ\82Ñ\83. Ð\9dо Ð²Ñ\8b Ñ\87иÑ\82аеÑ\82е Ð¸ Ð¿Ð¸Ñ\88еÑ\82е Ð¿Ð¾Ñ\87Ñ\82овÑ\8bе Ñ\81ообÑ\89ениÑ\8f Ð½Ð° Ñ\81воÑ\91м Ð½Ð¾Ñ\83Ñ\82бÑ\83ке,
ºÐ¾Ñ\82оÑ\80Ñ\8bй Ð¿Ð¾Ð´ÐºÐ»Ñ\8eÑ\87аеÑ\82Ñ\81Ñ\8f Ðº Ð½ÐµÐ¼Ñ\83 Ð»Ð¸Ñ\88Ñ\8c Ð²Ñ\80емÑ\8f Ð¾Ñ\82 Ð²Ñ\80емени. Ð\9aак Ð¾Ð¿Ñ\83Ñ\81Ñ\82оÑ\88иÑ\82Ñ\8c
¾Ñ\87еÑ\80едÑ\8c Ð¸Ð· Ð¾Ð¶Ð¸Ð´Ð°Ñ\8eÑ\89иÑ\85 Ñ\81ообÑ\89ений ÐºÐ¾Ð³Ð´Ð° Ð½Ð¾Ñ\83Ñ\82бÑ\83к Ð¿Ð¾Ð´ÐºÐ»Ñ\8eÑ\87Ñ\91н?
 
 Одна из возможностей это войти на сервер и сделать что-то типа
-@command{postqueue -f}, но по-умолчанию у вас есть только несколько дней
+@command{postqueue -f}, но по умолчанию у вас есть только несколько дней
 на это, плюс отправитель будет получать уведомления о том, что его
 сообщение всё ещё не доставлено. Кроме того, вы должны использовать
 безопасный канал связи (SSH, VPN, итд).
@@ -36,15 +37,13 @@ Postfix} SMTP сервер подключённый к Интернету. Но
 @url{https://ru.wikipedia.org/wiki/KISS_(%D0%BF%D1%80%D0%B8%D0%BD%D1%86%D0%B8%D0%BF),
 KISS}!
 
-Просто скажите вашим обоим Postfix-ам (на сервере и ноутбуке) отправлять
-сообщения через NNCP (@ref{nncp-exec}) на заданный узел. Это делается
-аналогично тому как с UUCP, и описано в
-@url{http://www.postfix.org/UUCP_README.html, документации Postfix}.
-
-Читайте @ref{Postfix, здесь} для более подробной информации. Вся почта
-будет сохранятся в NNCP @ref{Spool, спуле}, который после обмена данных
-и распаковки вызовет локальный @command{sendmail} для доставки почты,
-как-будто это произошло на этой же машине.
+Просто скажите вашим обоим Postfix/Exim-ам (на сервере и ноутбуке)
+отправлять сообщения через NNCP (@ref{nncp-exec}) на заданный узел.
+Более подробно читайте для Postfix @ref{Postfix, здесь}, а для Exim
+@ref{Exim, здесь}. Вся почта будет сохранятся в NNCP @ref{Spool, спуле},
+который после обмена данных и распаковки вызовет локальный
+@command{sendmail} для доставки почты, как-будто это произошло на этой
+же машине.
 
 @node UsecasePOPRU
 @subsection Легковесная и быстрая замена POP3/IMAP4
@@ -79,10 +78,10 @@ IMAP4, как правило, нет). У вас легковесный, сжа
 
 Команды:
 
-@verbatim
-% nncp-file file_i_want_to_send bob:
-% nncp-file another_file bob:movie.avi
-@end verbatim
+@example
+$ nncp-file file_i_want_to_send bob:
+$ nncp-file another_file bob:movie.avi
+@end example
 
 добавят в очередь отправки два файла для узла @emph{bob}.
 Выстрелил-и-забыл! Теперь это работа демона (или offline передачи)
@@ -105,12 +104,12 @@ NNCP поддерживает @ref{Niceness, приоритезацию траф
 раньше или позднее остальных. Почти все команды имеют соответствующую
 опцию:
 
-@verbatim
-% nncp-file -nice FLASH myfile node:dst
-% nncp-xfer -nice PRIORITY /mnt/shared
-% nncp-call -nice NORMAL bob
+@example
+$ nncp-file -nice FLASH myfile node:dst
+$ nncp-xfer -nice PRIORITY /mnt/shared
+$ nncp-call -nice NORMAL bob
 [...]
-@end verbatim
+@end example
 
 Огромные файлы могут быть разбиты на маленькие @ref{Chunked, части},
 давая возможность передачи, по сути, любых объёмов используя накопители
@@ -118,10 +117,10 @@ NNCP поддерживает @ref{Niceness, приоритезацию траф
 
 Вы также можете использовать CD-ROM и ленточные накопители:
 
-@verbatim
-% nncp-bundle -tx bob | cdrecord -tao -
-% nncp-bundle -tx bob | dd of=/dev/sa0 bs=10240
-@end verbatim
+@example
+$ nncp-bundle -tx bob | cdrecord -tao -
+$ nncp-bundle -tx bob | dd of=/dev/sa0 bs=10240
+@end example
 
 @node UsecaseNoLinkRU
 @subsection Экстремальные наземные окружающие условия, нет связи
@@ -135,9 +134,9 @@ NNCP поддерживает @ref{Niceness, приоритезацию траф
 устройство (SD гораздо предпочтительнее!) хранения, подмонтируйте и
 запустите @ref{nncp-xfer}:
 
-@verbatim
-% nncp-xfer -node bob /media/usbstick
-@end verbatim
+@example
+$ nncp-xfer -node bob /media/usbstick
+@end example
 
 чтобы скопировать все исходящие пакеты относящиеся к @emph{bob}.
 Используйте @option{-mkdir} опцию чтобы создать все необходимые
@@ -148,16 +147,16 @@ NNCP поддерживает @ref{Niceness, приоритезацию траф
 @emph{bob} и к @emph{alice}, то тогда просто не указывайте
 @option{-node} опцию, чтобы скопировать все доступные исходящие пакеты.
 
-@verbatim
-% nncp-xfer /media/usbstick
-@end verbatim
+@example
+$ nncp-xfer /media/usbstick
+@end example
 
 Размонтируйте и передайте накопитель Бобу и Алисе. Когда они вставят
 накопитель в свои компьютеры, то выполнят точно такую же команду:
 
-@verbatim
-% nncp-xfer /media/usbstick
-@end verbatim
+@example
+$ nncp-xfer /media/usbstick
+@end example
 
 чтобы найти все пакеты относящиеся к их узлу и локально скопируют для
 дальнейшей обработки. @command{nncp-xfer} это единственная команда
@@ -175,10 +174,10 @@ NNCP поддерживает @ref{Niceness, приоритезацию траф
 отсылать их. Они -- всего-лишь последовательность @ref{Encrypted,
 зашифрованных пакетов}, которые вы можете принять.
 
-@verbatim
-% nncp-bundle -tx alice bob eve ... | команда для отправки широковещательной рассылки
-% команда для приёма широковещательной рассылки | nncp-bundle -rx
-@end verbatim
+@example
+$ nncp-bundle -tx alice bob eve ... | команда для отправки широковещательной рассылки
+$ команда для приёма широковещательной рассылки | nncp-bundle -rx
+@end example
 
 Встроенная возможность определять дубляжи пакетов позволит вам
 переотправлять широковещательные рассылки время от времени, повышая
@@ -243,20 +242,25 @@ NNCP поддерживает @ref{Niceness, приоритезацию траф
 отослать полезную нагрузку сразу же в самом первом пакете) безопасный
 транспорт с свойством совершенной прямой секретности.
 
-@verbatim
-% nncp-daemon -bind [::]:5400
-@end verbatim
+@example
+$ nncp-daemon -bind "[::]":5400
+@end example
+
 запустит TCP демон, который будет слушать входящие соединения на всех
 интерфейсах.
 
-@verbatim
-% nncp-call bob
-@end verbatim
+@example
+$ nncp-call bob
+@end example
+
 попытается подключиться к известному TCP-адресу узла @emph{bob} (взятого
 из конфигурационного файла), послать все связанные с ним исходящие
 пакеты и получить от него. Все прерванные передачи будут автоматически
 возобновлены.
 
+А наличие возможности @ref{MCD, multicast обнаружения} участников сети в
+IPv6 сетях позволяет вообще не возиться с заданием сетевых адресов.
+
 @node UsecaseAirgapRU
 @subsection Высокозащищённые изолированные компьютеры с воздушным зазором
 
@@ -276,14 +280,18 @@ CD-ROM, жёстких дисков, SD, лент и USB накопителей
 NNCP из коробки поддерживает ретрансляцию пакетов.
 
 @verbatim
-neigh:
-  bob:
+neigh: {
+  bob: {
     [...]
-    addrs:
-      lan: [fe80::5400%igb0]:5400
+    addrs: {
+      lan: "[fe80::5400%igb0]:5400"
+    }
+  }
   bob-airgap:
     [...]
-    via: [bob]
+    via: ["bob"]
+  }
+}
 @end verbatim
 
 Такой @ref{Configuration, конфигурационный файл} говорит что у нас есть
@@ -375,28 +383,119 @@ Bluetooth и WiFi могут быть и довольно быстрыми, по
 звонков} для @ref{nncp-caller} команды, используемой при online связи.
 
 @verbatim
-neigh:
+neigh: {
   [...]
-  some-node:
+  some-node: {
     [...]
-    addrs:
+    addrs: {
       lan: "[fe80::be5f:f4ff:fedd:2752%igb0]:5400"
       wan: "some-node.com:5400"
-    calls:
-      -
+    }
+    calls: [
+      {
         cron: "*/1 * * * *"
         addr: lan
         nice: MAX
         onlinedeadline: 3600
-      -
+      }
+      {
         cron: "*/10 * * * *"
         addr: wan
         nice: PRIORITY
         xx: rx
-      -
+      }
+      {
         cron: "*/1 0-7 * * *"
         addr: wan
         nice: BULK
         onlinedeadline: 3600
         maxonlinetime: 3600
+      }
+    ]
+  }
+}
 @end verbatim
+
+@node UsecaseMulticastRU
+@subsection Мультивещательная flooding рассылка
+
+Необходимо разослать одно и то же почтовое сообщение или файл многим
+участникам? Например обновления какой либо программы, списка участников
+сети или доступных файлов? Но при этом вы не соединены лично с каждым из
+них:
+
+@verbatim
+   A-------->E---->F    A <-> B C E
+  / \        |\    ^    C <-> H J
+ /   \       |  \  |    E <-> D F G
+v     v      v    \v    D <-> G
+B     C      D---->G    J <-> K
+     / \     ^    /     K <-> D G
+    /   \    |   /
+   v     v   v  /
+   H     J<->K<-
+@end verbatim
+
+В NNCP есть особые @ref{Multicast, мультивещательные} форматы пакетов
+позволяющие организовывать эффективную передачу одно единственного
+пакета сразу нескольким получателям (flooding алгоритм). @strong{A}
+отправляет пакет трём получателям. @strong{C} в свою очередь отсылает
+ещё двум, а @strong{E} трём. Некоторые участники сети получат несколько
+копий одного и того же пакета, как например @strong{D}, @strong{J},
+@strong{G}, @strong{F}, но копии будут просто проигнорированы. Если
+@strong{B} отошлёт пакет единственному ему известному @strong{A}, то
+этот пакет распространится по всей сети подписантов широковещательной
+зоны и дальше.
+
+Более того, мультивещательные пакеты зашифрованы и для прочтения требуют
+знание ключей. Но это не мешает их обрабатывать для дальнейшей пересылки!
+Кроме того, совершенно не обязательно знать ключи отправителя. Таким
+образом можно создать эхоконференцию для передачи файлов или команд
+(например доставки почтовых сообщений).
+
+Создаём ключи для мультивещательной зоны:
+
+@example
+$ nncp-cfgnew -area filelists -nocomments
+areas: @{
+  filelists: @{
+    id: TOU5TKOW4JBIZJBX63D4776C72FMWDAUAUSZNJX4DFOITVYQ5ZQA
+    pub: DSHL5O6BK2R3QKJAIJ7BC4UIGE73EC2LJPOV3VTS44KYOTUQYZLA
+    prv: AYD5FAA4GDDSAD5N65NJLLFS6TG2NSPQ46KAQO5U722JLVG34SOQ
+  @}
+@}
+@end example
+
+и отправляем ключевую пару всем кто может и хочет читать данную зону.
+Посредникам, готовым участвовать в переотправке пакетов подписантам, но
+которым не стоит "читать" пакеты, достаточно отправить только
+идентификатор зоны. Например @strong{A} добавляет себе в конфигурацию:
+
+@example
+areas: @{
+  filelists: @{
+    id: TOU...
+    pub: DSH...
+    prv: AYD...
+    subs: ["B", "C", "E"]
+    incoming: /home/A/areas/filelists
+  @}
+@end example
+
+а @strong{E}, являющимся (как было решено) просто посредником:
+
+@example
+areas: @{
+  filelists: @{
+    id: TOU...
+    subs: ["D", "F", "G"]
+  @}
+@end example
+
+После распространения знания о @code{filelists} мультивещательной зоне
+можно обмениваться @ref{FreqIndex, списками файлов}:
+
+@example
+$ nncp-file tree-of-A-20210715.txt.zst area:filelists:
+$ nncp-toss -node self
+@end example