X-Git-Url: http://www.git.cypherpunks.ru/?a=blobdiff_plain;f=doc%2Fusecases.ru.texi;h=8f12cd1da474035cff8efd88f78fbdb7d9515482;hb=a82862691446b52ed8deb7249b437be696c2030f;hp=dee3a329f2385f937fdfd516a8ae16f1ba39bae2;hpb=2a3ff4d663b0a12dc539ccf79242cd01cd87417a;p=nncp.git diff --git a/doc/usecases.ru.texi b/doc/usecases.ru.texi index dee3a32..8f12cd1 100644 --- a/doc/usecases.ru.texi +++ b/doc/usecases.ru.texi @@ -1,4 +1,4 @@ -@node Сценарии использования +@node Сценарии @section Сценарии использования @menu @@ -7,23 +7,26 @@ * Ненадёжный/дорогой канал связи: UsecaseUnreliableRU. * Медленная/дорогая связь для больших объёмов данных, плохой QoS: UsecaseQoSRU. * Экстремальные наземные окружающие условия, нет связи: UsecaseNoLinkRU. +* Односторонняя широковещательная связь: UsecaseBroadcastRU. +* Спутниковые каналы связи: UsecaseSatelliteLinksRU. * Частные, изолированные MitM/Sybil-устойчивые сети: UsecaseF2FRU. * Высоко защищённые изолированные компьютеры с воздушным зазором: UsecaseAirgapRU. * Обход сетевой цензуры, здоровье: UsecaseCensorRU. * Разведка, шпионаж, тайная агентура: UsecaseSpyRU. +* Дешёвая ночная связь: UsecaseCallerRU. @end menu @node UsecaseMailRU @subsection Доступность почтового сервера время от времени Представьте, что у вас есть собственный @url{http://www.postfix.org/, -Postfix} SMTP сервер подключённый к Интернету. Но вы читаете и пишете -почтовые сообщения на своём ноутбуке, который подключается к нему лишь -время от времени. Как опустошить очередь из ожидающих сообщений когда -ноутбук подключён? +Postfix}/@url{http://www.exim.org/, Exim} SMTP сервер подключённый к +Интернету. Но вы читаете и пишете почтовые сообщения на своём ноутбуке, +который подключается к нему лишь время от времени. Как опустошить +очередь из ожидающих сообщений когда ноутбук подключён? Одна из возможностей это войти на сервер и сделать что-то типа -@command{postqueue -f}, но по-умолчанию у вас есть только несколько дней +@command{postqueue -f}, но по умолчанию у вас есть только несколько дней на это, плюс отправитель будет получать уведомления о том, что его сообщение всё ещё не доставлено. Кроме того, вы должны использовать безопасный канал связи (SSH, VPN, итд). @@ -33,22 +36,20 @@ 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-mail}) на заданный узел. Это делается -аналогично тому как с 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 @ref{nncp-daemon} может быть соединён с @ref{nncp-caller} длительное время -- он создаёт TCP соединение на многие часы. Когда SMTP сервер -получает письмо, то вызывает @ref{nncp-mail} для создания исходящего +получает письмо, то вызывает @ref{nncp-exec} для создания исходящего зашифрованного пакета. Демон ежесекундно проверяет исходящую директорию и сразу же посылает оповещение о недоставленных пакетах противоположной стороне, которая сразу же их может скачать. @@ -69,17 +70,17 @@ IMAP4, как правило, нет). У вас легковесный, сжа проблематично получить. Более того, каждый обрыв может приводить к отсылке данных с самого начала, что не всегда по карману. -Просто отправьте вашу @ref{nncp-mail, почту} и @ref{nncp-file, файлы} +Просто отправьте вашу @ref{nncp-exec, почту} и @ref{nncp-file, файлы} через NNCP. Вы сможете использовать или offline методы доставки -- читайте о них в следующем разделе, либо использовать поставляемый NNCP @ref{nncp-daemon, TCP демон}. Команды: -@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 передачи) @@ -102,17 +103,24 @@ NNCP поддерживает @ref{Niceness, приоритезацию траф раньше или позднее остальных. Почти все команды имеют соответствующую опцию: -@verbatim -% nncp-file -nice 32 myfile node:dst -% nncp-xfer -nice 192 /mnt/shared -% nncp-call -nice 224 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, части}, давая возможность передачи, по сути, любых объёмов используя накопители небольших размеров. +Вы также можете использовать CD-ROM и ленточные накопители: + +@example +$ nncp-bundle -tx bob | cdrecord -tao - +$ nncp-bundle -tx bob | dd of=/dev/sa0 bs=10240 +@end example + @node UsecaseNoLinkRU @subsection Экстремальные наземные окружающие условия, нет связи @@ -122,11 +130,12 @@ NNCP поддерживает @ref{Niceness, приоритезацию траф передачи пакетов другим узлам. Представьте, что вы послали два файла узлу @emph{bob}. Вставьте USB -устройство хранения, подмонтируйте и запустите @ref{nncp-xfer}: +устройство (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} опцию чтобы создать все необходимые @@ -137,21 +146,70 @@ 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} это единственная команда используемая с переносными устройствами хранения. +@node UsecaseBroadcastRU +@subsection Односторонняя широковещательная связь + +Иногда у вас есть ёмкий, но односторонний, канал связи, например +широковещательный сигнал со спутника. Вы не можете использовать online +@ref{Sync, протокол синхронизации}, потому что он требует двустороннего +взаимодействия. + +Вы можете использовать, так называемые, @ref{Bundles, пачки} и потоково +отсылать их. Они -- всего-лишь последовательность @ref{Encrypted, +зашифрованных пакетов}, которые вы можете принять. + +@example +$ nncp-bundle -tx alice bob eve ... | команда для отправки широковещательной рассылки +$ команда для приёма широковещательной рассылки | nncp-bundle -rx +@end example + +Встроенная возможность определять дубляжи пакетов позволит вам +переотправлять широковещательные рассылки время от времени, повышая +шансы на то, что получатель примет их, регулярно слушая рассылку. + +@node UsecaseSatelliteLinksRU +@subsection Спутниковые каналы связи + +Спутниковые каналы связи имеют @strong{очень} большие задержки вместе с +высокими пропускными способностями. Вы можете посылать мегабиты данных в +секунду, но они достигнут удалённой стороны только спустя полсекунды! +Большинство протоколов обмена файлами, таких как +@url{https://en.wikipedia.org/wiki/Files_transferred_over_shell_protocol, FISH}, +@url{https://ru.wikipedia.org/wiki/FTP, FTP}, +@url{https://ru.wikipedia.org/wiki/SCP, scp}, +@url{https://en.wikipedia.org/wiki/XMODEM, XMODEM} will perform very +будут работать очень плохо из-за большого количества приёмо-передач +(round-trips). Каждая передача файла явно генерирует пакеты запросов и +подтверждений, посылаемые поверх канала связи. Удалённая сторона ничего +не будет делать пока она их не получит. Более того, не все протоколы +позволяют делать дуплексную отправку данных (когда обе стороны посылают +данные одновременно). + +@ref{Sync, Протокол синхронизации} (SP) NNCP пытается решить все эти +особенности за счёт сокращения количества приёмо-передач, количества +проходящих пакетов. Все списки файлов, запросов на скачивание файла +группируются вместе (pipelined) в один огромный пакет. Только запросы на +остановку передачи и подтверждения успешного приёма файла явно +посылаются. Можно запросить чтобы SP только принимал или отправлял +пакеты для нашей ноды. SP может игнорировать файлы с маленьким +приоритетом. Полные списки файлов отправляются уже на этапе процедуры +рукопожатия. + @node UsecaseF2FRU @subsection Частные, изолированные MitM/Sybil-устойчивые сети @@ -183,15 +241,17 @@ 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} (взятого из конфигурационного файла), послать все связанные с ним исходящие пакеты и получить от него. Все прерванные передачи будут автоматически @@ -206,8 +266,8 @@ NNCP поддерживает @ref{Niceness, приоритезацию траф выбором. Компьютер без каких-либо модемов, проводных и беспроводных сетей. Очевидно, что единственная возможность обмениваться почтой и файлами -- использовать физически переносимые устройства хранения типа -CD-ROM, жёстких дисков, лент и USB накопителей (худший вариант, из-за -сложности подобных устройств). +CD-ROM, жёстких дисков, SD, лент и USB накопителей (@strong{худший} +вариант, из-за сложности подобных устройств). Предполагаем что у вас есть ещё один собственный узел, стоящий "до" безопасного, который делает базовые проверки полученных накопителей, @@ -216,14 +276,18 @@ CD-ROM, жёстких дисков, лент и 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, конфигурационный файл} говорит что у нас есть @@ -267,7 +331,7 @@ neigh: Эти ребята знают насколько небезопасен Интернет, несовместим с понятием приватности. Им необходим быстрый сброс и забор данных. Нет -возможности провести несколько итераций туда-обратно (round trip) -- +возможности провести несколько итераций приёмо-передач (round-trips) -- только сбросить данные, выстрелить и забыть. Опять же, это может быть переносной накопитель и/или @url{https://en.wikipedia.org/wiki/USB_dead_drop, USB тайник} (dead drop), @@ -286,13 +350,64 @@ Bluetooth и WiFi могут быть и довольно быстрыми, по Общение узлов между собой происходит в, так называемой, @ref{Spool, спул} области: директории содержащей только необработанные зашифрованные -пакеты. После передачи пакета вы всё-равно не сможете его прочитать: +пакеты. После передачи пакета вы всё равно не сможете его прочитать: необходимо запустить другую фазу: @ref{nncp-toss, распаковку}, которая использует ваши приватные криптографические ключи. То есть, даже если вы потеряете свой компьютер, устройства хранения и тому прочее -- это не -так плохо, потому-что вы не носите с собой приватные ключи (ведь так?), +так плохо, потому что вы не носите с собой приватные ключи (ведь так?), вы не "распаковываете" эти пакеты сразу же на том же самом устройстве. Распаковка (чтение этих зашифрованных пакетов с извлечением переданных файлов и почтовых сообщений) может и должна бы быть произведена на -отдельном компьютере (@ref{nncp-mincfg} команда может помочь с созданием +отдельном компьютере (@ref{nncp-cfgmin} команда может помочь с созданием конфигурационного файла без приватных ключей для этой цели). + +Если вы действительно хотите взять с собой приватные ключи, то +@ref{nncp-cfgenc} команда способна зашифровать ваш конфигурационный +файл. Парольная фраза вами введённая усиливается функцией нагружающей и +центральный процессор и память. + +@node UsecaseCallerRU +@subsection Дешёвая ночная связь + +Стоимость Интернет/телефонного трафика может варьироваться, в +зависимости от времени дня. Ночные звонки/соединения могут быть дешевле +в два раза. Вы хотите посылать ваши файлы в это время, но позволять +изредка проходить высокоприоритетной почте в любое время. А также вы +хотите проходить любому трафику когда узел доступен через ЛВС (LAN). + +Вы легко можете настроить ваши предпочтения в @ref{Call, настройках +звонков} для @ref{nncp-caller} команды, используемой при online связи. + +@verbatim +neigh: { + [...] + some-node: { + [...] + addrs: { + lan: "[fe80::be5f:f4ff:fedd:2752%igb0]:5400" + wan: "some-node.com:5400" + } + 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