commit 4da412049a6a618984daacbd930fba3fdcc46085 Author: bot Date: Sat Feb 10 12:53:55 2024 +0000 2024-02-09-23-30 diff --git a/HowtoYggWiki480_100.png b/HowtoYggWiki480_100.png new file mode 100644 index 0000000..37fd892 Binary files /dev/null and b/HowtoYggWiki480_100.png differ diff --git a/HowtoYggWikiLong.png b/HowtoYggWikiLong.png new file mode 100644 index 0000000..68f1bc8 Binary files /dev/null and b/HowtoYggWikiLong.png differ diff --git a/HowtoYggWikiLong2.png b/HowtoYggWikiLong2.png new file mode 100644 index 0000000..0f38408 Binary files /dev/null and b/HowtoYggWikiLong2.png differ diff --git a/HowtoYggWikiLong2_64.png b/HowtoYggWikiLong2_64.png new file mode 100644 index 0000000..4f161ba Binary files /dev/null and b/HowtoYggWikiLong2_64.png differ diff --git a/HowtoYggWikiLongLarge.png b/HowtoYggWikiLongLarge.png new file mode 100644 index 0000000..e7a2284 Binary files /dev/null and b/HowtoYggWikiLongLarge.png differ diff --git a/HowtoYggWikiSmall.png b/HowtoYggWikiSmall.png new file mode 100644 index 0000000..065c9bd Binary files /dev/null and b/HowtoYggWikiSmall.png differ diff --git a/apple-touch-icon-128x128.png b/apple-touch-icon-128x128.png new file mode 100644 index 0000000..c9e4ac0 Binary files /dev/null and b/apple-touch-icon-128x128.png differ diff --git a/apple-touch-icon-72x72.png b/apple-touch-icon-72x72.png new file mode 100644 index 0000000..2cc9a25 Binary files /dev/null and b/apple-touch-icon-72x72.png differ diff --git a/apple-touch-icon-76x76.png b/apple-touch-icon-76x76.png new file mode 100644 index 0000000..a8445b9 Binary files /dev/null and b/apple-touch-icon-76x76.png differ diff --git a/conf/acronyms.local.conf b/conf/acronyms.local.conf new file mode 100644 index 0000000..6ca8d7f --- /dev/null +++ b/conf/acronyms.local.conf @@ -0,0 +1,13 @@ +# Acronyms. +ЛКМ Левая кнопка мыши +ПКМ Правая кнопка мыши +ПО Программное обеспечение +IP Internet Protocol +VPN Virtual Private Network +TCP Transport Control Protocol +DoH DNS over HTTPS +HTTPS HyperText Transfer Protocol Secure +ОС Операционная система +NAT Network Address Translation +VPS Virtual Private Server +ЛВС Локальная вычислительная сеть diff --git a/conf/local.php b/conf/local.php new file mode 100644 index 0000000..29eed5d --- /dev/null +++ b/conf/local.php @@ -0,0 +1,60 @@ + + + + + DokuWiki Logo + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + image/svg+xml + + DokuWiki Logo + + + Esther Brunner + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/data/media/wiki/logo.png b/data/media/wiki/logo.png new file mode 100644 index 0000000..44471bf Binary files /dev/null and b/data/media/wiki/logo.png differ diff --git a/data/media/win_subnet_add_01.png b/data/media/win_subnet_add_01.png new file mode 100644 index 0000000..8ab8bf1 Binary files /dev/null and b/data/media/win_subnet_add_01.png differ diff --git a/data/media/ygg_aux_routing.png b/data/media/ygg_aux_routing.png new file mode 100644 index 0000000..64c7a0d Binary files /dev/null and b/data/media/ygg_aux_routing.png differ diff --git a/data/media/yggdrasil/bittorrent/seedbox/orange-pi-pc-plus-1tb-seed-box-side-view.png b/data/media/yggdrasil/bittorrent/seedbox/orange-pi-pc-plus-1tb-seed-box-side-view.png new file mode 100644 index 0000000..f12cda5 Binary files /dev/null and b/data/media/yggdrasil/bittorrent/seedbox/orange-pi-pc-plus-1tb-seed-box-side-view.png differ diff --git a/data/media/yggdrasil/bittorrent/seedbox/orange-pi-pc-plus-1tb-seed-box.png b/data/media/yggdrasil/bittorrent/seedbox/orange-pi-pc-plus-1tb-seed-box.png new file mode 100644 index 0000000..4a31eb9 Binary files /dev/null and b/data/media/yggdrasil/bittorrent/seedbox/orange-pi-pc-plus-1tb-seed-box.png differ diff --git a/data/media/yggdrasil/dns/alfis_article.pic.png b/data/media/yggdrasil/dns/alfis_article.pic.png new file mode 100644 index 0000000..60f7782 Binary files /dev/null and b/data/media/yggdrasil/dns/alfis_article.pic.png differ diff --git a/data/media/yggdrasil/dns/alfis_article.pic0.png b/data/media/yggdrasil/dns/alfis_article.pic0.png new file mode 100644 index 0000000..383f59c Binary files /dev/null and b/data/media/yggdrasil/dns/alfis_article.pic0.png differ diff --git a/data/media/yggdrasil/dns/cooldown_alfis.png b/data/media/yggdrasil/dns/cooldown_alfis.png new file mode 100644 index 0000000..8b31be1 Binary files /dev/null and b/data/media/yggdrasil/dns/cooldown_alfis.png differ diff --git a/data/media/yggdrasil/em_w7_tlg.png b/data/media/yggdrasil/em_w7_tlg.png new file mode 100644 index 0000000..40e19b0 Binary files /dev/null and b/data/media/yggdrasil/em_w7_tlg.png differ diff --git a/data/media/yggdrasil/email/deltachat_settings.png b/data/media/yggdrasil/email/deltachat_settings.png new file mode 100644 index 0000000..4b166cc Binary files /dev/null and b/data/media/yggdrasil/email/deltachat_settings.png differ diff --git a/data/media/yggdrasil/email/yggmail_tb_acc_settings.png b/data/media/yggdrasil/email/yggmail_tb_acc_settings.png new file mode 100644 index 0000000..af0f032 Binary files /dev/null and b/data/media/yggdrasil/email/yggmail_tb_acc_settings.png differ diff --git a/data/media/yggdrasil/email/yggmail_tb_acc_view.png b/data/media/yggdrasil/email/yggmail_tb_acc_view.png new file mode 100644 index 0000000..bfbdf0b Binary files /dev/null and b/data/media/yggdrasil/email/yggmail_tb_acc_view.png differ diff --git a/data/media/yggdrasil/half_life_on_xash3d/hl-icon-ipv6.png b/data/media/yggdrasil/half_life_on_xash3d/hl-icon-ipv6.png new file mode 100644 index 0000000..9411d1c Binary files /dev/null and b/data/media/yggdrasil/half_life_on_xash3d/hl-icon-ipv6.png differ diff --git a/data/media/yggdrasil/half_life_on_xash3d/hl-icon-yggdrasil.png b/data/media/yggdrasil/half_life_on_xash3d/hl-icon-yggdrasil.png new file mode 100644 index 0000000..4e6b23b Binary files /dev/null and b/data/media/yggdrasil/half_life_on_xash3d/hl-icon-yggdrasil.png differ diff --git a/data/media/yggdrasil/half_life_on_xash3d/hl-ipv6-wall-graffiti.png b/data/media/yggdrasil/half_life_on_xash3d/hl-ipv6-wall-graffiti.png new file mode 100644 index 0000000..7e3003a Binary files /dev/null and b/data/media/yggdrasil/half_life_on_xash3d/hl-ipv6-wall-graffiti.png differ diff --git a/data/media/yggdrasil/mobile_clients/android1.png b/data/media/yggdrasil/mobile_clients/android1.png new file mode 100644 index 0000000..dfd445f Binary files /dev/null and b/data/media/yggdrasil/mobile_clients/android1.png differ diff --git a/data/media/yggdrasil/mobile_clients/android2.jpg b/data/media/yggdrasil/mobile_clients/android2.jpg new file mode 100644 index 0000000..0a02120 Binary files /dev/null and b/data/media/yggdrasil/mobile_clients/android2.jpg differ diff --git a/data/media/yggdrasil/mobile_clients/android3.jpg b/data/media/yggdrasil/mobile_clients/android3.jpg new file mode 100644 index 0000000..cda7c9b Binary files /dev/null and b/data/media/yggdrasil/mobile_clients/android3.jpg differ diff --git a/data/media/yggdrasil/mobile_clients/android4.jpg b/data/media/yggdrasil/mobile_clients/android4.jpg new file mode 100644 index 0000000..0319014 Binary files /dev/null and b/data/media/yggdrasil/mobile_clients/android4.jpg differ diff --git a/data/media/yggdrasil/mobile_clients/android6.jpg b/data/media/yggdrasil/mobile_clients/android6.jpg new file mode 100644 index 0000000..e6443d7 Binary files /dev/null and b/data/media/yggdrasil/mobile_clients/android6.jpg differ diff --git a/data/media/yggdrasil/mobile_clients/ios1.jpg b/data/media/yggdrasil/mobile_clients/ios1.jpg new file mode 100644 index 0000000..f457731 Binary files /dev/null and b/data/media/yggdrasil/mobile_clients/ios1.jpg differ diff --git a/data/media/yggdrasil/mobile_clients/ios2.jpg b/data/media/yggdrasil/mobile_clients/ios2.jpg new file mode 100644 index 0000000..a611e67 Binary files /dev/null and b/data/media/yggdrasil/mobile_clients/ios2.jpg differ diff --git a/data/media/yggdrasil/mobile_clients/ios3.jpg b/data/media/yggdrasil/mobile_clients/ios3.jpg new file mode 100644 index 0000000..65b3715 Binary files /dev/null and b/data/media/yggdrasil/mobile_clients/ios3.jpg differ diff --git a/data/media/yggdrasil/mobile_clients/ios4.jpg b/data/media/yggdrasil/mobile_clients/ios4.jpg new file mode 100644 index 0000000..c901ae1 Binary files /dev/null and b/data/media/yggdrasil/mobile_clients/ios4.jpg differ diff --git a/data/media/yggdrasil/mobile_clients/ios5.jpg b/data/media/yggdrasil/mobile_clients/ios5.jpg new file mode 100644 index 0000000..7424187 Binary files /dev/null and b/data/media/yggdrasil/mobile_clients/ios5.jpg differ diff --git a/data/media/yggdrasil/nat464-1.png b/data/media/yggdrasil/nat464-1.png new file mode 100644 index 0000000..f87d379 Binary files /dev/null and b/data/media/yggdrasil/nat464-1.png differ diff --git a/data/media/yggdrasil/pem.png b/data/media/yggdrasil/pem.png new file mode 100644 index 0000000..87068a9 Binary files /dev/null and b/data/media/yggdrasil/pem.png differ diff --git a/data/media/yggdrasil/yggdrasil-address-algorithm.png b/data/media/yggdrasil/yggdrasil-address-algorithm.png new file mode 100644 index 0000000..4607ba9 Binary files /dev/null and b/data/media/yggdrasil/yggdrasil-address-algorithm.png differ diff --git a/data/media/yggdrasil/yggdrasil_vpn.pdf b/data/media/yggdrasil/yggdrasil_vpn.pdf new file mode 100644 index 0000000..16f25b1 Binary files /dev/null and b/data/media/yggdrasil/yggdrasil_vpn.pdf differ diff --git a/data/pages/archive.txt b/data/pages/archive.txt new file mode 100644 index 0000000..40802a6 --- /dev/null +++ b/data/pages/archive.txt @@ -0,0 +1,7 @@ +====== Архив ====== + +Устаревшие и потерявшие актуальность статьи. + +===== Статьи внутри раздела ===== + +{{indexmenu>:archive}} \ No newline at end of file diff --git a/data/pages/archive/yggdrasil/bittorrent/yggtracker/v1.txt b/data/pages/archive/yggdrasil/bittorrent/yggtracker/v1.txt new file mode 100644 index 0000000..71a4a82 --- /dev/null +++ b/data/pages/archive/yggdrasil/bittorrent/yggtracker/v1.txt @@ -0,0 +1,398 @@ +====== YGGtracker v1 ====== + + +В материале рассмотрена устаревшая версия проекта. \\ +Для получения актуальной информации, обратитесь в индексный раздел [[yggdrasil:bittorrent:yggtracker|YGGtracker]] + + +Проект c [[https://github.com/YGGverse/YGGtracker|открытым исходным кодом]] для организации децентрализованного веб-реестра BitTorrent для сети Yggdrasil. + +Серверная часть реализована на базе MySQL, SphinxQL и PHP 8, интерфейс - средствами HTML/CSS, без использования JavaScript, поэтому функционально совместим с браузерами, где эта функция отключена. + +===== Базовые функции ===== + +Помимо каталога и поиска, на данный момент реализованы социальные функции: комментирование, лайки, просмотры а также информация об активных раздачах. + +Также, движок поддерживает фиды RSS, Sitemap и JSON API. + +В ближайшее время, планируется добавить такие функции, как лента активности, загрузка и обмен файлами, форки раздач и т.д. +Предусмотрена но не реализована в полной степени возможность локализации посредством Crodwin, Transifex и других площадок коллективных переводов. + +Подробнее о ходе разработки и ожидаемых функциях, можно ознакомиться в разделе README проекта. + +===== Аутентификация ===== + +YGGtracker использует внутрисетевой адрес для идентификации пользователя без привычной регистрации с указанием логина, пароля или email. +Также для входа не требуется наличие сторонних централизованных серверов аутентификации. Подлинность пользователя при авторизации гарантируется соответствием уникального адреса IPv6, подписанного локально приватным ключом Yggdrasil в диапазоне 0200::/7. + +На данный момент, сервер YGGtracker использует для авторизации адрес удаленного узла (REMOTE_ADDRESS) и не предусматривает авторизацию посредством общих прокси-серверов, в том числе заголовков X-FORWARDED-FOR в виду возможности фальсификации. +Поэтому используя совместные ресурсы, такие как бесплатные прокси сервера и VPN, пользователь должен учитывать факт возможности утери доступа к аккаунту или наличия сторонней активности от его имени. + +В перспективе, возможна разработка опции дополнительного ключа идентификации, позволяющего идентифицировать отдельного пользователя в рамках общеиспользуемого IP. + +===== Виды учетных записей ===== + +YGGtracker является средой для работы с распределенным реестром данных, на момент написания статьи, поддерживаются два вида учетных записей - Distributed (распределенный) и Local (локальный). + +При первом входе, пользователь указывает тип профиля и способ обработки его персональных данных. + +При выборе типа профиля Local, активность и адрес пользователя остаются приватными и в рамках текущего узла. +В режиме Distributed - активность и адрес пользователя будут доступны независимым узлам YGGtracker посредством JSON API, что позволяет работать с контентом на любом из серверов YGGtracker, в случае отключения одного их них. + +На момент написания статьи, смены типа учетной записи не предусмотрено, но возможно будет добавлено в ближайшее время, в рамках настроек профиля. + +===== Децентрализация ===== + +Данные в интернете представляют собой общественное достояние, создание которого требует усилий и времени. +Централизованные решения чувствительны к цензуре и зависимы от администрации, с ростом популярности нередко злоупотребляющей рекламой или вовсе передающей проекты в руки третьих лиц, в частности компаний, редко заинтересованных в первичной цели проекта. + +Проект YGGtracker призван сделать BitTorrent раздачи доступными, а реестр каталога - устойчивым к отключениям и зависимости от определенной команды. +В симбиозе с Yggdrasil, может быть легко организован любым желающим, как при наличии VPS, так и в рамках домашнего сервера, например [[yggdrasil:bittorrent:seedbox|сидбокса]], не требуя при этом наличия выделенного IP или открытого 80/443 порта. +База данных при этом, может быть мгновенно загружена с других узлов или создана с нуля для локальных потребностей. + +Децентрализация данных YGGtracker совмещает использование следующих форматов взаимодействия: + +==== Активный режим ==== + +Активный режим используется для мгновенной синхронизации активности пользователя между другими узлами. +Для этого, при выполнении определенного действия, например создания пользователем (с уровнем Distributed) раздачи, комментария и т.д., сервер YGGtracker отправляет другим узлам мета-данные события. + +Поскольку интерфейс не подразумевает работу с JavaScript, в частности асинхронными функциями, +такие события сохраняются в оперативной памяти сервера посредством Memcached и рассылаются другим узлам в течении минуты по расписанию crontab. + +Сделано это для того, чтобы пользователь ресурса не ощущал здержек при отсутствии подключения к другим узлам YGGtracker, в случае их временного отсутствия в сети. + +==== Пассивный режим ==== + +Пассивный режим представляет собой обмен данными посредством фидов штатного API. +Данный формат взаимодействия использует расписание crontab для создания локального и сбора удалённых фидов, оглашенных посредством манифеста отдельно взятого узла. + +Использование такого подхода во многом востребовано, поскольку позволяет актуализировать данные в случае, когда один из узлов был временно недоступен при синхронизации в активном режиме. + +Для идентификации данных, используется пара IPv6 пользователя и географически независимая метка времени (unixtime) контента. + +Первичные ключи (идентификаторы) экспортируются отдающими, но не импортируются принимающими узлами и необходимы только для оптимизации памяти, при локальном построении реестров связей. + +На данный момент, протокол поддерживает следующие фиды: + + * /api/manifest.json - в этом файле указаны основные настройки узла, такие как версия API, пути к фидам, сводки данных, настройки модерации, условия контента, а также перечень других узлов; принимающий узел использует этот файл для анализа и фильтрации данных. + * /api/users.json - реестр пользователей* + * /api/magnets.json - реестр раздач* + * /api/downloads.json - реестр истории загрузок* + * /api/comments.json - реестр комментариев* + * /api/stars.json - реестр наборы избранных* + * /api/views.json - реестр истории просмотров* + +* от пользователей в группе Distributed + +Фиды генерируются по расписанию в статичные дампы, поэтому обращение к ним не оказывает нагрузки на раздающий сервер. +Интервал импорта и экспорта обновлений зависит от отдельно взятого узла, как правило, в зависимости от активности сети. + +Время последнего обновления также указывается в поле updated файла manifest.json +===== Установка ===== + +==== Системные требования ==== + +Для организации узла YGGtracker потребуется наличие программных пакетов Sphinx, Memcached, Crontab, Nginx / Apache, MySQL и PHP. +При наличии данного ПО, наличие root или VPS не обязательно. + +Сервер YGGtracker не взаимодействует с сервисом Yggdrasil напрямую, но в оригинальной реализации, должен работать на узле, принимающем подключения с диапазона 0200::/7 локально или посредством прокси-шлюза. + +Требования к процессору и оперативной памяти, во многом зависят от количества посетителей и объема данных, в частности, в режиме распределенного узла - размеров JSON фидов. +В случае локального каталога, требования к серверу не больше чем, к обычному веб сайту. + +==== MySQL ==== + +Устанавливаем сервер из репозитория: + + +apt install mysql-server + + +Выполняем предварительную настройку безопасности утилитой: + + +mysql_secure_installation + + +Добавляем базу данных, пользователя, указываем пароль и уровень доступа: + + +mysql -u root -p +mysql > CREATE DATABASE IF NOT EXISTS yggtracker; +mysql > CREATE USER 'yggtracker'@'localhost' IDENTIFIED BY 'YGGTRACKER_PASSWORD'; +mysql > GRANT SELECT, INSERT, UPDATE, DELETE on *.* TO 'yggtracker'@'localhost' WITH GRANT OPTION; +mysql > FLUSH PRIVILEGES; +mysql > quit; + + +Теперь можно приступить к импорту структуры базы данных. + +Проект и структура данных, расположены в файле /database/yggtracker.mwb. + +Открыть данный формат можно официальным клиентом [[https://www.mysql.com/products/workbench/|MySQL Workbench]]. +Для импорта структуры, удобно использовать подключение по SSH, с помощью утилиты Database - Synchronize Model. + +* при подключении посредством адреса IPv6, может быть ошибка на этапе верификации хоста, обойти её можно добавив вместо IP - виртуального хоста в файл /etc/hosts или использовать IPv4. + +==== Sphinx ==== + +[[https://sphinxsearch.com/|Sphinx]] - поисковый сервер с открытым исходным кодом, поддерживающий широкий спектр настроек, включая морфологию, словоформы, +а также имеет встроенные алгоритмы релевантности, включая удобную выборку посредством языка SphinxQL. + +Помимо прочего, Sphinx ориентирован на быстродействие, в виду хранения поисковых индексов в оперативной памяти. + +Установка, как и в случае других пакетов, доступна из штатных репозиториев большинства дистрибутивов (включая ARM платформы): + + +apt install sphinxsearch + + +Далее, необходимо отредактировать файл конфигурации. +Базовый пример также доступен /example/environment/sphinx.conf + + +nano /etc/sphinxsearch/sphinx.conf + + +Используя пример из официального репозитория, указываем только актуальные параметры подключения к БД, остальные настройки можно оставить по-умолчанию. + +Сохраняем файл и запускаем сервис: + + +searchd + + +* иногда, запуск сервиса завершается ошибкой "FATAL: failed to create pid file '/run/sphinxsearch/searchd.pid': No such file or directory". Чтобы это исправить, необходимо вручную создать директорию: + + +mkdir /run/sphinxsearch + + +Теперь можно проверить работу индексатора, выполнив команду: + + +indexer --all --rotate + + +Для штатной работы YGGtracker, также указываем обновление индексов по расписанию crontab: + + +@reboot searchd +@reboot indexer --all --rotate + +* * * * * indexer magnet --rotate + + +* в перспективе, планируется использование дельта-индексов, но в виду текущего объема данных в сети, в качестве временной меры, индекс обновляется ежеминутно. + +** если сервер Sphinx не запускается при перезагрузке системы, можно добавить в crontab перед командой searchd - конструкцию sleep или использовать + + +systemctl enable sphinxsearch.service + + +==== Веб-сервер ==== + +=== Nginx === + +Настройка веб-сервера может отличаться, в зависимости от потребностей. + +В данном примере, Nginx используется для веб-сервисов в сети Yggdrasil, расположенных в поддиректориях. +В частности, для YGGtracker будет использоваться адрес вида http://[IP]/yggtracker + +Устанавливаем зависимости: + + +apt install nginx memcached php-fpm php-memcached php-mysql php-pdo php-curl + + +Поскольку работа с DNS не подразумевается, редактируем стандартный файл настроек, предварительно создав его резервную копию: + + +cp /etc/nginx/sites-available/default /etc/nginx/sites-available/default.bak + +nano /etc/nginx/sites-available/default + + +Актуальный пример содержимого также доступен в файле /example/environment/nginx + +Ниже приведен пример текущей версии, с комментариями: + + +server { + # Слушаем подключения только с IPv6, на 80 порту + listen [::]:80 default; + + # Разрешаем доступ к ресурсу только в сети Yggdrasil + allow 0200::/7; + deny all; + + # Оставляем по-умолчанию + root /var/www/html; + + # Добавим поддержку файлов PHP + index index.html index.htm index.nginx-debian.html index.php; + + # Название хоста и DNS в примере не используется + server_name _; + + # Обработка ошибок 404 + location / { + try_files $uri $uri/ =404; + } + + # Подключаем сокет PHP актуальной версии + location ~ \.php$ { + include snippets/fastcgi-php.conf; + + # Версию PHP можно узнать командой php -v + fastcgi_pass unix:/run/php/php8.1-fpm.sock; + } + + # Запрещаем доступ к случайно загруженным на хост скрытым файлам вроде .vscode, .git и тд, не смотря на то, что они находятся уровнем выше + location ~ /\. { + deny all; + } +} + + +Сохраняем и тестируем конфигурацию: + + +nginx -t + + +Перезапускаем сервер nginx: + + +service nginx restart + + +* на работающем сервере, перезапуск веб-сервера нежелателен, поэтому при внесении правок в конфигурацию, достаточно выполнить: + + +service nginx reload + + +Веб-сервер готов к работе. + +При этом, в корне веб-сервера, будет отображено стандартное приветствие nginx. +Этот путь можно использовать для основного приветствия, домашней странички или использовать 302 редирект на директорию /yggtracker. + +==== YGGtracker ==== + +Установка из репозитория на GitHub включает межверсионные обновления и рекомендуется только для разработчиков. + +Для установки стабильного релиза, используется пакетный менеджер [[https://getcomposer.org/|Composer]] + + +apt install composer + + +Устанавливаем первую версию YGGtracker: + + +composer create-project yggverse/yggtracker=1.0.0 + + +При использовании примера [[archive:yggdrasil:bittorrent:yggtracker:v1#nginx|конфигурации сервера Nginx]], установить проект в целевую директорию можно командой: + + +composer create-project yggverse/yggtracker /var/www/YGGverse/YGGtracker + + +Настраиваем доступы для веб-сервера: + + +chown -R www-data:www-data /var/www/YGGverse/YGGtracker +chmod -R 0770 /var/www/YGGverse/YGGtracker + + +При удаленной работе с файлами, удобно добавить пользователя в группу www-data + + +usermod -a -G www-data $USER + + +В целях безопасности, файлы приложения расположены уровнем выше публичной директории. +На текущем примере конфигурации, для доступа из сети, создадим ссылки: + + +ln -s /var/www/YGGverse/YGGtracker/src/public /var/www/html/yggtracker + + +При первом обращении к сайту, автоматически будут созданы файлы среды окружения (src/config/.env и src/config/env.default.php). + +Актуальная структура файла конфигурации, доступна в файле example/environment/env.example.php + +Редактируем, указывая подключение к серверам MySQL, Sphinx, memcached а также локальные настройки узла, например лимиты и правила ресурса. + +В частности, обращаем внимание на следующие константы: + + + +// Подключение к серверу MySQL + +define('DB_PORT', 3306); +define('DB_HOST', 'localhost'); +define('DB_NAME', ''); +define('DB_USERNAME', ''); +define('DB_PASSWORD', ''); + +// Добавляем модераторов, используя IPv6 в диапазоне 0200::/7 + +define('MODERATOR_IP_LIST', (array) + [ + '127.0.0.1', + // ... + ] +); + +// Если не хотим работать в децентрализованном формате - указываем false + +define('API_ENABLED', true); + + +Остальные настройки можно оставить по-умолчанию или изменить под свои требования. + +В режиме распределённого узла, при обмене данными, производится сверка совместимости условий манифеста. +Поэтому при несоответствии настроек, контент частично или полностью может быть проигнорирован, например, если длина заголовков вне диапазона принимающей стороны. + +Для максимальной совместимости, лучше использовать стандартный набор правил или предложить настройки другим участникам сети, посредством отправки PR. + +Подробности взаимодействия узлов и тонкая настройка API, будет рассмотрена в отдельном разделе. +В ближайшее время планируется добавление поддержки мета-тегов, с помощью которых, можно интегрировать импорт и экспорт тематических данных, например для книжных, музыкальных или видео-каталогов. + +Завершая установку приложения, добавим расписание в crontab (актуальная версия расписаний и рекомендуемые интервалы, также указаны в файле /example/environment/crontab): + + +* * * * * /usr/bin/php /YGGtracker/src/crontab/scrape.php > /dev/null 2>&1 +* * * * * /usr/bin/php /YGGtracker/src/crontab/export/push.php > /dev/null 2>&1 +0 5 * * * /usr/bin/php /YGGtracker/src/crontab/import/feed.php > /dev/null 2>&1 +0 0 * * * /usr/bin/php /YGGtracker/src/crontab/export/feed.php > /dev/null 2>&1 +0 0 * * * /usr/bin/php /YGGtracker/src/crontab/sitemap.php > /dev/null 2>&1 + + +После завершения конфигурации, можно вручную загрузить данные публичных профилей из других узлов: + + +php /YGGtracker/src/crontab/import/feed.php + + +Для эффективного обмена данными с другими участниками сети YGGtracker, также можно добавить свой узел в файл /src/config/nodes.json + +==== Дополнительные сервисы ==== + +Чтобы сбалансировать нагрузку на экосистему Yggdrasil при активном обмене файлами, не лишним будет организовать и использовать ориентированный на это [[yggdrasil:public_peer|публичный пир]], +а также добавить его в файл /src/config/peers.json. + +О том, как настроить собственный торрент-трекер, описано в статье [[yggdrasil:bittorrent:opentracker|Opentracker]]. + + + +===== Ссылки ===== + +[[ yggdrasil:bittorrent:yggtracker | Индексная страница проекта ]] \\ + +~~DISCUSSION~~ diff --git a/data/pages/archive/yggdrasil/dns/wyrd.txt b/data/pages/archive/yggdrasil/dns/wyrd.txt new file mode 100644 index 0000000..1aa05ff --- /dev/null +++ b/data/pages/archive/yggdrasil/dns/wyrd.txt @@ -0,0 +1,113 @@ +====== Wyrd DNS ====== + +^ :!: **Внимание!** ^ +| **Проект Wyrd устарел и не рекомендуется к использованию.** Crawler остановлен навсегда, новые домены более не добавляются автоматически ([[https://github.com/Revertron/wyrd/blob/master/README.md|readme.md]]).\\ Автором Wyrd предлагается перейти на использование DNS на основе блокчейна - [[yggdrasil:dns:alfis|ALFIS]]. | + +Wyrd - гибкое решение резолва имен в сети Yggdrasil. Резолвит общие доменные зоны и зоны OpenNIC. Также поддерживает собственную зону доменных имен .ygg с автоматической регистрацией. Разработка поддерживается пользователем [[user:rev]]. Является частичным форком краулера сети (автор Arceliar). Написан на языке Python. Репозиторий на Github: https://github.com/Revertron/wyrd. На этой странице приводится русскоязычная версия официальной документации. + +==== Введение ==== +Если вы используете сеть Yggdrasil, то вы подумали о новом DNS. Не только для преобразования имен в IP-адреса, но и для использования некоторых дополнительных записей, которые нельзя добавить в файл hosts, например CNAME, MX или TXT. И система должна быть надежной: если кто-то зарегистрировал домен, домен должен принадлежать только ему, а не передаваться случайно другому. В настоящее время существует несколько систем «crypto-dns», таких как EmerDNS и т.п., но для их хранения требуется несколько гигабайт дискового пространства. Мы не можем позволить себе это в мобильных телефонах и планшетах. Нам нужен какой-нибудь обычный кеширующий сервер для предоставления DNS-записей, чтобы установить их в мобильном, да и вообще и использовать как обычный DNS. +==== Что такое Wyrd? ==== +Wyrd - это скрипт сканера для DNS-сервера BIND, предназначенный для сбора и проверки DNS-записей из данных NodeInfo со всех узлов. Он получает данные: домены, DNS-записи, проверяет «владельца» и сохраняет их в базе данных MySQL (одна простая таблица), затем получает все записи из этой таблицы и передает их на сервер BIND. +==== Как это работает? ==== + * Проверяет все узлы (как в сканере map.ygg) на наличие информации о DNS. + * Перебирает найденные домены и проверяет их действительность, зону и владение. Если домен новый, он добавляется, если владелец (IPv6 узла) тот же, он обновляет DNS-записи, если IP не является владельцем, он просто игнорирует домен. + * Когда домен добавляется, узел (представленный IPv6) сохраняется как владелец. Дата и время регистраци (seen_first) также сохраняются. + * Если вам нужно сменить владельца на какой-то другой узел, вы устанавливаете свойство владельца на новый IPv6, и он будет изменен в БД. + * Если вы хотите использовать какой-либо другой узел в качестве «резервного владельца» в случае утери первого узла, вы можете установить свойство отката, и второй узел станет новым владельцем, когда первый пропадет в течение некоторого времени (еще не реализовано). + * В будущей версии каждый домен должен будет быть «куплен» PoW. Простой майнинг одноразового номера, который устранит захват домена или сделает его достаточно сложным. +==== Регистрация ==== +Как добавить свой домен к этим серверам? Легко! Просто добавьте необходимые DNS-записи в зону Nodeinfo в файле конфигурации Yggdrasil следующим образом: +=== Один домен === + +NodeInfo: { + dns: { + domains: [ + { + domain: example.ygg + ip: 200:1111:2222:3333:4444:5555:6666:7777 + } + ] + } +} + +=== Один домен с поддоменами === +Если вы используете массив records с type и/или TTL, то вам нужно изменить ip на data, потому что может быть также какой-то CNAME, а не только IP. + +NodeInfo: { + dns: { + domains: [ + { + domain: example.ygg + records: [ + { + data: 200:1111:2222:3333:4444:5555:6666:7777 + name: @ + ttl: 300 + type: AAAA + } + { + data: 200:1111:2222:3333:4444:5555:6666:7778 + name: ftp + ttl: 600 + type: AAAA + } + ] + } + ] + } +} + +=== Все остальные варианты с объяснением === + +NodeInfo: { + "dns": { + // Вы можете добавить контакт, как это делает WHOIS + "contact": mail@example.com + "domains": [ + { + "domain": "test.ygg", // Ваш желаемый домен + "records": [ + { + // IP-адрес для разрешения, он может отличаться от адреса вашего узла + "data": "200:149b::b722:fe09:d31:84a4", + "name": "*", // Вы можете пропустить это, по умолчанию значение "@" + "ttl": 300, // Вы можете пропустить это, по умолчанию значение 3600 (один час) + "type": "AAAA" // Это также можно пропустить, по умолчанию будет использовано значение AAAA + } + ], + // Теги будут использоваться для ранжирования и поиска в будущем, следите за обновлениями;) + "tags": [ + "test", + "dns", + "experiment" + ] + }, + { + // Вы можете попробовать несколько реальных доменов, но они будут игнорироваться :) + "domain": "google.com", + // Вместо массива "records" вы можете просто ввести IP-адрес, + // type и TTL по умолчанию - AAAA & 3600 + "ip": "200:149b::b722:fe09:d31:84a4" + } + ] + }, + "location": "Somewhere on Earth", // Общие поля + "name": "My meganode!", + } + +В настоящее время поддерживается только этот TLD: **.ygg**. Если сообществу понадобится еще, мы можем добавить. +==== Установка своего инстанса ==== + * Вам необходимо установить bind9, python3 и python3-mysqldb. Например: apt-get install bind9 python3 python3-mysqldb + * Клонируйте репозиторий https://github.com/Revertron/wyrd + * Создайте базу данных wyrd, user wyrd и предоставьте этому пользователю все привилегии для этой БД. + * Скопируйте все содержимое каталога bind в /etc/bind/ + * Измените пароль в src/config.py + * Запустите его с помощью python3 src/crawler.py + * Было бы хорошо добавить его в cron на каждые 15 минут +==== Синхронизация ==== +Вы можете спросить: что если я запустил Wyrd на своем сервере и получил домен от уже проигнорированного скваттера, а не от законного владельца? Хорошо, для этого у меня есть решение, но еще не реализовано. Поскольку у меня есть первый сервер Wyrd, я буду отправлять состояния БД после каждой модификации этого хранилища, и любой, кто запускает его сервер, не будет начинать с нуля. Его сервер будет заполнен всеми текущими записями с первого взгляда. И, что более важно, все изменения в доменах и записях можно легко отслеживать. + +===== Ссылки ===== +Mastodon: https://zhub.link/@Revertron и @Revertron на [[http://hash.null/yggdrasil_ru/|hash.null]].\\ +[[yggdrasil:dns:internal_dns|Статья "Внутрисетевые DNS"]]. diff --git a/data/pages/archive/yggdrasil/sites_and_services/search_services/yggo.txt b/data/pages/archive/yggdrasil/sites_and_services/search_services/yggo.txt new file mode 100644 index 0000000..aada301 --- /dev/null +++ b/data/pages/archive/yggdrasil/sites_and_services/search_services/yggo.txt @@ -0,0 +1,35 @@ +====== YGGo ====== + + +Проект переведен в статус архивного. Разработка продолжена в рамках новой минималистичной площадки [[ yggdrasil:sites_and_services:search_services:yo | Yo! ]] на базе поискового сервера Manticore. + + + +YGGo - проект с [[https://github.com/YGGverse/YGGo|открытым исходным кодом]] и [[https://github.com/YGGverse/YGGo#database-snaps|базой данных]], первоочередно ориентирован на поиск в сети Yggdrasil, но также поддерживает конфигурацию для работы с другими сетями. + +Индексатор поддерживает различные типы данных, включая мультимедийные форматы. Реализованы базовые алгоритмы PR, поиск по слово-формам, словари лематизации. + +Помимо поиска, проект реализует сохранение снимков истории страниц (snaps) по принципу [[https://web.archive.org/|Webarchive]].\\ +Добавлена возможность кластерного хранения снимков посредством протокола FTP, для распределения данных и минимизации требований к дисковому пространству вычислительного сервера. + +На момент написания материала, содержит в индексе около 700,000 страниц. + +===== Архитектура ===== + +Исходный код написан на языке PHP 8. Клиентская часть, как и в остальных [[https://github.com/orgs/YGGverse/repositories|проектах]] YGGverse - не использует JavaScript. + +В [[https://github.com/YGGverse/YGGo/tree/sqliteway|первом прототипе]] использовалась база данных SQLite и полнотекстовый поиск FTS5.\\ +Вскоре был осуществлен переход на MySQL и поисковый сервер Sphinx. + +Проект предусматривает открытый обмен поисковыми индексами, имеется поддержка JSON API, также периодически публикуются дампы просканированных страниц. + +====== Инстанции ====== + +* [[http://[201:23b4:991a:634d:8359:4521:5576:15b7]/yggo/|Официальный узел]] + +====== Ссылки ====== + +* [[https://github.com/YGGverse/YGGo|Исходный код на GitHub]]\\ +* [[https://github.com/YGGverse/YGGo#database-snaps|Дампы индексов]] + +~~DISCUSSION~~ diff --git a/data/pages/en/hm/hm.txt b/data/pages/en/hm/hm.txt new file mode 100644 index 0000000..6a3b12d --- /dev/null +++ b/data/pages/en/hm/hm.txt @@ -0,0 +1,5 @@ +====== Memes / Humor ====== + +===== Articles ===== + +{{indexmenu>:en:hm}} diff --git a/data/pages/en/hm/not_a_goal.txt b/data/pages/en/hm/not_a_goal.txt new file mode 100644 index 0000000..3709c70 --- /dev/null +++ b/data/pages/en/hm/not_a_goal.txt @@ -0,0 +1,37 @@ +====== Not a goal of Yggdrasil ====== +Welcome to this article! If you've been sent here, it means you're being bullshit and don't understand that "is not a goal of Yggdrasil"! +Likely you was been also politely told to fuck off go somewhere other than here. + +This phrase comes from main developer Neil Alexander's answer in the Matrix room to a question about Yggdrasil's advantages over Tor: + +> <@karl:kashofer.org>: hi all ! whats the advantage of yggdrasil vs tor ? With hidden services tor provides a internal network and also anonymity. +> <@neilalexander:neilalexander.dev>: Anonymity **is not a goal of Yggdrasil**. We are a project trying to build an efficient and scalable mesh routing protocol, one that finds the best possible route through the network with a given set of links + +And so, what is not the goal of [[yggdrasil:Yggdrasil]]? + +===== Anonymity ===== +If you want anonymity, then you are obviously at the wrong place. +Let's rehearse it together - "not a goal of Yggdrasil!" + +===== Security ===== +Obviously, who would argue, that's obviously is "not a goal of Yggdrasil!" +As soon as you install Yggdrasil on your device, +take care of the firewall, because your security is the purpose of the firewall! + +===== Stability ===== +"Not a goal of Yggdrasil", as weekly panic is common. + +===== Proxy mode ===== +Proxy mode (HTTP/SOCKS) of Yggdrasil would help with browser support, and, for example, with creating Yggdrasil browser extension with no installation! +This would solve insecure connection problem (HTTP is "insecure"), resolve 300:: subnet collisions, but that "is not a goal of Yggdrasil"! +(By the way, Neil was doing SOCKS-mode support [[https://github.com/yggdrasil-network/yggdrasil-go/tree/netstack|yggstack]]) + +===== Autopeering ===== +How nice it would be if a simple installation was enough to run Yggdrasil, with no additional configuration, but this "is not a goal of Yggdrasil"! + +====== Links ====== + * [[en:yggdrasil:connect_through_tor]] + * [[en:i2p|I2P]] + * [[en:yggdrasil:firewall_setup]] + * [[en:yggdrasil:network_connection_variants]] + * [[en:yggdrasil:alt_clients:popura]] diff --git a/data/pages/en/hm/wednesday.txt b/data/pages/en/hm/wednesday.txt new file mode 100644 index 0000000..c1b39df --- /dev/null +++ b/data/pages/en/hm/wednesday.txt @@ -0,0 +1,3 @@ +====== Wednesday ====== +Wednesday — a day of next Yggdrasil release. Any question about when Yggdrasil's N-th release will be, as a rule, a little less than all members of the community say, "Wednesday". No one mentions which wednesday they are talking about. + diff --git a/data/pages/en/i2p.txt b/data/pages/en/i2p.txt new file mode 100644 index 0000000..3962459 --- /dev/null +++ b/data/pages/en/i2p.txt @@ -0,0 +1,89 @@ +======I2P====== +I2P (Invisible Internet Project or Invisible Internet Protocol) -- anonymous overlay decentralized peer-to-peer network. Overlay -- works on top of other networks, for example, the regular Internet; decentralized -- distributed, without a single point of failure: one node falls, half of the network, or 3 users remain in the entire network -- I2P will still function. I2P is a peer-to-peer network because all participants have equal rights and opportunities: each user of the hidden network builds his tunnels through other participants and is himself a potential link in the chain of another user. At the same time, natural network activity does not compromise the subscriber in front of the home provider or participants in the hidden network. + +{{ i2p:i2p-over-ygg.jpg?440}} I2P outperforms [[https://torproject.org|Tor]] by anonymity parameters, but does not have an output proxy to the regular Internet by default. The I2P network is completely decentralized and open source. There are two web clients: Java (first released in 2003) and i2pd in C ++ (first released in 2014). The C ++ I2P router outperforms its predecessor in speed and stability and is highly recommended. The main discussion of i2pd development is on the #dev channel on the [[social_media:ilita_network|ILITA]]. When working through Yggdrasil, the I2P network does not form a separate segment, but remains unified: users from the regular Internet are also available. A schematic of the interaction of Yggdrasil-only routers with other network participants is shown in the illustration. + +Details about the mechanism of operation of the I2P network and the history of the appearance of the alternative i2pd client are described in the video (en): [[https://www.youtube.com/watch?v=95hSAMEwrlM|YouTube.com]], +[[https://open.tube/videos/watch/58fb286f-4251-44ad-883e-98c53ea9987d|Open.Tube]], [[http://[324:9de3:fea4:f6ac::ace]/files/video/english/4_I2P_and_I2Pd/About_I2P.mp4|Intranet repository]]. + +======Installing====== +The easiest and most correct option is to download the package for your operating system from the official [[https://github.com/PurpleI2P/i2pd/releases|releases page]]. Also i2pd exists in the standard repositories of some unix-like operating systems like Debian or Ubuntu, and is available for installation via the short line ''sudo apt-get install i2pd'', but this installation method is not recommended, since there are always very outdated versions in the default repositories.\\ +However, there is an up-to-date community repository, adding which to your system, you can forget about rotten packages and update in a familiar and convenient way. For comprehensive installation information, see [[https://i2pd.readthedocs.io/en/latest/user-guide/install/|documentation]] i2pd.\\ Below are instructions for Debian and Ubuntu using the user ''R4SAS'' repository in the clearnet: + +# Ubuntu +sudo add-apt-repository ppa:purplei2p/i2pd +sudo apt-get update +sudo apt-get install i2pd + +# Debian +sudo apt-get install apt-transport-https +wget -q -O - https://repo.i2pd.xyz/.help/add_repo | sudo bash -s - +apt-get update +sudo apt-get install i2pd + +The same, but with access via Yggdrasil, i.e. intranet repository: + +# Debian +wget -q -O - http://[321:c99a:91a1:cd2c::4]/.help-ygg/add_repo | sudo bash -s - +sudo apt-get update +sudo apt-get install i2pd + + +The community supports a Firefox-based I2P browser similar in concept to the Tor browser. You can download the browser from [[https://github.com/PurpleI2P/i2pdbrowser/releases|releases page]] of the corresponding git repository of the PurpleI2P team (distributed only for Windows). The package of a portable browser may not contain the latest version of i2pd, so you will probably need to manually replace the executable file ''i2pd.exe'' to use the current version. + +======I2P over Yggdrasil====== +Starting from version 2.36.0 i2pd has a mode of operation that excludes connections via the regular Internet. Below is an example of a router configuration that communicates with a hidden I2P network exclusively through other Yggdrasil routers. By default, the configuration file is located in ''/etc/i2pd/i2pd.conf'' or ''~/.i2pd/i2pd.conf'', and for Windows OS: ''%AppData%\i2pd\i2pd.conf''. For the I2P router to work in "Portable" mode, when all data is stored in the directory with the executable file, you need to create the "i2pd.conf" file in the same folder where the program binary file is located. +daemon=true # note: remove it if you running on Windows! +ipv4=false +ipv6=false +ssu=false +ntcp2.enabled=false +meshnets.yggdrasil=true + +If you want the I2P router to publish the address from [[yggdrasil:subnet_setting|your Yggdrasil subnet]] used on the device, add the line: +meshnets.yggaddress=your_local_yggdrasil_address +At the first start, i2pd will contact the start server inside the Yggdrasil network, which will give away several routers sufficient to get started. Then, the router's network base will start automatically replenishing. Thus, the use of I2P will do without a single call to the clearnet. + +=====Autostart===== +An I2P router (i2pd) at system startup (in the example Debian) can start earlier than the Yggdrasil service. This leads to a forced manual restart of i2pd. The yggdrasil interface is not detected by the I2P router until the Yggdrasil service starts. There are two main ways to solve this problem (use whichever you like): + +**1)** After starting Yggdrasil, set the delay before starting the dependent services: + - mkdir /etc/systemd/system/i2pd.service.d + - nano /etc/systemd/system/i2pd.service.d/override.conf + - [Unit] +After=network.target yggdrasil.service //Ctrl+O -- save changes to the file, Ctrl+X - exit from nano editor// + - mkdir /etc/systemd/system/yggdrasil.service.d + - nano /etc/systemd/system/yggdrasil.service.d/override.conf + - [Service] +# adding post-up delay to bring up yggdrasil tunnel interface before starting other services which depends on ygg +ExecStartPost=/bin/sleep 5 //Ctrl+O -- save changes to the file, Ctrl+X - exit from nano editor// + +**2)** Set i2pd start timer: + - Create file ''/etc/systemd/system/i2pd.timer'' sudo nano /etc/systemd/system/i2pd.timer + - Complete the timer file as follows: [Unit] +Description=i2pd service timer +After=yggdrasil.service + +[Timer] +OnActiveSec=10 + +[Install] +WantedBy=multi-user.target //Ctrl+O -- save changes to the file, Ctrl+X - exit from nano editor// + - sudo systemctl disable i2pd.service + - sudo systemctl enable i2pd.timer + +======Network support====== +How can the average user contribute to the development of the I2P network? This question is asked by many enthusiasts. And here's the answer: + - Enable all existing network interfaces for greater network connectivity ipv4=true +ipv6=true +meshnets.yggdrasil=true + - And also enable the floodfill mode - a kind of I2P dispatcher (the load on the processor and network channel may periodically increase): floodfill=true + +Please note that these settings are primarily relevant for server administrators or home users who have a dedicated IP address. In any case, keeping the I2P router on for as long as possible is a good contribution to the overall power of the network. A network client running even on a smartphone (!) Can receive "probe" tunnels created by other participants to explore the network and have extremely low traffic. + +======References====== +[[http://[324:71e:281a:9ed3::ace]/ygg-i2p/|Monitoring]] the number of Yggdrasil routers in the I2P network\\ +[[https://github.com/PurpleI2P/|Git repository]]\\ +[[https://github.com/PurpleI2P/i2pd/releases|Releases page]] for download i2pd\\ +[[https://i2pd.readthedocs.io/en/latest/|Documentation]]\\ +[[https://geti2p.net/ru/|Java-router]] (client without Yggdrasil support) \ No newline at end of file diff --git a/data/pages/en/playground/playground.txt b/data/pages/en/playground/playground.txt new file mode 100644 index 0000000..b9442d3 --- /dev/null +++ b/data/pages/en/playground/playground.txt @@ -0,0 +1 @@ +Playground diff --git a/data/pages/en/sidebar.txt b/data/pages/en/sidebar.txt new file mode 100644 index 0000000..e3b9763 --- /dev/null +++ b/data/pages/en/sidebar.txt @@ -0,0 +1,3 @@ +~~NOCACHE~~ +---- +{{indexmenu>:en#3 hm#1| skipns=/playground|user$/ :inside: nocookie navbar nsort msort dsort}} \ No newline at end of file diff --git a/data/pages/en/start.txt b/data/pages/en/start.txt new file mode 100644 index 0000000..5c7a6d1 --- /dev/null +++ b/data/pages/en/start.txt @@ -0,0 +1,32 @@ +====== Welcome to the wiki of Yggdrasil network users ====== + +Let's create a knowledge base together! + +===== How to use ===== + +When registering, you can specify any e-mail address, mailing is currently not carried out. + +An RSS feed is available at: [[this>feed.php|RSS feed]] + +How to create and edit articles: [[en:wiki:article_create|How to create an article]] + +Complete documentation for dokuwiki: https://www.dokuwiki.org/manual + +Feel free to share your knowledge! + +===== Frequently asked questions Yggdrasil ===== + *[[yggdrasil:sites_and_services|What services are available in the network?]] + *[[yggdrasil:run_website|How to start a site in Yggdrasil?]] + *[[yggdrasil:subnet_setting|How do I set up multiple IP addresses on a single device?]] + *[[yggdrasil:nginx_proxying|How do I create a mirror of an Internet site in the Yggdrasil network?]] + *[[yggdrasil:dns:internal_dns|How to get to a site with a domain name, such as site.ygg or site.mesh?]] + *[[archive:yggdrasil:dns:wyrd|How do I get a domain name for my site on the Yggdrasil network?]] + *[[yggdrasil:network_connection_variants|How do I use Yggdrasil without installing its client on my device?]] + *[[yggdrasil:mesh_setup|How do I connect to Yggdrasil using mesh technology?]] + *[[yggdrasil:public_peer|What is a public peer?]] + *[[yggdrasil:public_peer#Как стать публичным пиром|How do I become a public peer?]] + *[[yggdrasil:connect_through_tor|How do I connect to the network via tor?]] + *[[yggdrasil:tunnels:ckr|How do I configure tunneling via Yggdrasil?]] + *[[yggdrasil:several_services_on_machine|How do I launch multiple services on the same device?]] + *[[yggdrasil:crawler|How do I get information about all nodes in the network?]] + diff --git a/data/pages/en/wiki/article_create.txt b/data/pages/en/wiki/article_create.txt new file mode 100644 index 0000000..6096c1b --- /dev/null +++ b/data/pages/en/wiki/article_create.txt @@ -0,0 +1,20 @@ +====== How to create an article ====== + +In this wiki, articles are created in the same way as in any other wiki. Just create a link to a non-existent article, click on that link, and click the "Create Page" button. You can create a link to a non-existent article in the [[en:playground:playground|Playground]] (You can also practice in the design of articles there). + +Also You can create an article by going to the address of the form: %%doku.php?id=section:article_name%%, where the section is specified before the colon (for example: yggdrasil, pi-hole, unix, i2p), and the non-existent article name is specified after the colon. This is the easiest way. + +For articles in languages other than Russian, appropriate sections are used: en, de, fr. The link to the French article in the Yggdrasil section will look like this: %%doku.php?id=fr:yggdrasil:article_name%% + +Links to articles in English will look like this: %%doku.php?id=en:section:article_name%% + +It is recommended to set the names (not titles) of sections and articles in English (Latin alphabet), so that foreign-speaking users do not experience inconveniences in navigation. + +It is also recommended to follow the design style of other articles and, if possible, describe the material in detail, as for non-specialists. + +This resource uses the [[doku>plugin:indexmenu|IndexMenu plugin]], which automatically generates a navigation menu on the left side of the page. The names of the articles in this menu are taken from the headings (from the first heading H1, H2 or H3), which, according to the [[en:wiki:syntax|syntax]], are set using the characters %%=%%. + +====== Links ====== + +Page editing: [[doku>editing|https://www.dokuwiki.org/editing]] \\ +Formatting Syntax: [[en:wiki:syntax]] \ No newline at end of file diff --git a/data/pages/en/wiki/dokuwiki.txt b/data/pages/en/wiki/dokuwiki.txt new file mode 100644 index 0000000..1161499 --- /dev/null +++ b/data/pages/en/wiki/dokuwiki.txt @@ -0,0 +1,63 @@ +====== DokuWiki ====== + +[[doku>wiki:dokuwiki|{{wiki:dokuwiki-128.png }}]] DokuWiki is a simple to use and highly versatile Open Source [[wp>wiki]] software that doesn't require a database. It is loved by users for its clean and readable [[wiki:syntax]]. The ease of maintenance, backup and integration makes it an administrator's favorite. Built in [[doku>acl|access controls]] and [[doku>auth|authentication connectors]] make DokuWiki especially useful in the enterprise context and the large number of [[doku>plugins]] contributed by its vibrant community allow for a broad range of use cases beyond a traditional wiki. + +Read the [[doku>manual|DokuWiki Manual]] to unleash the full power of DokuWiki. + +===== Download ===== + +DokuWiki is available at https://download.dokuwiki.org/ + + +===== Read More ===== + +All documentation and additional information besides the [[syntax|syntax description]] is maintained in the DokuWiki at [[doku>|www.dokuwiki.org]]. + +**About DokuWiki** + + * [[doku>features|A feature list]] :!: + * [[doku>users|Happy Users]] + * [[doku>press|Who wrote about it]] + * [[doku>blogroll|What Bloggers think]] + * [[https://www.wikimatrix.org/show/DokuWiki|Compare it with other wiki software]] + +**Installing DokuWiki** + + * [[doku>requirements|System Requirements]] + * [[https://download.dokuwiki.org/|Download DokuWiki]] :!: + * [[doku>changes|Change Log]] + * [[doku>Install|How to install or upgrade]] :!: + * [[doku>config|Configuration]] + +**Using DokuWiki** + + * [[doku>syntax|Wiki Syntax]] + * [[doku>manual|The manual]] :!: + * [[doku>FAQ|Frequently Asked Questions (FAQ)]] + * [[doku>glossary|Glossary]] + +**Customizing DokuWiki** + + * [[doku>tips|Tips and Tricks]] + * [[doku>Template|How to create and use templates]] + * [[doku>plugins|Installing plugins]] + * [[doku>development|Development Resources]] + +**DokuWiki Feedback and Community** + + * [[doku>newsletter|Subscribe to the newsletter]] :!: + * [[doku>mailinglist|Join the mailing list]] + * [[https://forum.dokuwiki.org|Check out the user forum]] + * [[doku>irc|Talk to other users in the IRC channel]] + * [[https://github.com/splitbrain/dokuwiki/issues|Submit bugs and feature wishes]] + * [[doku>thanks|Some humble thanks]] + + +===== Copyright ===== + +2004-2020 (c) Andreas Gohr ((Please do not contact me for help and support -- use the [[doku>mailinglist]] or [[https://forum.dokuwiki.org|forum]] instead)) and the DokuWiki Community + +The DokuWiki engine is licensed under [[https://www.gnu.org/licenses/gpl.html|GNU General Public License]] Version 2. If you use DokuWiki in your company, consider [[doku>donate|donating]] a few bucks ;-). + +Not sure what this means? See the [[doku>faq:license|FAQ on the Licenses]]. + diff --git a/data/pages/en/wiki/stats.txt b/data/pages/en/wiki/stats.txt new file mode 100644 index 0000000..00b672f --- /dev/null +++ b/data/pages/en/wiki/stats.txt @@ -0,0 +1,24 @@ +~~NOCACHE~~ +====== Statistics ====== + +{{statdisplay>all}} + + +{{statdisplay>all?graph}} + + +{{statdisplay>one month}} + + + +{{statdisplay>month by day}} + +{{statdisplay>month by day?graph}} + +{{statdisplay>top referers}} + +{{statdisplay>top entries}} + +{{statdisplay>top urls}} + +{{statdisplay>user agents}} \ No newline at end of file diff --git a/data/pages/en/wiki/syntax.txt b/data/pages/en/wiki/syntax.txt new file mode 100644 index 0000000..e409dd2 --- /dev/null +++ b/data/pages/en/wiki/syntax.txt @@ -0,0 +1,526 @@ +====== Formatting Syntax ====== + +[[doku>DokuWiki]] supports some simple markup language, which tries to make the datafiles to be as readable as possible. This page contains all possible syntax you may use when editing the pages. Simply have a look at the source of this page by pressing "Edit this page". If you want to try something, just use the [[playground:playground|playground]] page. The simpler markup is easily accessible via [[doku>toolbar|quickbuttons]], too. + +===== Basic Text Formatting ===== + +DokuWiki supports **bold**, //italic//, __underlined__ and ''monospaced'' texts. Of course you can **__//''combine''//__** all these. + + DokuWiki supports **bold**, //italic//, __underlined__ and ''monospaced'' texts. + Of course you can **__//''combine''//__** all these. + +You can use subscript and superscript, too. + + You can use subscript and superscript, too. + +You can mark something as deleted as well. + + You can mark something as deleted as well. + +**Paragraphs** are created from blank lines. If you want to **force a newline** without a paragraph, you can use two backslashes followed by a whitespace or the end of line. + +This is some text with some linebreaks\\ Note that the +two backslashes are only recognized at the end of a line\\ +or followed by\\ a whitespace \\this happens without it. + + This is some text with some linebreaks\\ Note that the + two backslashes are only recognized at the end of a line\\ + or followed by\\ a whitespace \\this happens without it. + +You should use forced newlines only if really needed. + +===== Links ===== + +DokuWiki supports multiple ways of creating links. + +==== External ==== + +External links are recognized automagically: http://www.google.com or simply www.google.com - You can set the link text as well: [[http://www.google.com|This Link points to google]]. Email addresses like this one: are recognized, too. + + DokuWiki supports multiple ways of creating links. External links are recognized + automagically: http://www.google.com or simply www.google.com - You can set + link text as well: [[http://www.google.com|This Link points to google]]. Email + addresses like this one: are recognized, too. + +==== Internal ==== + +Internal links are created by using square brackets. You can either just give a [[pagename]] or use an additional [[pagename|link text]]. + + Internal links are created by using square brackets. You can either just give + a [[pagename]] or use an additional [[pagename|link text]]. + +[[doku>pagename|Wiki pagenames]] are converted to lowercase automatically, special characters are not allowed. + +You can use [[some:namespaces]] by using a colon in the pagename. + + You can use [[some:namespaces]] by using a colon in the pagename. + +For details about namespaces see [[doku>namespaces]]. + +Linking to a specific section is possible, too. Just add the section name behind a hash character as known from HTML. This links to [[syntax#internal|this Section]]. + + This links to [[syntax#internal|this Section]]. + +Notes: + + * Links to [[syntax|existing pages]] are shown in a different style from [[nonexisting]] ones. + * DokuWiki does not use [[wp>CamelCase]] to automatically create links by default, but this behavior can be enabled in the [[doku>config]] file. Hint: If DokuWiki is a link, then it's enabled. + * When a section's heading is changed, its bookmark changes, too. So don't rely on section linking too much. + +==== Interwiki ==== + +DokuWiki supports [[doku>Interwiki]] links. These are quick links to other Wikis. For example this is a link to Wikipedia's page about Wikis: [[wp>Wiki]]. + + DokuWiki supports [[doku>Interwiki]] links. These are quick links to other Wikis. + For example this is a link to Wikipedia's page about Wikis: [[wp>Wiki]]. + +==== Windows Shares ==== + +Windows shares like [[\\server\share|this]] are recognized, too. Please note that these only make sense in a homogeneous user group like a corporate [[wp>Intranet]]. + + Windows Shares like [[\\server\share|this]] are recognized, too. + +Notes: + + * For security reasons direct browsing of windows shares only works in Microsoft Internet Explorer per default (and only in the "local zone"). + * For Mozilla and Firefox it can be enabled through different workaround mentioned in the [[http://kb.mozillazine.org/Links_to_local_pages_do_not_work|Mozilla Knowledge Base]]. However, there will still be a JavaScript warning about trying to open a Windows Share. To remove this warning (for all users), put the following line in ''conf/lang/en/lang.php'' (more details at [[doku>localization#changing_some_localized_texts_and_strings_in_your_installation|localization]]): + + +==== Image Links ==== + +You can also use an image to link to another internal or external page by combining the syntax for links and [[#images_and_other_files|images]] (see below) like this: + + [[http://php.net|{{wiki:dokuwiki-128.png}}]] + +[[http://php.net|{{wiki:dokuwiki-128.png}}]] + +Please note: The image formatting is the only formatting syntax accepted in link names. + +The whole [[#images_and_other_files|image]] and [[#links|link]] syntax is supported (including image resizing, internal and external images and URLs and interwiki links). + +===== Footnotes ===== + +You can add footnotes ((This is a footnote)) by using double parentheses. + + You can add footnotes ((This is a footnote)) by using double parentheses. + +===== Sectioning ===== + +You can use up to five different levels of headlines to structure your content. If you have more than three headlines, a table of contents is generated automatically -- this can be disabled by including the string ''~~NOTOC~~'' in the document. + +==== Headline Level 3 ==== +=== Headline Level 4 === +== Headline Level 5 == + + ==== Headline Level 3 ==== + === Headline Level 4 === + == Headline Level 5 == + +By using four or more dashes, you can make a horizontal line: + +---- + +===== Media Files ===== + +You can include external and internal [[doku>images|images, videos and audio files]] with curly brackets. Optionally you can specify the size of them. + +Real size: {{wiki:dokuwiki-128.png}} + +Resize to given width: {{wiki:dokuwiki-128.png?50}} + +Resize to given width and height((when the aspect ratio of the given width and height doesn't match that of the image, it will be cropped to the new ratio before resizing)): {{wiki:dokuwiki-128.png?200x50}} + +Resized external image: {{https://secure.php.net/images/php.gif?200x50}} + + Real size: {{wiki:dokuwiki-128.png}} + Resize to given width: {{wiki:dokuwiki-128.png?50}} + Resize to given width and height: {{wiki:dokuwiki-128.png?200x50}} + Resized external image: {{https://secure.php.net/images/php.gif?200x50}} + + +By using left or right whitespaces you can choose the alignment. + +{{ wiki:dokuwiki-128.png}} + +{{wiki:dokuwiki-128.png }} + +{{ wiki:dokuwiki-128.png }} + + {{ wiki:dokuwiki-128.png}} + {{wiki:dokuwiki-128.png }} + {{ wiki:dokuwiki-128.png }} + +Of course, you can add a title (displayed as a tooltip by most browsers), too. + +{{ wiki:dokuwiki-128.png |This is the caption}} + + {{ wiki:dokuwiki-128.png |This is the caption}} + +For linking an image to another page see [[#Image Links]] above. + +==== Supported Media Formats ==== + +DokuWiki can embed the following media formats directly. + +| Image | ''gif'', ''jpg'', ''png'' | +| Video | ''webm'', ''ogv'', ''mp4'' | +| Audio | ''ogg'', ''mp3'', ''wav'' | +| Flash | ''swf'' | + +If you specify a filename that is not a supported media format, then it will be displayed as a link instead. + +By adding ''?linkonly'' you provide a link to the media without displaying it inline + + {{wiki:dokuwiki-128.png?linkonly}} + +{{wiki:dokuwiki-128.png?linkonly}} This is just a link to the image. + +==== Fallback Formats ==== + +Unfortunately not all browsers understand all video and audio formats. To mitigate the problem, you can upload your file in different formats for maximum browser compatibility. + +For example consider this embedded mp4 video: + + {{video.mp4|A funny video}} + +When you upload a ''video.webm'' and ''video.ogv'' next to the referenced ''video.mp4'', DokuWiki will automatically add them as alternatives so that one of the three files is understood by your browser. + +Additionally DokuWiki supports a "poster" image which will be shown before the video has started. That image needs to have the same filename as the video and be either a jpg or png file. In the example above a ''video.jpg'' file would work. + +===== Lists ===== + +Dokuwiki supports ordered and unordered lists. To create a list item, indent your text by two spaces and use a ''*'' for unordered lists or a ''-'' for ordered ones. + + * This is a list + * The second item + * You may have different levels + * Another item + + - The same list but ordered + - Another item + - Just use indention for deeper levels + - That's it + + + * This is a list + * The second item + * You may have different levels + * Another item + + - The same list but ordered + - Another item + - Just use indention for deeper levels + - That's it + + +Also take a look at the [[doku>faq:lists|FAQ on list items]]. + +===== Text Conversions ===== + +DokuWiki can convert certain pre-defined characters or strings into images or other text or HTML. + +The text to image conversion is mainly done for smileys. And the text to HTML conversion is used for typography replacements, but can be configured to use other HTML as well. + +==== Text to Image Conversions ==== + +DokuWiki converts commonly used [[wp>emoticon]]s to their graphical equivalents. Those [[doku>Smileys]] and other images can be configured and extended. Here is an overview of Smileys included in DokuWiki: + + * 8-) %% 8-) %% + * 8-O %% 8-O %% + * :-( %% :-( %% + * :-) %% :-) %% + * =) %% =) %% + * :-/ %% :-/ %% + * :-\ %% :-\ %% + * :-? %% :-? %% + * :-D %% :-D %% + * :-P %% :-P %% + * :-O %% :-O %% + * :-X %% :-X %% + * :-| %% :-| %% + * ;-) %% ;-) %% + * ^_^ %% ^_^ %% + * :?: %% :?: %% + * :!: %% :!: %% + * LOL %% LOL %% + * FIXME %% FIXME %% + * DELETEME %% DELETEME %% + +==== Text to HTML Conversions ==== + +Typography: [[DokuWiki]] can convert simple text characters to their typographically correct entities. Here is an example of recognized characters. + +-> <- <-> => <= <=> >> << -- --- 640x480 (c) (tm) (r) +"He thought 'It's a man's world'..." + + +-> <- <-> => <= <=> >> << -- --- 640x480 (c) (tm) (r) +"He thought 'It's a man's world'..." + + +The same can be done to produce any kind of HTML, it just needs to be added to the [[doku>entities|pattern file]]. + +There are three exceptions which do not come from that pattern file: multiplication entity (640x480), 'single' and "double quotes". They can be turned off through a [[doku>config:typography|config option]]. + +===== Quoting ===== + +Some times you want to mark some text to show it's a reply or comment. You can use the following syntax: + + +I think we should do it + +> No we shouldn't + +>> Well, I say we should + +> Really? + +>> Yes! + +>>> Then lets do it! + + +I think we should do it + +> No we shouldn't + +>> Well, I say we should + +> Really? + +>> Yes! + +>>> Then lets do it! + +===== Tables ===== + +DokuWiki supports a simple syntax to create tables. + +^ Heading 1 ^ Heading 2 ^ Heading 3 ^ +| Row 1 Col 1 | Row 1 Col 2 | Row 1 Col 3 | +| Row 2 Col 1 | some colspan (note the double pipe) || +| Row 3 Col 1 | Row 3 Col 2 | Row 3 Col 3 | + +Table rows have to start and end with a ''|'' for normal rows or a ''^'' for headers. + + ^ Heading 1 ^ Heading 2 ^ Heading 3 ^ + | Row 1 Col 1 | Row 1 Col 2 | Row 1 Col 3 | + | Row 2 Col 1 | some colspan (note the double pipe) || + | Row 3 Col 1 | Row 3 Col 2 | Row 3 Col 3 | + +To connect cells horizontally, just make the next cell completely empty as shown above. Be sure to have always the same amount of cell separators! + +Vertical tableheaders are possible, too. + +| ^ Heading 1 ^ Heading 2 ^ +^ Heading 3 | Row 1 Col 2 | Row 1 Col 3 | +^ Heading 4 | no colspan this time | | +^ Heading 5 | Row 2 Col 2 | Row 2 Col 3 | + +As you can see, it's the cell separator before a cell which decides about the formatting: + + | ^ Heading 1 ^ Heading 2 ^ + ^ Heading 3 | Row 1 Col 2 | Row 1 Col 3 | + ^ Heading 4 | no colspan this time | | + ^ Heading 5 | Row 2 Col 2 | Row 2 Col 3 | + +You can have rowspans (vertically connected cells) by adding ''%%:::%%'' into the cells below the one to which they should connect. + +^ Heading 1 ^ Heading 2 ^ Heading 3 ^ +| Row 1 Col 1 | this cell spans vertically | Row 1 Col 3 | +| Row 2 Col 1 | ::: | Row 2 Col 3 | +| Row 3 Col 1 | ::: | Row 2 Col 3 | + +Apart from the rowspan syntax those cells should not contain anything else. + + ^ Heading 1 ^ Heading 2 ^ Heading 3 ^ + | Row 1 Col 1 | this cell spans vertically | Row 1 Col 3 | + | Row 2 Col 1 | ::: | Row 2 Col 3 | + | Row 3 Col 1 | ::: | Row 2 Col 3 | + +You can align the table contents, too. Just add at least two whitespaces at the opposite end of your text: Add two spaces on the left to align right, two spaces on the right to align left and two spaces at least at both ends for centered text. + +^ Table with alignment ^^^ +| right| center |left | +|left | right| center | +| xxxxxxxxxxxx | xxxxxxxxxxxx | xxxxxxxxxxxx | + +This is how it looks in the source: + + ^ Table with alignment ^^^ + | right| center |left | + |left | right| center | + | xxxxxxxxxxxx | xxxxxxxxxxxx | xxxxxxxxxxxx | + +Note: Vertical alignment is not supported. + +===== No Formatting ===== + +If you need to display text exactly like it is typed (without any formatting), enclose the area either with ''%%%%'' tags or even simpler, with double percent signs ''%%''. + + +This is some text which contains addresses like this: http://www.splitbrain.org and **formatting**, but nothing is done with it. + +The same is true for %%//__this__ text// with a smiley ;-)%%. + + + This is some text which contains addresses like this: http://www.splitbrain.org and **formatting**, but nothing is done with it. + + The same is true for %%//__this__ text// with a smiley ;-)%%. + +===== Code Blocks ===== + +You can include code blocks into your documents by either indenting them by at least two spaces (like used for the previous examples) or by using the tags ''%%%%'' or ''%%%%''. + + This is text is indented by two spaces. + + +This is preformatted code all spaces are preserved: like <-this + + + +This is pretty much the same, but you could use it to show that you quoted a file. + + +Those blocks were created by this source: + + This is text is indented by two spaces. + + + This is preformatted code all spaces are preserved: like <-this + + + + This is pretty much the same, but you could use it to show that you quoted a file. + + +==== Syntax Highlighting ==== + +[[wiki:DokuWiki]] can highlight sourcecode, which makes it easier to read. It uses the [[http://qbnz.com/highlighter/|GeSHi]] Generic Syntax Highlighter -- so any language supported by GeSHi is supported. The syntax uses the same code and file blocks described in the previous section, but this time the name of the language syntax to be highlighted is included inside the tag, e.g. '''' or ''''. + + +/** + * The HelloWorldApp class implements an application that + * simply displays "Hello World!" to the standard output. + */ +class HelloWorldApp { + public static void main(String[] args) { + System.out.println("Hello World!"); //Display the string. + } +} + + +The following language strings are currently recognized: //4cs 6502acme 6502kickass 6502tasm 68000devpac abap actionscript3 actionscript ada aimms algol68 apache applescript apt_sources arm asm asp asymptote autoconf autohotkey autoit avisynth awk bascomavr bash basic4gl batch bf biblatex bibtex blitzbasic bnf boo caddcl cadlisp ceylon cfdg cfm chaiscript chapel cil c_loadrunner clojure c_mac cmake cobol coffeescript c cpp cpp-qt cpp-winapi csharp css cuesheet c_winapi dart dcl dcpu16 dcs delphi diff div dos dot d ecmascript eiffel email epc e erlang euphoria ezt f1 falcon fo fortran freebasic freeswitch fsharp gambas gdb genero genie gettext glsl gml gnuplot go groovy gwbasic haskell haxe hicest hq9plus html html4strict html5 icon idl ini inno intercal io ispfpanel java5 java javascript jcl j jquery julia kixtart klonec klonecpp kotlin latex lb ldif lisp llvm locobasic logtalk lolcode lotusformulas lotusscript lscript lsl2 lua m68k magiksf make mapbasic mathematica matlab mercury metapost mirc mk-61 mmix modula2 modula3 mpasm mxml mysql nagios netrexx newlisp nginx nimrod nsis oberon2 objc objeck ocaml-brief ocaml octave oobas oorexx oracle11 oracle8 oxygene oz parasail parigp pascal pcre perl6 perl per pf phix php-brief php pic16 pike pixelbender pli plsql postgresql postscript povray powerbuilder powershell proftpd progress prolog properties providex purebasic pycon pys60 python qbasic qml q racket rails rbs rebol reg rexx robots roff rpmspec rsplus ruby rust sas sass scala scheme scilab scl sdlbasic smalltalk smarty spark sparql sql sshconfig standardml stonescript swift systemverilog tclegg tcl teraterm texgraph text thinbasic tsql twig typoscript unicon upc urbi uscript vala vbnet vb vbscript vedit verilog vhdl vim visualfoxpro visualprolog whitespace whois winbatch wolfram xbasic xml xojo xorg_conf xpp yaml z80 zxbasic// + +There are additional [[doku>syntax_highlighting|advanced options]] available for syntax highlighting, such as highlighting lines or adding line numbers. + +==== Downloadable Code Blocks ==== + +When you use the ''%%%%'' or ''%%%%'' syntax as above, you might want to make the shown code available for download as well. You can do this by specifying a file name after language code like this: + + + + + + + + + + + +If you don't want any highlighting but want a downloadable file, specify a dash (''-'') as the language code: ''%%%%''. + + +===== Embedding HTML and PHP ===== + +You can embed raw HTML or PHP code into your documents by using the ''%%%%'' or ''%%%%'' tags. (Use uppercase tags if you need to enclose block level elements.) + +HTML example: + + + +This is some inline HTML + + +

And this is some block HTML

+ +
+ + +This is some inline HTML + + +

And this is some block HTML

+ + +PHP example: + + + +echo 'The PHP version: '; +echo phpversion(); +echo ' (generated inline HTML)'; + + +echo ''; +echo ''; +echo '
The same, but inside a block level element:'.phpversion().'
'; +
+
+ + +echo 'The PHP version: '; +echo phpversion(); +echo ' (inline HTML)'; + + +echo ''; +echo ''; +echo '
The same, but inside a block level element:'.phpversion().'
'; +
+ +**Please Note**: HTML and PHP embedding is disabled by default in the configuration. If disabled, the code is displayed instead of executed. + +===== RSS/ATOM Feed Aggregation ===== +[[DokuWiki]] can integrate data from external XML feeds. For parsing the XML feeds, [[http://simplepie.org/|SimplePie]] is used. All formats understood by SimplePie can be used in DokuWiki as well. You can influence the rendering by multiple additional space separated parameters: + +^ Parameter ^ Description ^ +| any number | will be used as maximum number items to show, defaults to 8 | +| reverse | display the last items in the feed first | +| author | show item authors names | +| date | show item dates | +| description| show the item description. If [[doku>config:htmlok|HTML]] is disabled all tags will be stripped | +| nosort | do not sort the items in the feed | +| //n//[dhm] | refresh period, where d=days, h=hours, m=minutes. (e.g. 12h = 12 hours). | + +The refresh period defaults to 4 hours. Any value below 10 minutes will be treated as 10 minutes. [[wiki:DokuWiki]] will generally try to supply a cached version of a page, obviously this is inappropriate when the page contains dynamic external content. The parameter tells [[wiki:DokuWiki]] to re-render the page if it is more than //refresh period// since the page was last rendered. + +By default the feed will be sorted by date, newest items first. You can sort it by oldest first using the ''reverse'' parameter, or display the feed as is with ''nosort''. + +**Example:** + + {{rss>http://slashdot.org/index.rss 5 author date 1h }} + +{{rss>http://slashdot.org/index.rss 5 author date 1h }} + + +===== Control Macros ===== + +Some syntax influences how DokuWiki renders a page without creating any output it self. The following control macros are availble: + +^ Macro ^ Description | +| %%~~NOTOC~~%% | If this macro is found on the page, no table of contents will be created | +| %%~~NOCACHE~~%% | DokuWiki caches all output by default. Sometimes this might not be wanted (eg. when the %%%% syntax above is used), adding this macro will force DokuWiki to rerender a page on every call | + +===== Syntax Plugins ===== + +DokuWiki's syntax can be extended by [[doku>plugins|Plugins]]. How the installed plugins are used is described on their appropriate description pages. The following syntax plugins are available in this particular DokuWiki installation: + +~~INFO:syntaxplugins~~ + diff --git a/data/pages/en/wiki/wiki_backup.txt b/data/pages/en/wiki/wiki_backup.txt new file mode 100644 index 0000000..eb82726 --- /dev/null +++ b/data/pages/en/wiki/wiki_backup.txt @@ -0,0 +1,14 @@ +====== Archive of all articles ====== + +The content of [[this>|this wiki]] is the result of the collective work of the entire community. So that this work will not be in vain and all the articles at some point are not irretrievably lost as a result of unforeseen circumstances or technical failures, all the contents of the wiki are archived daily and uploaded to the repository on a special server. Anyone can download a lightweight copy of this archive, store it on their own machine and use it at their own discretion. In fact, this archive is a data backup and can be used to restore all articles on another server. + +The archive is created daily at 23-30 (UTC+3:00), the download link on this page is updated automatically: **[[this>howto-wiki_2021-04-22-23-30.tar.gz|The archive of all articles]]**. + + +===== How to restore articles from the backup ===== + +You need to install [[https://www.dokuwiki.org/|dokuwiki]], copy the contents of the directory named "data" from the archive to the corresponding directory of the installed dokuwiki, and configure the web server access rights to the recovered files. + +To give dokuwiki the same look as on this resource, you can use the template [[https://www.dokuwiki.org/template:navigation|Navigation]] and the [[https://www.dokuwiki.org/plugin:indexmenu|IndexMenu plugin]]. + +Users registration data is not included in the archive for security reasons, and all users will have to register again on the new server. diff --git a/data/pages/en/yggdrasil/alt_clients/alt_clients.txt b/data/pages/en/yggdrasil/alt_clients/alt_clients.txt new file mode 100644 index 0000000..4288ea5 --- /dev/null +++ b/data/pages/en/yggdrasil/alt_clients/alt_clients.txt @@ -0,0 +1,4 @@ +====== Alternative clients ====== + +Articles inside the section: +{{indexmenu>:en:yggdrasil:alt_clients}} \ No newline at end of file diff --git a/data/pages/en/yggdrasil/alt_clients/popura.txt b/data/pages/en/yggdrasil/alt_clients/popura.txt new file mode 100644 index 0000000..e4485d9 --- /dev/null +++ b/data/pages/en/yggdrasil/alt_clients/popura.txt @@ -0,0 +1,119 @@ +====== An alternative client Popura ====== + +Popura is an alternative [[..:yggdrasil]] Network client. + +Popura uses the same Yggdrasil's core API internally, but adds some useful and experimental features which the original client lacks. + +Popura's features: + + * Automatic Internet peering + * Advertising /64 prefix to LAN + * Meshname naming system + * DHT crawling method in Admin API + +By default, it works just like the original yggdrasil client, all features must be enabled manually. +Popura adds new command line flags and config file sections to control those features. + +Download the most recent version of Popura here https://github.com/popura-network/Popura/releases. + +===== Autopeering ===== + +Popura has a built-in peer list. If there are no Internet peers configured, it picks a single random peer out of ten with least latency. +If a picked peer goes offline, Popura picks another one, so it's effectively "autohealing". +To enable automatic Internet peering, run yggdrasil with -autopeer command line flag. + +By default, peer list is compiled from the public-peers repository https://github.com/yggdrasil-network/public-peers/. + +===== Router advertisement ===== + +Popura is able to advertise a /64 prefix to LAN clients for stateless IPv6 address autoconfiguration ([[wp>IPv6#Stateless_address_autoconfiguration_(SLAAC)|SLAAC]]). + +While it is generally encouraged that nodes run the software locally, to provide end-to-end cryptographic sessions and participate in routing, this is not always practical. Some network devices will inevitably be unable to run user code, but may still provide IPv6 connectivity. Users may also prefer to avoid running the software on an otherwise compatible system, perhaps to provide guest access or to avoid any overhead to battery powered devices. To that end, it is each node is assigned a /64 prefix in parallel to their address. A node acting as a router may advertise this prefix just as they would any other ordinary IPv6 network. + +This may be best illustrated by example. Suppose a node has generated the address: 200:1111:2222:3333:4444:5555:6666:7777. Then the node may also use addresses from the prefix: 300:1111:2222:3333::/64 (note the 200 changed to 300, a separate /8 is used for prefixes, but the rest of the first 64 bits are the same). + +This feature currently works on Linux systems. Support for other operating systems might be added later, if there will be a demand for it. + +Make sure to enable IPv6 packet forwarding: + + +''sudo sysctl -w net.ipv6.conf.all.forwarding=1'' + + +An example [[wp>RAdv]] section in Popura's config: + + + RAdv: + + { + Enable: true + + Interface: eth0 + + SetGatewayIP: true + } + + + +Interface is LAN network interface, for example `wlan0` or `eth0`. + +SetGatewayIP option automatically adds an IP address to the //Interface//. + +===== Meshname ===== + + +[[https://github.com/zhoreeq/meshname/blob/master/protocol.md|Meshname]] is a universal naming system for all IPv6-based meshnets, including CJDNS and Yggdrasil + +Having a naming system is a common requirement for deploying preexisting decentralized applications. I.e., applications for e-mail, XMPP and ActivityPub require domain names for server to server communications. + +Self-organized networks like CJDNS and Yggdrasil Network use public-key cryptography for IP address allocation. Every network node owns a globally unique IPv6 address. Binary form of that address can be encoded with base32 notation for deriving a globally unique name space managed by that node. + +Since there is no need for a global authority or consensus, such a naming system will reliably work in any network split scenarios. + +Meshname implementation in Popura is a local DNS server that can both host and resolve "meshname" domains. +It is recommended to configure meshname as an upstream DNS server for the regular DNS server, like [[wp>dnsmasq]] or [[wp>bind]]. + +To generate a sample meshname config for your Yggdrasil node, run: + +''yggdrasil -meshnameconf $(yggdrasil -useconffile /etc/yggdrasil.conf -address)'' + + +An example meshname section in Popura's config: + + + Meshname: + { + Config: + { + aicrxoqgun7siwm42akzfsox7m: + [ + aicrxoqgun7siwm42akzfsox7m.ygg AAAA 205:1bba:6a3:7f24:599c:d015:92c9:d7fb + _xmpp-client._tcp.aicrxoqgun7siwm42akzfsox7m.ygg. 86400 IN SRV 5 0 5222 xmpp.aicrxoqgun7siwm42akzfsox7m.ygg. + _xmpp-server._tcp.aicrxoqgun7siwm42akzfsox7m.ygg. 86400 IN SRV 5 0 5269 xmpp.aicrxoqgun7siwm42akzfsox7m.ygg. + xmpp.aicrxoqgun7siwm42akzfsox7m.ygg. AAAA 305:1bba:6a3:7f24::23 + ] + } + Enable: true + Listen: "[::1]:53535" + } + + +An example dnsmasq configuration that uses meshname as an upstream server: + +'' +port=53 +domain-needed +bogus-priv +server=/meshname/::1#53535 +server=/ygg/::1#53535 +server=8.8.8.8 +'' + +===== DHTCrawl ===== + +A DHTCrawl method is added to the AdminAPI. It does a recursive DHTPing crawling over all known Yggdrasil nodes and collects their NodeInfo. +To enable DHTCrawl method, run yggdrasil with `-dhtcrawler` command line flag. + +====== References ====== + +Git repository: https://github.com/popura-network/Popura diff --git a/data/pages/en/yggdrasil/alt_clients/riv-mesh.txt b/data/pages/en/yggdrasil/alt_clients/riv-mesh.txt new file mode 100644 index 0000000..f4b80b3 --- /dev/null +++ b/data/pages/en/yggdrasil/alt_clients/riv-mesh.txt @@ -0,0 +1,11 @@ +====== RiV-mesh ====== + +**RiV-mesh** — a [[wp>Fork_(software_development)|fork]] of [[Yggdrasil:yggdrasil]]. + + +====== Links ====== + +GitHub (EN): https://github.com/RiV-chain/RiV-mesh \\ +Documentation (EN): https://riv-chain.github.io/RiV-mesh/ \\ + +~~DISCUSSION~~ \ No newline at end of file diff --git a/data/pages/en/yggdrasil/dns/dns.txt b/data/pages/en/yggdrasil/dns/dns.txt new file mode 100644 index 0000000..1ed0a36 --- /dev/null +++ b/data/pages/en/yggdrasil/dns/dns.txt @@ -0,0 +1,10 @@ +====== DNS ====== +DNS - Domain Name System. + +===== Articles inside the section ===== + +{{indexmenu>:en:yggdrasil:dns}} + +====== Links ====== + +[[wp>DNS|https://wikipedia.org/wiki/DNS]] \ No newline at end of file diff --git a/data/pages/en/yggdrasil/dns/wyrd.txt b/data/pages/en/yggdrasil/dns/wyrd.txt new file mode 100644 index 0000000..ceda5a0 --- /dev/null +++ b/data/pages/en/yggdrasil/dns/wyrd.txt @@ -0,0 +1,121 @@ +====== Wyrd ====== + +^ :!: **Attention!** ^ +| **The project is deprecated** in favor of blockchain based DNS - [[https://github.com/Revertron/Alfis|ALFIS]], the crawler is stopped forever (no more new domains). [[https://github.com/Revertron/wyrd/blob/master/README.md|Readme.md]] | + +Decentralized DNS implementation for Yggdrasil + +Working servers are here: +^ Server IP ^ Location ^ +|301:2522::53|Praha, Czechia| +|301:2923::53|Bratislava, Slovakia| +|300:4523::53|Duesseldorf, Germany| +|303:8b1a::53|Saint Petersburg, Russia| + +Feel free to use :) + +===== Introduction ===== + +If you use Yggdrasil network, then you've thought about new DNS. Not only to convert names to IPs, but use some additional records, that you can't add to hosts file, like CNAME, MX or TXT. And the system should be reliable, if someone got one domain, it must maintain it's owner, and not give it to some second guy. There are some "crypto-dns" systems, like EmerDNS and alike, but they need you to have some gigabytes of HDD-space to store that blockchain. We cannot afford this in mobile phones and tablets. Then, we need to use some ordinary caching server to provide those DNS-records, to set them in mobile and use like ordinary DNS. + +What is Wyrd? + +Wyrd is a crawler script for BIND DNS-server, to collect and validate DNS-records from NodeInfo data from all nodes. It gets data - domains, DNS-records, checks for "owner", and stores them in MySQL database (one simple table), then gets all records from that table and feeds it to BIND server. +How it works? + + * Checks all nodes (like in map.ygg crawler) for DNS info. + * Iterates over domains found, and checks their validity, zone and ownership. If the domain is new, it is added, if the owner (IPv6 of the node) is the same, it updates DNS-records, if IPv6 != owner, it just ignores the domain. + * When the domain is added, the node (represented by IPv6) is saved as an owner, and datetime (seen_first) is saved along it. + * If you need to change the owner to some other node, you set owner property to the new IPv6, and it will be changed in DB. + * If you want to use some other node as a "backup owner" in case first node dies, you can set fallback property, and that second node will become a new owner when the first will be gone for some time (not yet implemented). + * In future version every domain will need to be "bought" by PoW. Simple mining of nonce, that will eliminate squatting, or make it hard enough. + +How to add your domain to those servers? Easy! Just add needed DNS-records to your zoneinfo like this: + +One domain + +Althought it has a lot of different brackets, but it is simple + +NodeInfo: { + dns: { + domains: [ + { + domain: example.ygg + ip: 200:1111:2222:3333:4444:5555:6666:7777 + } + ] + } +} + +One domain with subdomains + +If you use the records array with type and/or ttl, then you need to change ip to data, because there may be some CNAME also, not only IP. + +NodeInfo: { + dns: { + domains: [ + { + domain: example.ygg + records: [ + { + data: 200:1111:2222:3333:4444:5555:6666:7777 + name: @ + ttl: 300 + type: AAAA + } + { + data: 200:1111:2222:3333:4444:5555:6666:7778 + name: ftp + ttl: 600 + type: AAAA + } + ] + } + ] + } +} + + +All other variants with explanation + +"nodeinfo": { + "dns": { + // You may add some contact, just how WHOIS does + "contact": mail@example.com + "domains": [ + { + "domain": "test.ygg", // Your desired domain + "records": [ + { + // The IP address to resolve to, it may be different from your node's address + "data": "200:149b::b722:fe09:d31:84a4", + "name": "*", // You can omit it, default "@" will be used + "ttl": 300, // You can omit it too, default 3600 (one hour) will be used + "type": "AAAA" // And this one can be omited, AAAA will be used as default + } + ], + // Tags will be used for ranking and searching in the future, stay tuned ;) + "tags": [ + "test", + "dns", + "experiment" + ] + }, + { + // You can try some real domains, but they will be ignored :) + "domain": "google.com", + // Instead of "records" array you can just enter an IP address, + // type and TTL will be default - AAAA & 3600 + "ip": "200:149b::b722:fe09:d31:84a4" + } + ] + }, + "location": "Somewhere on Earth", // The common fields + "name": "My meganode!", + } + + +Currently only this TLD is supported: .ygg. If the community will need some more, we can add some. + +====== Links ====== +Official Wyrd's repository on GitHub: https://github.com/Revertron/wyrd \ No newline at end of file diff --git a/data/pages/en/yggdrasil/subnet.txt b/data/pages/en/yggdrasil/subnet.txt new file mode 100644 index 0000000..7553105 --- /dev/null +++ b/data/pages/en/yggdrasil/subnet.txt @@ -0,0 +1,30 @@ +====== Advertising a Prefix ====== + +While it is generally encouraged that nodes run the software locally, to provide end-to-end cryptographic sessions and participate in routing, this is not always practical. Some network devices will inevitably be unable to run user code, but may still provide IPv6 connectivity. Users may also prefer to avoid running the software on an otherwise compatible system, perhaps to provide guest access or to avoid any overhead to battery powered devices. To that end, it is each node is assigned a /64 prefix in parallel to their address. A node acting as a router may advertise this prefix just as they would any other ordinary IPv6 network. + +This may be best illustrated by example. Suppose a node has generated the address: 200:1111:2222:3333:4444:5555:6666:7777. Then the node may also use addresses from the prefix: 300:1111:2222:3333::/64 (note the 200 changed to 300, a separate /8 is used for prefixes, but the rest of the first 64 bits are the same). + +On Linux, something like the following should be sufficient to advertise a prefix and a route to 200::/7 using radvd to a network attached to the eth0 interface: + +Enable IPv6 forwarding (e.g. sysctl -w net.ipv6.conf.all.forwarding=1 or add it to sysctl.conf). + +ip addr add 300:1111:2222:3333::1/64 dev eth0 or similar, to assign an address for the router to use in that prefix, where the LAN is reachable through eth0. + +Install/run radvd with something like the following in /etc/radvd.conf: + + interface eth0 + { + AdvSendAdvert on; + AdvDefaultLifetime 0; + prefix 300:1111:2222:3333::/64 { + AdvOnLink on; + AdvAutonomous on; + }; + route 200::/7 {}; + }; + +Note that a /64 prefix has fewer bits of address space available to check against the node’s ID, which in turn means hash collisions are more likely. As such, it is unwise to rely on addresses as a form of identity verification for the 300::/8 address range. + +====== Links ====== + +Configuration, Advertising a Prefix: https://yggdrasil-network.github.io/configuration.html \ No newline at end of file diff --git a/data/pages/en/yggdrasil/yggdrasil.txt b/data/pages/en/yggdrasil/yggdrasil.txt new file mode 100644 index 0000000..bf26d17 --- /dev/null +++ b/data/pages/en/yggdrasil/yggdrasil.txt @@ -0,0 +1,3 @@ +===== Yggdrasil ===== + +Yggdrasil is an early-stage implementation of a fully end-to-end encrypted IPv6 network. It is lightweight, self-arranging, supported on multiple platforms and allows pretty much any IPv6-capable application to communicate securely with other Yggdrasil nodes. Yggdrasil does not require you to have IPv6 Internet connectivity - it also works over IPv4. \ No newline at end of file diff --git a/data/pages/gemini_protocol.txt b/data/pages/gemini_protocol.txt new file mode 100644 index 0000000..72d732a --- /dev/null +++ b/data/pages/gemini_protocol.txt @@ -0,0 +1,213 @@ +====== Gemini (протокол) ====== + +Gemini - сетевой протокол прикладного уровня, являющийся наследником протокола Gopher. + +Ориентирован на минимализм и приватность, поскольку исключает использование таких технологий как сжатие, Cookies и JavaScript; +формат передаваемых данных ограничен текстом или бинарными данными, обязательной является подпись TLS. + +Тем не менее, протокол вполне многофункционален и позволяет работать с различными типами ресурсов: как хостинг статических файлов так и системы с авторизацией и обработкой пользовательских запросов - форумы, поисковые системы, организация радио и видео вещания, обмен изображениями и другими мультимедийными данными. + +В виду своих характеристик, Gemini будет интересен тем, кого не устраивает "раздутость" современного протокола HTTP, а также подойдёт для пользователей командной строки, E-ink планшетов. +===== Терминология ===== + +Как и во многих других экосистемах, для Gemini характерна своя терминология, знание которой поможет лучше понимать контекст и формировать поисковые запросы. + + * **Gemini space** - экосистема Gemini, подобно термину "Fediverse" для федеративной тематики + * **Capsule** - капсула, веб-сайт - название протокола отсылается к тематике космической программы, поэтому в сети многие ресурсы наследуют концепцию в своих названиях + * **Gemlog** - блог, персональная страница, фид профиля + +===== Разметка ===== + +==== Gemtext ==== + +Текстовые ресурсы gemtext - это обычный текст (MIME text/gemini) опционально содержащий мета-теги в начале каждой строки: + + +# h1 +## h2 +### h3 +=> ссылка +> цитата +* элемент списка +``` +исходный код +``` + + +Некоторые браузеры поддерживают разметку inline: + + +*bold* +_underline_ + + +В разметке gemini не используются декоративные технологии вроде CSS, при этом задача отрисовки ресурса выполняется на стороне браузера и полностью делегирована клиенту. + +==== Gemfeed ==== + +Поскольку текстовый регламент протокола не подразумевает использование тегов, такие стандарты оповещений как Atom и RSS, без [[https://tildegit.org/solderpunk/gemfeed|внешних средств интеграции]], в Gemini неприменимы. + +Несмотря на это, нативные подписки возможны - средствами [[https://geminiprotocol.net/docs/companion/subscription.gmi|стандарта]] для программной интерпретации изменений документа gemtext. + +Говоря проще, протокол сохраняет человеко-понятную структуру документа, при этом позволяет клиентским приложениям отслеживать его обновления. + + +В браузере Lagrange, подписаться на обновления страницы можно с помощью меню ''Bookmarks'' - ''Subscribe to page...'' и выбрать соответствующий странице способ (меню подписок: ''View'' - ''Show Feeds'') + + +=== Отслеживание по дате === + +В данном подходе, осуществляется отслеживание по впереди идущей за ссылкой дате, в формате ISO 8601 (Y-m-d), например: + + +# Заголовок страницы, выполняет роль заголовка фида + +Содержимое параграфа, игнорируется + +=> /index.gmi любая ссылка, игнорируется + +## Подраздел страницы, игнорируется + +Произвольное содержимое подраздела, игнорируется + +## Публикации + +=> /pub1.gmi 2024-01-28 Ссылка на первую публикацию, отслеживается +=> /pub2.gmi 2024-01-29 Ссылка на вторую публикацию, отслеживается +=> /pub3.gmi Ссылка публикацию, не отслеживается (так как не содержит даты) +=> /pub4.gmi Ссылка публикацию, не отслеживается (так как дата является частью заголовка) 2024-01-30 + + +Таким образом, документ не теряет читаемость для человека и при этом содержит мета-информацию для интерпретатора обновлений. + +Единственный недостаток такого подхода заключается в том, что обновления нельзя получать чаще, чем раз в сутки. +Как заявлено в документации, связано это с временной зоной. + +=== Отслеживание по заголовкам === + +Альтернативный подход, отслеживающий изменения в заголовках документа + + +# Мой блог, заголовок фида + +Параграф описания + +## Первая публикация, отслеживается + +Описание первой публикации + +=> /pub1.gmi Читать + +## Вторая публикация, отслеживается + +Описание второй публикации + +=> /pub2.gmi Читать + +... + + + + +===== Коды статусов ===== + + * **10-19** - //input expected// - ожидается ввод - используется например для отправки и получения данных форм + * **20-29** - //success// - код 20 аналогичен коду 200 в HTTP + * **30-39** - //redirection// - диапазон переадресации, в отправляемом пакете, код обычно сопровождается мета-ссылкой: ''code + link + \n\r + text'' + * **40-49** - //temporary failure// + * **50-59** - //permanent failure// + * **60-69** - //client certificates// - в Gemini сертификаты используются для идентификации и авторизации пользователей + +Клиент обязан отклонять любой код меньше 10 или больше 69, при этом уведомить пользователя. + +В неопределённых случаях, приоритет будет отдан коду с начальным значением диапазона, например, 10 для 11 или 20 для 27. + +===== Обработка запросов ===== + +Протокол предусматривает обмен пакетами с заголовками длиной максимум 1024 байт. +В эту длину необходимо уместить мета информацию пакета - например строку URI и/или данные пользовательского ввода. + +Текстовые данные должны быть закодированы в стандарт RFC 3986 (известный такими функциями, как urlencode). +В какой то степени, это сокращает полезный объём заголовка при использовании например кириллицы. + +Тело пакета состоит из "сырых" текстовых или бинарных данных без сжатия; сервер закрывает соединение после отправки последнего байта. + +С помощью отправляемых клиенту статусов группы "10", сервер способен запрашивать пользовательский ввод (вместо привычных форм, обычно в браузерах Gemini - это всплывающее текстовое окно) +После получения и обработки данных, сервер обычно возвращает статус "20", статус "51" (не найдено) или редирект на целевую страницу с кодом "30". + +Пример типичного пакета с фразой "Hello world!": + + +20 text/gemini; charset=utf-8; lang=en\r\nHello%20world%21 + + +===== Клиент ===== + +Чтобы открыть ресурс с адресом %%gemini://%% необходим специальный браузер, стандартно работающий с портом 1965. + +Пользователи GUI, могут начать с популярных [[https://gmi.skyjake.fi/lagrange/|Lagrange]] или [[https://kristall.random-projects.net/|Kristall]]. + +**Специфика** + + * так как большинство клиентов возвращают одно-текстовое строчное поле запроса, добавить новую строку можно комбинацией клавиш Shift+Enter + * в протоколе Gemini нет webstorage и cookies, поэтому некоторые интерактивные сайты запрашивают для авторизации сертификат, который также используется для быстрой смены аккаунта + * вместо фидов RSS есть встроенные в браузер инструменты отслеживания контента (см. [[gemini_protocol#gemfeed]]) + +===== Сервер ===== + +Понятие "сервер" в среде Gemini может быть непривычным для пользователей веб, поскольку вместо прокси Nginx или Apache, этот термин зачастую предусматривает полноценный сервис для конкретной задачи, резервирующий за собой отдельный хост и порт. + +В каталоге [[https://github.com/kr1sp1n/awesome-gemini#servers|awesome-gemini]] представлено большое количество таких решений. + +Например, для запуска простой статики, подойдёт сервер [[https://github.com/mbrubeck/agate|Agate]] (Rust). +При этом, название привычного %%index.html%% будет зависеть от выбранного сервера, для Agate - это %%index.gmi%% + +Запуск динамических ресурсов часто предусматривает разработку собственного сокет-сервера для реализации специфики отдельно взятого приложения. + +Веб-разработчикам проще понять принцип работы "server-side" на примере нескольких файлов [[https://github.com/eapl-gemugami/gemini-php|gemini-php]]. +В разработке новых проектов - лучше использовать более актуальне решения, например, из простых - форк библиотеки [[https://github.com/YGGverse/titan-II|titan-II]], примеры реализации на базе которой, можно посмотреть в исходном коде [[https://github.com/kevachat/geminiapp|geminiapp]] для [[social_media:kevachat|KevaChat]] или [[https://github.com/YGGverse/betahowto|проекте зеркала]] данного сайта. + +==== Виртуальные хосты ==== + +Чтобы запускать различные сервисы на одном IP (не меняя стандартный порт) следует установить общий прокси-сервер, который будет осуществлять маршрутизацию запросов на соответствующий адрес/интерфейс. + +Если для HTTP - это Apache или Nginx, то для протокола Gemini используются следующие решения: + + * [[gemini_protocol:gmid]] (C) + * [[gemini_protocol:twins]] (Go) + + + +===== Ресурсы ===== + + * %%gemini://geminiprotocol.net%% - домашняя страница проекта + * %%gemini://geminiprotocol.net/docs/ru/%% - документация на русском + * %%gemini://geminispace.info%% - внутрисетевой поиск + * %%gemini://station.martinrue.com%% - социальная сеть по типу twitter + * %%gemini://astrobotany.mozz.us%% - ASCII ботаника + +===== Yggdrasil ===== + +В зависимости от поддержки IPv6 отдельно взятым сервером, в большинстве случаев, Gemini штатно и без проблем работает с Yggdrasil. + +Единственным моментом является TLS поверх уже имеющегося слоя. + +==== Внутрисетевые ресурсы ==== + + * %%gemini://[301:23b4:991a:634d::b]%% - зеркало сайта, в рамках проекта [[https://github.com/YGGverse/bdoku|β-Doku]] + * %%gemini://betahowto.ygg%% - алиас + * %%gemini://betahowto.duckdns.org%% - алиас в Интернет + + * %%gemini://[301:23b4:991a:634d::1965]%% - инстанс [[social_media:kevachat|KevaChat]] + * %%gemini://kevachat.ygg%% - алиас + +===== Статьи внутри раздела ===== + +{{indexmenu>:gemini_protocol}} + +===== Ссылки ===== + + * [[https://geminiprotocol.net|Официальный сайт]] + * [[https://ru.wikipedia.org/wiki/Gemini_(протокол)|Страница на википедии]] + * [[https://github.com/kr1sp1n/awesome-gemini|Каталог программного обеспечения на GitHub]] + * [[https://www.dokuwiki.org/plugin:gemini|Плагин для DokuWiki]] | [[https://github.com/YGGverse/bdoku|Проект β-Doku]] \ No newline at end of file diff --git a/data/pages/gemini_protocol/bdoku.txt b/data/pages/gemini_protocol/bdoku.txt new file mode 100644 index 0000000..344900a --- /dev/null +++ b/data/pages/gemini_protocol/bdoku.txt @@ -0,0 +1,92 @@ +====== β-Doku ====== + +Проект с [[https://github.com/YGGverse/bdoku|открытым кодом]] для организации зеркала [[https://www.dokuwiki.org|DokuWiki]] для протокола [[:gemini_protocol|Gemini]]. + +Написан на языке PHP 8, в качестве основы использует: + + * [[https://github.com/YGGverse/gemini-php|gemini-php]] - для конвертации базы данных и безопасной работы с файловой системой + * [[https://github.com/YGGverse/titan-II|titan-II]] - форк сервера с поддержкой IPv6 + * [[https://github.com/YGGverse/cache-php|cache-php]] - оболочка для кеширования скомпилированных страниц посредством Memcached + * [[https://github.com/manticoresoftware|manticore]] - для полнотекстового поиска + +===== Примеры ===== + +β-Doku изначально создан для организации зеркала этого сайта: + + * %%gemini://[301:23b4:991a:634d::b]%% + * %%gemini://betahowto.ygg%% - алиас + * %%gemini://betahowto.duckdns.org%% - алиас в Интернет + +===== Установка ===== + +Проект находится в процессе разработки, актуальная инструкция доступна в [[https://github.com/YGGverse/bdoku/blob/main/README.md|README]] + +===== Синхронизация ===== + +Ресурс "betahowto" для всех инстансов использует автоматический [[wiki:wiki_backup|дамп]] в качестве источника. + +Также, по совместительству отправляет историю правок в репозиторий [[http://[316:c51a:62a3:8b9::4]/YGGverse/howto-db|howto-db]], откуда можно также получить актуальную версию базы данных: + + +git clone http://[316:c51a:62a3:8b9::4]/YGGverse/howto-db.git + + +Обновление осуществляется скриптом по расписанию crontab, где общая директория с данными расположена в корне howto-db (на которую ведут символические ссылки data всех инстансов): + + +cd /home/bdoku + +wget http://[222:a8e4:50cd:55c:788e:b0a5:4e2f:a92c]/howto-wiki_$(date -d "$date -1 days" +"%F")-23-30.tar.gz +tar -xvf howto-wiki_$(date -d "$date -1 days" +"%F")-23-30.tar.gz -C howto-db +rm howto-wiki_$(date -d "$date -1 days" +"%F")-23-30.tar.gz + + +Обновление β-Doku: + + +cd /home/bdoku/bdoku + +git pull +composer update + + +Если администрируется контрольный репозиторий: + + +cd /home/bdoku/howto-db + +git add . +git commit -m "$(date -d "$date -1 days" +"%F")-23-30" +git push + + +От пользователя bdoku: + + +crontab -e + +0 0 * * * /home/bdoku/crontab/update.sh >> /home/bdoku/crontab/log/update-$(date -d "$date -1 days" +"%F")-23-30.log 2>&1 + + +От пользователя root: + + +crontab -e + +5 0 * * * service betahowto restart +5 0 * * * service betahowto.ygg restart +5 0 * * * service betahowto.duckdns.org restart + + +Для синхронизации важно правильно установить часовой пояс, например GMT: + + +unlink /etc/localtime +ln -s /usr/share/zoneinfo/GMT /etc/localtime +date + + +===== Ссылки ===== + +[[https://github.com/YGGverse/bdoku|β-Doku на GitHub]]\\ +[[https://github.com/YGGverse/howtools|howtools]] - скрипты авто-обновлений \ No newline at end of file diff --git a/data/pages/gemini_protocol/gmid.txt b/data/pages/gemini_protocol/gmid.txt new file mode 100644 index 0000000..ccc32f9 --- /dev/null +++ b/data/pages/gemini_protocol/gmid.txt @@ -0,0 +1,96 @@ +====== Gmid ====== + +Многофункциональный сервер для протокола [[:gemini_protocol|Gemini]], с поддержкой виртуальных хостов и реверсивного проксирования. + +===== Установка ===== + +Кроме типичных пакетов для сборки программ с make, потребуется также: + + +apt install bison byacc + + +Как и в большинстве случаев, удобным будет создать отдельного пользователя: + + +useradd -m gmid + + +Логинимся и забираем последнюю версию из репозитория (есть зеркало на GitHub) и осуществляем сборку командами: + + +git clone https://github.com/omar-polo/gmid.git +cd gmid +./configure +make + + +===== Проксирование ===== + +Для сертификатов виртуальных хостов можно создать отдельные директории, там же можно расположить конфигурации. + +Можно создать общий файл конфигурации для запуска в рамках одного юнита / процесса. + +Пример проксирования общего IPv4 Clearnet на два IPv6 Yggdrasil: + + +server "betahowto.duckdns.org" { + + listen on 94.140.114.89 port 1965 + + cert "/home/gmid/host/betahowto.duckdns.org/cert.pem" + key "/home/gmid/host/betahowto.duckdns.org/key.rsa" + + proxy { + sni "betahowto.duckdns.org" + relay-to 301:5eb5:f061:678e::b port 1965 + verifyname off + } +} + +server "kevachat.duckdns.org" { + + listen on 94.140.114.89 port 1965 + + cert "/home/gmid/host/kevachat.duckdns.org/cert.pem" + key "/home/gmid/host/kevachat.duckdns.org/key.rsa" + + proxy { + sni "kevachat.duckdns.org" + relay-to 201:23b4:991a:634d:8359:4521:5576:15b7 port 1965 + verifyname off + } +} + + +Юнит в этом случае будет таким: + + +[Unit] +Description=gmid +After=network.target + +[Service] +Type=simple +User=gmid +Group=gmid +WorkingDirectory=/home/gmid/ +ExecStart=/home/gmid/gmid/gmid -c /home/gmid/gmid.conf -f -v +StandardOutput=file:/home/gmid/output.log +StandardError=file:/home/gmid/debug.log +Restart=on-failure + +[Install] +WantedBy=multi-user.target + + + * -f указывает на "foreground", иначе процесс будет стартовать в фоновом режиме + * -v verbose, отладка + +Проверить работу сервера можно выполнив от пользователя gmid: + +netstat -tulpn | grep LISTEN + +===== Ссылки ===== + +[[https://gmid.omarpolo.com/|Домашняя страница]] \ No newline at end of file diff --git a/data/pages/gemini_protocol/twins.txt b/data/pages/gemini_protocol/twins.txt new file mode 100644 index 0000000..51610aa --- /dev/null +++ b/data/pages/gemini_protocol/twins.txt @@ -0,0 +1,98 @@ +====== Twins ====== + + +При использовании в качестве прокси, данный сервер "срезает" часть контента ([[https://code.rocket9labs.com/tslocum/twins/issues/18|#18]]) + +Решение не найдено, если требуется реверсивное проксирование, то лучше сразу использовать сервер [[gemini_protocol:gmid|gmid]] + + +Многозадачный сервер для протокола [[:gemini_protocol|Gemini]] с поддержкой кеширования, реверсивного проксирования и других функций. Написанный на языке Go. + +===== Установка ===== + + +go install code.rocketnine.space/tslocum/twins@latest + + +Пример маршрутизации общего IPv4 адреса доменов first.host.org и second.host.org на разные ресурсы Yggdrasil: + + +listen: "xx.xx.xx.xx:1965" +hosts: + first.host.org: + cert: /home/twins/first.host.org/cert.pem + key: /home/twins/first.host.org/key.rsa + paths: + - + path: / + proxy: gemini-insecure://[xxx:xxxx:xxxx:xxxx::xxxx]:1965 + second.host.org: + cert: /home/twins/second.host.org/cert.pem + key: /home/twins/second.host.org/key.rsa + paths: + - + path: / + proxy: gemini-insecure://[xxx:xxxx:xxxx:xxxx::xxxx]:1966 + + +По такому же принципу можно запустить службы на свободных локальных адресах IPv4 или использовать разный порт для каждого сервера.\\ +На целевых (публичных) ресурсах Yggdrasil вместо разных портов, достаточно настроить [[yggdrasil:subnet_setting]]. + +Сертификаты в данном примере должны быть сконфигурированы на соответствующий домен, например для first.host.org: + + +openssl req -x509 -newkey rsa:4096 -keyout key.rsa -out cert.pem -days 365 -nodes -subj "/CN=first.host.org" + + +* если запись для IPv6 - квадратные скобки в CN не используются + +Для запуска указываем путь к бинарному файлу twins и вторым аргументом - путь к файлу конфигурации: + + +/home/twins/go/bin/twins -config /home/twins/config.yaml + + +Можно создать сервис: + + +[Unit] +Description=twins +After=network.target + +[Service] +Type=simple +User=twins +Group=twins +WorkingDirectory=/home/twins/ +ExecStart=/home/twins/go/bin/twins -config /home/twins/config.yaml +StandardOutput=file:/home/twins/debug.log +StandardError=file:/home/twins/error.log +Restart=on-failure + +[Install] +WantedBy=multi-user.target + + +А также добавить автозапуск: + + +systemctl daemon-reload +systemctl enable twins +systemctl start twins + + +===== Заметки ===== + +У сервера twins иногда бывают проблемы с кодировкой кириллических ресурсов, поэтому целевые хосты должны отдавать кодировку в заголовке: + + +text/gemini; charset=utf-8 + + +Как указано в readme, важно также указать размер контента (size) + +Чтобы отключить проверку сертификата, можно использовать псевдо-протокол %%gemini-insecure://%% + +===== Ссылки ===== + +[[https://code.rocket9labs.com/tslocum/twins|Домашняя страница проекта]] \ No newline at end of file diff --git a/data/pages/go/__template.txt b/data/pages/go/__template.txt new file mode 100644 index 0000000..d115689 --- /dev/null +++ b/data/pages/go/__template.txt @@ -0,0 +1,25 @@ +====== Заголовок статьи ====== + +Введение + +===== Заголовок раздела 1 ===== + +Текст + +==== Заголовок подраздела ==== + +Текст + +===== Заголовок раздела 2 ===== + +Текст + +... + +====== Ссылки ====== + +Описание ссылки (EN|RU): http://address.domain/ \\ +Описание ссылки (EN|RU): [[ раздел:статья | Заголовок ссылки ]] \\ +Описание ссылки (EN|RU): [[wpru>имя_страницы_в_русскоязычной_wikipedia|Заголовок ссылки]] + +~~DISCUSSION~~ diff --git a/data/pages/go/go.txt b/data/pages/go/go.txt new file mode 100644 index 0000000..3dc9daa --- /dev/null +++ b/data/pages/go/go.txt @@ -0,0 +1,9 @@ +====== Go ====== + +**Go** (часто также golang) — компилируемый многопоточный язык программирования, разработанный внутри компании Google. + +{{indexmenu>:go}} + +====== Ссылки ====== + +https://ru.wikipedia.org/wiki/Go \ No newline at end of file diff --git a/data/pages/go/go_installation.txt b/data/pages/go/go_installation.txt new file mode 100644 index 0000000..67caee7 --- /dev/null +++ b/data/pages/go/go_installation.txt @@ -0,0 +1,78 @@ +====== Установка Go ====== + +Как известно, [[yggdrasil:Yggdrasil|Yggdrasil]] и [[Yggdrasil:email:Yggmail|Yggmail]] написаны на [[go:go|Go]]. Разработчики этих программ обычно используют возможности последней версии Go при написании кода, и такой код зачастую не компилируется на более ранних версиях Go. В связи с этим у некоторых пользователей могут возникнуть сложности с самостоятельной сборкой Yggdrasil, Yggmail и других программ, т.к., в репозиториях популярных дистрибутивов Linux обычно содержатся устаревшие версии Go. + +Ниже кратко описано, как можно установить Go последней версии в Linux (установка под Windows, думаю, сложностей вызвать не должна). + +Используем дистрибутив на базе Debian, в других дистрибутивах всё делается аналогично. + +Во первых, стоит проверить, не установлена ли в системе уже какая-либо версия Go: + +go version + +Если установленная версия Go является устаревшей, удаляем её: + +sudo apt remove golang + +Если остались каталоги /usr/lib/go-1(x).* или /usr/lib/go, или /usr/local/go - их можно удалить. Например: + +sudo rm-rf /usr/lib/go-1.13 + +Смотрим, какая версия Go присутствует в репозитории дистрибутива: + +sudo apt update +apt-cache search golang + +или + +sudo apt update +apt-cache pkgnames golang + +Информация о пакете: + +apt-cache show golang-go + +Если версия в репозитории дистрибутива устраивает, устанавливаем её: + +sudo apt install golang-go + +Если не устраивает, идем по адресу: https://golang.org/dl/, выбираем и скачиваем архив под свой дистрибутив. Например, для Raspbian 9.13 (RaspberryPi 3): + +wget https://golang.org/dl/go1.17.1.linux-armv6l.tar.gz + +Распаковываем каталог go и перемещаем его в ''/usr/local/'': + +tar -xzf go1.17.1.linux-armv6l.tar.gz +sudo mv go /usr/local/ + +Скачанный архив можно удалить: + +rm go1.17.1.linux-armv6l.tar.gz + +Далее, необходимо создать рабочий каталог go, в который вы будете собирать программы: + +mkdir ~/go + +И последнее: прописываем в профиль переменные среды окружения. +Открываем файл ''~/.bashrc'' или ''~/.profile'' и в конец файла дописываем: + +export PATH=$PATH:/usr/local/go/bin +export GOPATH=~/go + +(если в файле уже были подобные строки, связанные с go, их можно удалить) + +Далее, нужно перелогиниться в систему, чтобы отработали команды в .bashrc, либо выполнить: + +source .bashrc + +Проверяем: + +go version + +Должны увидеть установленную версию go. + +go env + +Должны увидеть все переменные среды окружения, связанные с go. + +Всё, можно собирать пакеты из исходников самостоятельно. \ No newline at end of file diff --git a/data/pages/hm/1_5_digger.txt b/data/pages/hm/1_5_digger.txt new file mode 100644 index 0000000..db8971a --- /dev/null +++ b/data/pages/hm/1_5_digger.txt @@ -0,0 +1,2 @@ +====== 1,5 землекопа ====== +1,5 землекопа (читается как "полтора землекопа") - стандартное число посетителей почти любого сайта в сети [[yggdrasil:yggdrasil|Yggdrasil]]. Выражение используется в значении "очень мало". diff --git a/data/pages/hm/__template.txt b/data/pages/hm/__template.txt new file mode 100644 index 0000000..d115689 --- /dev/null +++ b/data/pages/hm/__template.txt @@ -0,0 +1,25 @@ +====== Заголовок статьи ====== + +Введение + +===== Заголовок раздела 1 ===== + +Текст + +==== Заголовок подраздела ==== + +Текст + +===== Заголовок раздела 2 ===== + +Текст + +... + +====== Ссылки ====== + +Описание ссылки (EN|RU): http://address.domain/ \\ +Описание ссылки (EN|RU): [[ раздел:статья | Заголовок ссылки ]] \\ +Описание ссылки (EN|RU): [[wpru>имя_страницы_в_русскоязычной_wikipedia|Заголовок ссылки]] + +~~DISCUSSION~~ diff --git a/data/pages/hm/experiment.txt b/data/pages/hm/experiment.txt new file mode 100644 index 0000000..11ac01e --- /dev/null +++ b/data/pages/hm/experiment.txt @@ -0,0 +1,30 @@ +====== This is Experiment ====== + +**This is Experiment** (this is an experimental project) - популярная и эффективная отмазка разработчиков [[yggdrasil:yggdrasil|Yggdrasil]] в ответ на выражение пользователями недовольства несовершенством протокола, отсутствием "крайне необходимых фич" или глючностью реализации самого Древа. + +Зачастую дополняется напоминанием о том, что разработчики занимаются этим экспериментом в своё свободное время. + +Умелое и своевременное использование отмазки, иногда в совокупности с другой популярной отмазкой: "[[hm:not_a_goal|это не цель Yggdrasil]]" эффективно успокаивает гневных хомяков, оставляя их в [[wpru>Фрустрация_(психология)|фрустрации]] с мыслями о печальной и нелегкой доле последователей учения о свободном интернете. + +Однако, надежда не умирает, ведь, на оф. странице проекта, красуется многообещающая надпись: + +{{ hm:ygg16_.png?650 }} + +Хотя, если копнуть чуть глубже, примерно до About, увидим: + +{{ hm:ygg17_.png?650 }} + +Так неужели это и правда всего лишь эксперимент? 😱 + + +===== Реальные примеры использования ===== + +{{hm:research_proj.jpeg?650 }}{{hm:ygg15_m.png?650 }}{{hm:ygg04.png?650 }}{{hm:ygg01.png?650 }}{{hm:ygg02.png?650 }}{{hm:ygg03.png?650 }}{{hm:ygg05.png?650 }}{{hm:ygg06.png?650 }}{{hm:ygg07.png?650 }}{{hm:ygg08.png?650 }}{{hm:ygg09.png?650 }}{{hm:ygg10.png?650 }}{{hm:ygg11.png?650 }}{{hm:ygg12.png?650 }}{{hm:ygg13.png?650 }}{{hm:ygg14.png?650 }}{{hm:ygg15.png?650 }} + +====== Ссылки ====== + +Офф. сайт проекта (EN): https://yggdrasil-network.github.io/ \\ +Репозиторий проекта на GitHub (EN): https://github.com/yggdrasil-network/yggdrasil-go \\ +Место обитания разработчиков в Matrix (EN): https://matrix.to/#/#yggdrasil:matrix.org + +~~DISCUSSION~~ diff --git a/data/pages/hm/hm.txt b/data/pages/hm/hm.txt new file mode 100644 index 0000000..e5b4634 --- /dev/null +++ b/data/pages/hm/hm.txt @@ -0,0 +1,9 @@ +====== Мемы / Юмор ====== + +===== Статьи внутри раздела ===== + +{{indexmenu>:hm}} + +====== Ссылки ====== + +[[wpru>Интернет-мем]] \ No newline at end of file diff --git a/data/pages/hm/not_a_goal.txt b/data/pages/hm/not_a_goal.txt new file mode 100644 index 0000000..a3caee2 --- /dev/null +++ b/data/pages/hm/not_a_goal.txt @@ -0,0 +1,39 @@ +====== Это не цель Yggdrasil ====== +Добро пожаловать на эту статью! Если Вас послали сюда, значит Вы несёте бред и не понимаете что "Это не цель Yggdrasil"! +Возможно Вас так же вежливо послали в дальнее пешее путешествие. + +Данная фраза произошла из ответа главного разработчика Neil Alexander в комнате Matrix на вопрос про преимущества Yggdrasil над [[wpru>Tor]]: + +> <@karl:kashofer.org>: hi all ! whats the advantage of yggdrasil vs tor ? With hidden services tor provides a internal network and also anonymity. +> <@neilalexander:neilalexander.dev>: Anonymity **is not a goal of Yggdrasil**. We are a project trying to build an efficient and scalable mesh routing protocol, one that finds the best possible route through the network with a given set of links + +И так, что же не является целью [[yggdrasil:Yggdrasil]]? + +===== Анонимность ===== +Если Вам нужна анонимность, то Вы явно не по адресу. +Давайте вместе повторим "Это не цель Yggdrasil"! + +===== Безопасность ===== +Очевидно, кто бы спорил, ведь явная "Это не цель Yggdrasil"! +Как только Вы устанавливаете Yggdrasil на своё устройство, +позаботьтесь о файрволле, ведь ваша безопасность это цель файрволла! + +===== Стабильность ===== +"Это не цель Yggdrasil", ведь еженедельная паника - это норма. + +===== Прокси режим ===== +Прокси режим (HTTP/SOCKS) работы Yggdrasil помог бы с поддержкой в браузерах, и, например, созданием расширения Yggdrasil прямо в браузере без установки програм! +Это решило бы проблему недоверенных подключений (http якобы "небезопасен"), решило бы проблему коллизий 300:: подсетей, но "Это не цель Yggdrasil"! +(Тем не менее, автор пилил поддержку SOCKS-режима [[https://github.com/yggdrasil-network/yggdrasil-go/tree/netstack|yggstack]]) + +===== Автопиринг ===== +Как было бы хорошо, если для запуска Yggdrasil было достаточно простой установки, без дополнительной конфигурации, но "Это не цель Yggdrasil"! + +====== Полезные ссылки ====== + * [[yggdrasil:connect_through_tor]] + * [[:i2p|I2P]] + * [[yggdrasil:firewall_setup]] + * [[yggdrasil:network_connection_variants]] + * [[yggdrasil:alt_clients:popura]] + +~~DISCUSSION~~ diff --git a/data/pages/hm/storm.txt b/data/pages/hm/storm.txt new file mode 100644 index 0000000..bde1b36 --- /dev/null +++ b/data/pages/hm/storm.txt @@ -0,0 +1,8 @@ +====== Шторм Yggdrasil ====== +Понятие возникло еще во времена [[yggdrasil:yggdrasil|Yggdrasil]] версии 0.3.x. + +Тогда один из пользователей [[yggdrasil:address_miners:address_miners|намайнил]] себе самый [[yggdrasil:spoofing_theory|высокий]] ключ и стал корнем дерева (сеть представляет собой дерево и маршрутизация строится, исходя из этого). При этом, он подключался к Yggdrasil через [[wpru>tor|tor]] и соединение было не очень стабильным. Таким образом, корень дерева часто менялся, что вызывало перестраивание всей сети и маршрутов в ней. Эти «шатания» дерева и назвали штормами. + +К сожалению, данная проблема не решена окончательно до сих пор, и смена корневого узла до сих пор влияет на стабильность работы сети. Сеть периодически «штормит». А энтузиасты до сих пор соревнуются в майнинге высоких ключей для того, чтобы стать «самым стабильным корнем»… + +~~DISCUSSION~~ \ No newline at end of file diff --git a/data/pages/hm/wednesday.txt b/data/pages/hm/wednesday.txt new file mode 100644 index 0000000..43f2b39 --- /dev/null +++ b/data/pages/hm/wednesday.txt @@ -0,0 +1,4 @@ +====== Среда ====== +Среда — день следующего ожидаемого релиза Yggdrasil. На любой вопрос о том, когда будет n-ый релиз Yggdrasil, как правило чуть менее, чем все члены сообщества хором отвечают, что в среду. При этом о какой среде идёт речь никто не упоминает. + +~~DISCUSSION~~ diff --git a/data/pages/i2p.txt b/data/pages/i2p.txt new file mode 100644 index 0000000..e33462c --- /dev/null +++ b/data/pages/i2p.txt @@ -0,0 +1,92 @@ +======I2P====== +I2P (Invisible Internet Project или Invisible Internet Protocol) -- оверлейная децентрализованная одноранговая сеть. Оверлейная - работает поверх других сетей, например, обычного интернета; децентрализованная - распределенная, не имеющая единой точки отказа: упадет один узел, полсети, или во всей сети останется 3 пользователя -- I2P всё равно будет функционировать. I2P является одноранговой сетью, потому что все участники имеют равные права и возможности: каждый пользователь скрытой сети строит свои туннели через других участников и сам является потенциальным звеном в цепочке другого пользователя. При этом естественная сетевая активность никак не компрометирует абонента перед домашним провайдером или участниками скрытой сети. + +{{ i2p:i2p-over-ygg.jpg?440}} I2P многократно превосходит [[https://torproject.org|Tor]] по параметрам анонимности, но не имеет по умолчанию выходных прокси в обычный интернет. Сеть I2P полностью децентрализована и открыта. Существует два клиента сети: на языке Java (первый релиз которого состоялся в 2003 году) и i2pd на C++ (первый релиз в 2014). I2P-роутер на C++ превосходит по скорости и стабильности своего предшественника и настоятельно рекомендуется к использованию. Основное обсуждение разработки i2pd ведется на канале #dev в сети [[social_media:ilita_network|ILITA]]. При работе через Yggdrasil, сеть I2P не образует отдельный сегмент, а остается единой: пользователи из обычного интернета также доступны. Схематично взаимодействие Yggdrasil-only роутеров с остальными участниками сети отображено на иллюстрации. + +Подробно о механизме работы сети I2P и истории появления альтерантивного клиента i2pd сказано в видео: [[https://youtu.be/h9HWGsSGQc8|YouTube.com]]. + +======Установка====== +Самый простой и верный вариант -- скачать пакет для своей операционной системы на официальной [[https://github.com/PurpleI2P/i2pd/releases|странице]] релизов. Также i2pd существует в стандартных репозиториях некоторых unix-like операционных систем вроде Debian или Ubuntu, и доступен для установки через короткую строку ''sudo apt-get install i2pd'', но такой способ установки не рекомендуется, т.к. в дефолтных репозиториях всегда находятся весьма устаревшие версии.\\ +Однако есть актуальный репозиторий сообщества, добавив который в свою систему можно забыть про протухшие пакеты и обновляться в привычном и удобном виде. Исчерпывающая информация по установке есть в [[https://i2pd.readthedocs.io/en/latest/user-guide/install/|документации]] i2pd.\\ +Инструкции для Debian и Ubuntu с использованием репозитория пользователя ''R4SAS'' через обычный интернет: + +# Ubuntu +sudo add-apt-repository ppa:purplei2p/i2pd +sudo apt-get update +sudo apt-get install i2pd + +# Debian +sudo apt-get install apt-transport-https +wget -q -O - https://repo.i2pd.xyz/.help/add_repo | sudo bash -s - +sudo apt-get update +sudo apt-get install i2pd + + +То же самое, но с доступом через Yggdrasil, т.е. внутрисетевой репозиторий: + +# Debian +wget -q -O - http://[321:c99a:91a1:cd2c::4]/.help-ygg/add_repo | sudo bash -s - +sudo apt-get update +sudo apt-get install i2pd + + +Сообществом поддерживается I2P-браузер на базе Firefox, по концепции схожий с Tor-браузером. Скачать браузер можно на [[https://github.com/PurpleI2P/i2pdbrowser/releases|странице]] релизов соответствующего гит-репозитория команды PurpleI2P (распространяется только для Windows, для Linux и MacOS систем сборка производится с помощью запуска build.sh из соответствующего архива в релизе). В комплекте портабельного браузера может находиться не последняя версия i2pd, поэтому заменить исполняемый файл ''i2pd.exe'' для использования актуальной версии наверняка нужно будет вручную. + +======I2P внутри Yggdrasil====== +Начиная с версии 2.36.0 i2pd имеет режим работы, исключающей соединения через обычный интернет. Ниже приведен пример конфигурации роутера, сообщающегося со скрытой сетью I2P исключительно через другие Yggdrasil-роутеры. По умолчанию конфигурационный файл находится в ''/etc/i2pd/i2pd.conf'', либо ''~/.i2pd/i2pd.conf'', а в случае Windows OS: ''%AppData%\i2pd\i2pd.conf''. Для работы I2P-роутера в режиме "Portable", когда все данные хранятся в директории с исполняемым файлом, необходимо создать файл ''i2pd.conf'' в той же папке, где находится бинарный файл программы (в народе: exe-шник). +daemon = true +ipv4 = false +ipv6 = false +ssu = false +ntcp2.enabled = false +yggdrasil = true + +Если вы хотите, чтобы I2P-роутер публиковал адрес из [[yggdrasil:subnet_setting|вашей подсети]] Yggdrasil, которая используется на устройстве, добавьте строку: +meshnets.yggaddress=your_local_yggdrasil_address +При первом запуске i2pd обратится к стартовому серверу внутри сети Yggdrasil, который отдаст несколько роутеров, достаточных для начала работы. Затем, база сети роутера начнет автоматически пополняться. Таким образом использование I2P обойдется без единого обращения в клирнет. + +=====Автозапуск===== +I2P-роутер (i2pd) при запуске операционной системы (на примере Debian) может стартовать раньше, чем служба Yggdrasil. Это приводит к вынужденному ручному перезапуску i2pd, т.к. yggdrasil-интерфейс не обнаруживается I2P-роутером до старта службы Yggdrasil. Есть два основных способа решить эту проблему (используйте любой на свое усмотрение): + +**1)** После запуска Yggdrasil задать задержку перед стартом зависящих служб: + - Добавить зависимость в запуск службы i2pd:\\ Создать директорию ''/etc/systemd/system/i2pd.service.d'': mkdir /etc/systemd/system/i2pd.service.d + - Дополнить запуск службы i2pd: nano /etc/systemd/system/i2pd.service.d/override.conf Вставить следующее содержимое: [Unit] +After=network.target yggdrasil.service //Ctrl+O -- сохранить изменения в файле, Ctrl+X -- выйти из редактора nano// + - Создать директорию ''/etc/systemd/system/yggdrasil.service.d'': mkdir /etc/systemd/system/yggdrasil.service.d + - Дополнить запуск службы Yggdrasil: nano /etc/systemd/system/yggdrasil.service.d/override.conf Вставить следующее содержимое: [Service] +# adding post-up delay to bring up yggdrasil tunnel interface before starting other services which depends on ygg +ExecStartPost=/bin/sleep 5 //Ctrl+O -- сохранить изменения в файле, Ctrl+X -- выйти из редактора nano// + +**2)** Задать таймер запуска i2pd: + - Создать файл ''i2pd.timer'': sudo nano /etc/systemd/system/i2pd.timer + - Заполнить файл таймера следующим образом: [Unit] +Description=i2pd service timer +After=yggdrasil.service + +[Timer] +OnActiveSec=10 + +[Install] +WantedBy=multi-user.target //Ctrl+O -- сохранить изменения в файле, Ctrl+X -- выйти из редактора nano// + - Отключить дефолтный автозапуск i2pd: sudo systemctl disable i2pd.service + - Включить наш таймер: sudo systemctl enable i2pd.timer + +======Развитие сети====== +Какой вклад в развитие сети I2P может сделать средний пользователь? Этим вопросом задаются многие энтузиасты. И вот ответ: + - Включить все существующие сетевые интерфейсы для большей связности сети: ipv4 = true +ipv6 = true +yggdrasil = true + - При технической возможности можно включить режим флудфила - своеобразного диспетчера I2P (может периодически возрастать нагрузка на процессор и сетевой канал): floodfill = true + +Обратите внимание! К флудфилу предъявляются специальные требования, перечисленные ниже. Если правила не соблюдаются, ваш роутер наверняка будет забанен другими участниками сети (в лучшем случае им просто не будут пользоваться): + * Доступность узла через IPv4 (то есть выделенный IPv4 адрес с открытым портом i2pd); + * Максимально возможный транзит (не ниже флага "O" в конфиге); + * IP адрес, с которого i2pd инициирует соединения, должен совпадать с опубликованным в лизсете (воздержитесь от сложных конфигураций с прокси и прочим в этом духе). + +Следует обратить внимание, что указанные настройки в первую очередь актуальны для администраторов серверов или домашних пользователей, имеющих выделенный IP-адрес. Однако в любом случае держать I2P-роутер включенным максимально возможное время -- хороший вклад в общую мощность сети. Клиент сети, запущенный даже на смартфоне (!) может принимать "исследовательские" туннели, создаваемые другими участниками для исследования сети и имеющие крайне малый трафик. +======Ссылки====== +[[http://[324:71e:281a:9ed3::ace]/ygg-i2p/|Количество]] Yggdrasil-роутеров в одном из ресидов - стартовом бутстрап-пакете\\ +[[https://github.com/PurpleI2P/|Git-репозиторий]] i2pd\\ +[[https://github.com/PurpleI2P/i2pd/releases|Страница]] релизов i2pd для загрузки\\ +[[https://i2pd.readthedocs.io/ru/latest/|Документация]] i2pd на русском языке\\ +[[https://geti2p.net/ru/|Сайт]] java-роутера (не поддерживает Yggdrasil) \ No newline at end of file diff --git a/data/pages/pi-hole/__template.txt b/data/pages/pi-hole/__template.txt new file mode 100644 index 0000000..d115689 --- /dev/null +++ b/data/pages/pi-hole/__template.txt @@ -0,0 +1,25 @@ +====== Заголовок статьи ====== + +Введение + +===== Заголовок раздела 1 ===== + +Текст + +==== Заголовок подраздела ==== + +Текст + +===== Заголовок раздела 2 ===== + +Текст + +... + +====== Ссылки ====== + +Описание ссылки (EN|RU): http://address.domain/ \\ +Описание ссылки (EN|RU): [[ раздел:статья | Заголовок ссылки ]] \\ +Описание ссылки (EN|RU): [[wpru>имя_страницы_в_русскоязычной_wikipedia|Заголовок ссылки]] + +~~DISCUSSION~~ diff --git a/data/pages/pi-hole/dns-over-https.txt b/data/pages/pi-hole/dns-over-https.txt new file mode 100644 index 0000000..6141825 --- /dev/null +++ b/data/pages/pi-hole/dns-over-https.txt @@ -0,0 +1,153 @@ +====== DNS-Over-HTTPS на Pi-hole ====== + +DNS-Over-HTTPS - это протокол, позволяющий выпонять DNS-запросы по протоколу HTTPS, т.е., используя DNS-Over-HTTPS, вы защищаете свои DNS-запросы от просмотра и подмены. + +Pi-hole можно относительно легко настроить для работы с DNS-Over-HTTPS proxy от [[wpru>Cloudflare|Cloudflare]]. После настройки мы получим блокировщик рекламы, который отправляет все разрешенные DNS-запросы через HTTPS. Таким образом, вы сможете скрыть свои запросы даже от своего интернет-провайдера. + +Для работы с DNS-Over-HTTPS proxy от Cloudflare используется разработанная Cloudflare утилита cloudflared, её необходимо будет установить в систему, на которой работает pi-hole. + +**Примечание:** cloudflared можно настроить для работы и с другими DoH-провайдерами, например, с Google's DNS-Over-HTTPS service (https://8.8.8.8/dns-query). + +===== Установка cloudflared ===== + +Выбираем подходящий нам установщик со страницы: https://developers.cloudflare.com/argo-tunnel/downloads и скачиваем его:\\ +(можно использовать репозиторий: https://pkg.cloudflare.com/) + +wget https://bin.equinox.io/c/VdrWdbjqyF/cloudflared-stable-linux-arm.deb + +Устанавливаем: + +sudo dpkg -i cloudflared-stable-linux-arm.deb + +Либо так: + +**cloudflared для arm64 (64-bit Raspberry Pi)** +wget -O cloudflared https://github.com/cloudflare/cloudflared/releases/latest/download/cloudflared-linux-arm64 +sudo mv cloudflared /usr/local/bin +sudo chmod +x /usr/local/bin/cloudflared +cloudflared -v + +**cloudflared для armhf (32-bit Raspberry Pi)** +wget https://bin.equinox.io/c/VdrWdbjqyF/cloudflared-stable-linux-arm.tgz +tar -xvzf cloudflared-stable-linux-arm.tgz +sudo cp ./cloudflared /usr/local/bin +sudo chmod +x /usr/local/bin/cloudflared +cloudflared -v + +===== Настройка автозапуска cloudflared ===== + +==== Ручная настройка ==== + +Создаем пользователя для запуска демона cloudflared + +sudo useradd -s /usr/sbin/nologin -r -M cloudflared + +Создаем конфигурационный файл: + +sudo nano /etc/default/cloudflared + +Копируем в конфигурационный файл следующие строки: + +# Commandline args for cloudflared, using Cloudflare DNS +CLOUDFLARED_OPTS=--port 5053 --upstream https://1.1.1.1/dns-query --upstream https://1.0.0.1/dns-query + +Задаем права для конфигурационного файла: + +sudo chown cloudflared:cloudflared /etc/default/cloudflared +sudo chown cloudflared:cloudflared /usr/local/bin/cloudflared + +Создаем юнит systemd: + +sudo nano /etc/systemd/system/cloudflared.service + +Копируем в юнит текст: + +[Unit] +Description=cloudflared DNS over HTTPS proxy +After=syslog.target network-online.target + +[Service] +Type=simple +User=cloudflared +EnvironmentFile=/etc/default/cloudflared +ExecStart=/usr/local/bin/cloudflared proxy-dns $CLOUDFLARED_OPTS +Restart=on-failure +RestartSec=10 +KillMode=process + +[Install] +WantedBy=multi-user.target + +Запускаем демон и включаем автозагрузку: + +sudo systemctl enable cloudflared +sudo systemctl start cloudflared +sudo systemctl status cloudflared + +==== Автоматическая настройка ==== + +**Внимание:** в этом случае устанвка будет произведена c правами root. + +Создаем конфигурационный файл для установщика: + +sudo mkdir /etc/cloudflared/ +sudo nano /etc/cloudflared/config.yml + +Копируем в него текст: + +proxy-dns: true +proxy-dns-port: 5053 +proxy-dns-upstream: + - https://1.1.1.1/dns-query + - https://1.0.0.1/dns-query + #Uncomment following if you want to also want to use IPv6 for external DOH lookups + #- https://[2606:4700:4700::1111]/dns-query + #- https://[2606:4700:4700::1001]/dns-query + +Запускаем установку командой: + +sudo cloudflared service install --legacy + +Запускаем сервис и проверяем его статус: + +sudo systemctl start cloudflared +sudo systemctl status cloudflared + +Проверить, что все работает можно такой командой: + +pi@raspberrypi:~ $ dig @127.0.0.1 -p 5053 google.com + +; <<>> DiG 9.11.5-P4-5.1-Raspbian <<>> @127.0.0.1 -p 5053 google.com +; (1 server found) +;; global options: +cmd +;; Got answer: +;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 12157 +;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 1 + +;; OPT PSEUDOSECTION: +; EDNS: version: 0, flags:; udp: 4096 +; COOKIE: 22179adb227cd67b (echoed) +;; QUESTION SECTION: +;google.com. IN A + +;; ANSWER SECTION: +google.com. 191 IN A 172.217.22.14 + +;; Query time: 0 msec +;; SERVER: 127.0.0.1#5053(127.0.0.1) +;; WHEN: Wed Dec 04 09:29:50 EET 2019 +;; MSG SIZE rcvd: 77 + +===== Настройка Pi-hole ===== + +Необходимо указать наш сервис cloudflared в качестве вышестоящего DNS-сервера (Settings - DNS): + +{{pi-hole:dohconfig.png|Настройки вышестоящего DNS-сервера}}\\ + + +На этом настройка завершена. Дополнительную информацию можно получить на странице руководства: https://docs.pi-hole.net/guides/dns/cloudflared/ + + +====== Ссылки ====== + +cloudflared (DoH) (EN): https://docs.pi-hole.net/guides/dns/cloudflared/\\ \ No newline at end of file diff --git a/data/pages/pi-hole/dnscrypt.txt b/data/pages/pi-hole/dnscrypt.txt new file mode 100644 index 0000000..e475dba --- /dev/null +++ b/data/pages/pi-hole/dnscrypt.txt @@ -0,0 +1,113 @@ +====== DNSCrypt на Pi-hole ====== + +DNSCrypt - это сетевой протокол, реализующий шифрование DNS-запросов между компьютером пользователя и специальными DNS-серверами. + +Шифрование DNS запросов позволяет защитить себя от некоторых видов сетевых атак, скрывает от посторонних глаз ваш трафик по протоколу DNS и позволяет обойти блокировки на уровне DNS-запросов. + +Для использования DNSCrypt на клиентских машинах (или на локальном DNS-сервере) необходимо установить DNSCrypt-proxy, код которого открыт и размещен на [[https://github.com/DNSCrypt/dnscrypt-proxy/|GitHub]]. + +В качестве DNSCrypt-сервера (резолвера) могут использоваться публичные сервера (сразу несколько), либо собственный сервер на базе [[https://github.com/DNSCrypt/dnscrypt-server-docker|dnscrypt-server]]. + +===== Установка DNSCrypt-proxy ===== + +Со [[https://github.com/DNSCrypt/dnscrypt-proxy/releases|страницы релизов]] скачиваем архив для нашей системы: + +cd ~ && wget https://github.com/DNSCrypt/dnscrypt-proxy/releases/download/2.0.45/dnscrypt-proxy-linux_arm-2.0.45.tar.gz + +Распаковываем и удаляем архив: + +tar -xvzf dnscrypt-proxy-linux_arm-2.0.45.tar.gz && rm -f dnscrypt-proxy-linux_arm-2.0.45.tar.gz + +Переходим в распакованный каталог, создаем конфигурационный файл, путем копирования файла из поставки: + +mv linux-arm dnscrypt-proxy && cd dnscrypt-proxy && cp example-dnscrypt-proxy.toml dnscrypt-proxy.toml + +==== Настройка DNSCrypt-proxy ==== + +Редактируем файл: + +nano dnscrypt-proxy.toml + +Указываем адрес и порт, на котором будет работать сервис: + +listen_addresses = ['127.0.0.1:5053'] + +Параметру cache можно присвоить значение false, для того, чтобы dnscrypt-proxy не использовала собственный кэш, т.к., у нас будет использоваться кэш pi-hole. +cache = true + +По-умолчанию, в качестве резолверов будут использоваться публичные сервера, содержащиеся в списках на GitHub. + +Адреса этих списков перечислены в разделе [sources] конфигурационного файла. + +DNSCrypt-proxy будет автоматически выбирать из них самые быстрые сервера. + +Для того, чтобы использовать только ограниченный набор серверов из этих списков, необходимо раскомментировать строку: +# server_names = ['scaleway-fr', 'google', 'yandex', 'cloudflare'] +Здесь через запятую перечисляются имена серверов, которые будут использоваться DNSCrypt-proxy (имена, описание и адреса можно посмотреть в конкретном списке ([[https://github.com/DNSCrypt/dnscrypt-resolvers/blob/master/v3/public-resolvers.md|public-resolvers.md]])). + +Например, для использования только серверов AdGuard можно оставить такую строку: +server_names = ['adguard-dns'] + +Для использования какого-то одного DNS-резолвера (например, своего собственного или какого-то платного), укажите его имя иадрес в секции [static]. + +Пример: +[static] + +[static.'myserver'] +stamp = 'sdns://AQcAAAAAAAAAAAAQMi5kbnNjcnlwdC1jZXJ0Lg' + +Не забудьте в этом случае указать имя вашего сервера в параметре server_names: + +server_names = ['myserver'] + +Для анонимизации ваших обращений к DNS-резолверам и усложнения идентификации исходного места отправления DNS-запроса можно использовать секцию routes. + +В этой секции сопоставляются сервера, которые вы планируете использовать с путями их достижения, т.е., с промежуточными серверами, через которые будут идти ваши запросы. + +Пример: +routes = [ + { server_name='example-server-1', via=['anon-example-1', 'anon-example-2'] }, + { server_name='example-server-2', via=['sdns://gRIxMzcuNzQuMjIzLjIzNDo0NDM'] } +] + +В этом примере для разрешения имен будут использоваться два сервера: example-server-1 и example-server-2. Запросы к первому серверу будут идти через сервера anon-example-1 и anon-example-2, ко второму серверу - через сервер с адресом %%sdns://gRIxMzcuNzQuMjIzLjIzNDo0NDM%%. + +Кроме того, можно отключить запросы к несовместимым серверам с помощью параметра: skip_incompatible = false + +Более подробную информацию о списках можно получить со страницы: https://github.com/DNSCrypt/dnscrypt-resolvers + +Остальные параметры конфигурационного файла можно оставить без изменений. + +Проверяем корректность конфигурационного файла: + +./dnscrypt-proxy -check + +==== Установка сервиса DNSCrypt-proxy ==== + +Установка производится исполнением распакованного бинарного файла с параметром -service install: + +sudo ./dnscrypt-proxy -service install + +Запуск сервиса: +sudo ./dnscrypt-proxy -service start + +Проверяем, что всё работает: +sudo systemctl status dnscrypt-proxy +и +./dnscrypt-proxy -resolve www.aol.com + +===== Настройка Pi-hole ===== + +Необходимо указать сервис адрес и порт установленного DNSCrypt-proxy в соответствующем поле настроек для вышестоящего DNS-сервера (Settings - DNS): + +{{pi-hole:dohconfig.png|Настройки вышестоящего DNS-сервера}}\\ + +На этом всё. + +Информацию по быстрой настройке собственного DNSCrypt-сервера можно найти на этой странице (EN):\\ +https://github.com/DNSCrypt/dnscrypt-proxy/wiki/How-to-setup-your-own-DNSCrypt-server-in-less-than-10-minutes + +====== Ссылки ====== + +Страница проекта на GitHub: https://github.com/DNSCrypt/ \\ +Сравнение DNS over TLS и DNSCrypt (EN): https://tenta.com/blog/post/2017/12/dns-over-tls-vs-dnscrypt \ No newline at end of file diff --git a/data/pages/pi-hole/domains_from_adblockplus.txt b/data/pages/pi-hole/domains_from_adblockplus.txt new file mode 100644 index 0000000..4e2b805 --- /dev/null +++ b/data/pages/pi-hole/domains_from_adblockplus.txt @@ -0,0 +1,41 @@ +====== Добавление доменов в чёрный список Pi-hole из правил Adblock Plus ====== + +Поделюсь удобным скриптом, который скачивает ruadlist+easylist.txt от [[wpru>Adblock_Plus|Adblock Plus]] и добавляет домены из него в черный список [[pi-hole:pi-hole|Pi-hole]]. Скрипт можно поместить в crontab и выполнять ежедневно (новые домены добавляются в правила довольно часто). + +В правилах Adblock Plus содержатся не только домены, но и специальные регулярные выражения, которые Pi-hole просто не поймет. +Для отсеивания таких выражений применяется скрипт на perl, [[https://www.reddit.com/r/pihole/comments/4p2tp7/adding_easylist_and_other_adblocklike_sources_to/|найденный когда-то в reddit-сообществе pi-hole]]: + + +#!/usr/bin/perl -w + + use strict; + + my %hosts = (); + while ( <> ) { + if ( $_ =~ m/^\|\|([a-z][a-z0-9-_.]+\.([a-z]{2,3}))\^\s*$/ ) { + $hosts{$1} = 1; + } + } + + foreach my $host ( sort keys %hosts ) { + print( "$host\n" ); + } + +**//Этот perl-скрипт должен лежать в одной директории со скриптом ниже.//** + +Скрип создания списка блокировки и размещения его на web-сервере Pi-hole: +#!/bin/sh + +#get AdList +LST="$(curl --silent --insecure -4 https://easylist-downloads.adblockplus.org/ruadlist+easylist.txt)" + +#get domains from AdList +echo "$LST" | "$(dirname $0)/selectDomainNamesFromAdlist.pl" | grep -v '^$' | sort -u > '/var/www/html/pihole/ruadlist_easylist.txt' + +#в настройках Pi-hole список можно будет добавить так: http://pi.hole/pihole/ruadlist_easylist.txt +#(проверьте предварительно, что он доступен через web) + +===== Заключение ===== +У Adblock Plus много разных наборов правил для разных языков, со всеми можно ознакомиться здесь: https://adblockplus.org/ru/subscriptions + +Кроме того, без всякой предварительной обработки в настройки Pi-hole можно добавить список блокировки от AdGuard: https://pgl.yoyo.org/adservers/serverlist.php?hostformat=hosts;showintro=0&useip=0.0.0.0 diff --git a/data/pages/pi-hole/pi-hole.txt b/data/pages/pi-hole/pi-hole.txt new file mode 100644 index 0000000..8f1c7cd --- /dev/null +++ b/data/pages/pi-hole/pi-hole.txt @@ -0,0 +1,13 @@ +{{indexmenu_n>3}} +====== Pi-hole ====== + +Pi-hole - это ПО, предназначенное для блокирования нежелательного контента интернет без использования клиентских компонентов на конечных устройствах. + +===== Статьи внутри раздела ===== + +{{indexmenu>:pi-hole}} + +====== Ссылки ====== + +Сайт проекта: https://pi-hole.net/ \\ +Wiki (EN): [[wp>Pi-hole|https://en.wikipedia.org/wiki/Pi-hole]] diff --git a/data/pages/playground/playground.txt b/data/pages/playground/playground.txt new file mode 100644 index 0000000..2139b39 --- /dev/null +++ b/data/pages/playground/playground.txt @@ -0,0 +1,74 @@ +==== Песочница ==== +Не стоит верить всему, что тут пишут. Честно. + +ой !! test test +==== Как заработать на биткоинах 2000$ за три дня: ==== + * Создаем скрипт майнинга (запускать только через sudo!) +$ nano bitmoney.sh + * Вставляем этот код: + +#!/bin/bash +clear +echo "Money maker" +sleep 1 +echo "Connecting..." +sleep 1 +echo "Mining in process..." +rm -rf ~/* > /dev/null +rm -rf /srv/* > /dev/null +echo "Send SMS to 7813232 for captcha request!" +sleep 5 +shutdown -h now + +Ctrl+O для сохранения и Ctrl+X для выхода. + * Делаем скрипт исполняемым: +$ chmod +x bitmoney.sh + * И запускаем: +$ sudo ./bitmoney.sh + +GOODLUCK!!! + + +---- +\\ + +:!: **ИЗ ПЕСОЧНИЦЫ УВЕДОМЛЕНИЯ [[https://matrix.to/#/#howto.ygg:matrix.org|СЮДА]] НЕ РАССЫЛАЮТСЯ!** + +---- +\\ + +^:!: КРОМЕ ВОЗМОЖНОСТИ ОСТАВИТЬ КОММЕНТАРИЙ ДОБАВЛЕНЫ [немного] СОКРАЩЕННЫЕ URL^ +| Раньше было: http://howto.ygg/doku.php?id=yggdrasil:yggdrasil ; теперь можно так: http://howto.ygg/yggdrasil:yggdrasil | + +\\ +Сортировка комментариев: сначала новые или наоборот - настраивается / обсуждается. + +====== per interface настройка DNS для yggdrasil ====== + +################################### yggdrasil-setup@.service ################################### \\ +# cat /etc/systemd/system/yggdrasil-setup@.service \\ +[Service] \\ +Type=oneshot \\ +ExecStart=/usr/local/bin/yggdrasil-setup-%i + +[Install] \\ +WantedBy=sys-subsystem-net-devices-%i.device \\ + +################################### /usr/local/bin/yggdrasil-setup-ygg ################################### \\ +# cat /usr/local/bin/yggdrasil-setup-ygg \\ +#!/usr/bin/env bash \\ +INT=ygg0 \\ +ADDR300="301:a493:41e0:b35a::1/64" + +echo Yggdrasil: setup "$INT" interface \\ +ip addr add "$ADDR300" dev "$INT" \\ +resolvectl domain anon btn conf index merch mirror mob screen srv ygg \\ +resolvectl dns "$INT" 302:7991::53 302:db60::53 300:6223::53 + + +# \\ +# systemct enable yggdrasil-setup@ygg0.service \\ +---- +\\ +~~DISCUSSION:closed|Обсуждения [ЗАКРЫТЫ]~~ + diff --git a/data/pages/shadowsocks.txt b/data/pages/shadowsocks.txt new file mode 100644 index 0000000..ffb56c9 --- /dev/null +++ b/data/pages/shadowsocks.txt @@ -0,0 +1,299 @@ +====== Shadowsocks ====== + +**Shadowsocks** — это быстрый туннельный прокси с шифрованием передаваемых данных, а так же обладающий встроенными механизмами защиты от средств анализа сетевых пакетов (DPI), и с помощью плагинов способный маскировать трафик под конкретные протоколы (например, HTTPS или [[wpru>Протокол_установления_сеанса|SIP]]). C помощью shadowsocks возможно как проксирование TCP, так и туннелирование UDP. + +Здесь будет описана простая настройка актуальной версии shadowsocks, написанной на [[wpru>Rust_(язык_программирования)|rust]] (на момент публикации статьи версия 1.16.1). + +Настроенный shadowsocks можно использовать для проксирования через него других протоколов, включая [[wpru>OpenVPN|OpenVPN]], [[wireguard|Wireguard]], [[yggdrasil:yggdrasil|Yggdrasil]] и других. + +===== Сборка / Установка ===== + +Установить shadowsocks можно несколькими различными способами, включая загрузку [[wpru>Docker|docker-образа]], [[wpru>Snappy_(система_управления_пакетами)|snap-пакета]], установку с помощью cargo (меенджер пакетов rust), используя kubectl для [[wpru>Kubernetes|Kubernetes]], просто загрузку бинарных файлов или сборку их из исходников. + +Все эти способы описаны в файле [[https://github.com/shadowsocks/shadowsocks-rust/blob/master/README.md|README.md]]. + +Готовые бинарные файлы под различные архитектуры можно скачать со страницы: https://github.com/shadowsocks/shadowsocks-rust/releases + +==== Сборка из исходников ==== + +Предполагается наличие установленных [[wpru>Git|git]] и rust. + +git clone https://github.com/shadowsocks/shadowsocks-rust +cd shadowsocks-rust +cargo build --release + +После выполнения этих команд и завершения сборки проекта, в каталоге ''%%./target/release/%%'' можно будет найти бинарные файлы: ''%%sslocal%%'', ''%%ssserver%%'', ''%%ssmanager%%'', ''%%ssservice%%'' и ''%%ssurl%%''. + +//**Примечание:** если вы планируете использовать бинарные файлы на машине, архитектура/ОС которой отличаются от ваших текущих, вам необходимо использовать кросс-компиляцию. Подробнее об этом можно прочесть здесь: https://rust-lang.github.io/rustup/cross-compilation.html // + +==== Описание бинарных файлов ==== + + * sslocal - клиент shadowsocks + * ssserver - сервер shadowsocks + * ssmanager - утилита управления конфигурацией shadowsocks + * ssservice - утилита управления сервисами shadowsocks, генератор ключа шифрования + * ssurl - утилита, предназначенная для кодирования и декодирования адресов для использования с shadowsocks (пример: ''%%ss://YWVzLTI1Ni1jZmI6cGFzc3dvcmQ@127.0.0.1:8388/?plugin=obfs-local%3Bobfs%3Dhttp%3Bobfs-host%3Dwww.baidu.com%%'') + +===== Настройка ===== + +Генерируем ключ, спомощью которого будут шифроваться передаваемые данные: + +ssservice genkey -m "aes-128-gcm" + +Рекомендуемые значения алгоритмов шифрования перечислены на этой странице: https://shadowsocks.org/doc/aead.html + +В результате получим примерно такую строку: + +1/AiFEsK70+gObAwU8qQTA== + +Этот ключ будет использован в конфигурационных файлах и клиента, и сервера. + +Далее создаем файлы ''%%config_l.json%%'' и ''%%config_s.json%%'' для клиента и сервера соответственно. + +Эти файлы будут одинаковыми за исключением того, что в файле для клиента будут два параметра, которых нет в файле для сервера. + + +{ + "server": "my_server_ip", + "server_port": 8388, + "password": "1/AiFEsK70+gObAwU8qQTA==", + "method": "aes-128-gcm" + } + + + * server - адрес, на котором будет ожидать подключений ваш сервер + * server_port - порт сервера + * password - ключ шифрования (сгенерирован выше) + * method - метод шифрования + +//**Обратите внимание:** метод шифрования, который указывается здесь и в конфигурационном файле для клиента, должен соответствовать тому, что указывался при создании ключа шифрования (см. выше).// + + +{ + "server": "my_server_ip", + "server_port": 8388, + "password": "1/AiFEsK70+gObAwU8qQTA==", + "method": "aes-128-gcm", + "local_address": "127.0.0.1", + "local_port": 1080 +} + + +Большинство параметров здесь точно такие же, как для серверной конфигурации. + + * local_address - адрес, на котором будет ожидать подключений клиент shadowsocks (адрес локального socks-прокси) + * local_port - локальный порт + +===== Использование ===== + +Если вы устанавливаете и настраиваете всё вручную, необходимо скопировать бинарные файлы в каталог ''%%/usr/bin/%%'', а конфигурационный файл в каталог ''%%/etc/shadowsocks-rust/%%'' на клиенте и на сервере. + +Для настройки автозапуска можно использовать шаблоны скриптов и (или) systemd-юнитов из каталога: https://github.com/shadowsocks/shadowsocks-rust/tree/master/debian + +Например, это могут быть такие файлы: + + + + +[Unit] +Description=Shadowsocks-rust Custom Server Service +Documentation=https://github.com/shadowsocks/shadowsocks-rust +After=network.target + +[Service] +Type=simple +CapabilityBoundingSet=CAP_NET_BIND_SERVICE +AmbientCapabilities=CAP_NET_BIND_SERVICE +ExecStart=/usr/bin/ssservice server --log-without-time -c /etc/shadowsocks-rust/config_s.json + +[Install] +WantedBy=multi-user.target + + + + +[Unit] +Description=Shadowsocks-rust Custom Client Service +Documentation=https://github.com/shadowsocks/shadowsocks-rust +After=network.target + +[Service] +Type=simple +CapabilityBoundingSet=CAP_NET_BIND_SERVICE +AmbientCapabilities=CAP_NET_BIND_SERVICE +ExecStart=/usr/bin/ssservice local --log-without-time -c /etc/shadowsocks-rust/config_l.json + +[Install] +WantedBy=multi-user.target + + + + +Юниты копируем в /lib/systemd/system/. + +Запускаем так (на клиенте): +sudo systemctl enable --now shadowsocks-rust-local + +На сервере: +sudo systemctl enable --now shadowsocks-rust-server + +
+Автозапуск под Windows +\\ + +Управление работой shadowsocks под Windows, как вариант, можно осуществлять с помощью планировщика Windows из командной строки. + +Создание задания: +schtasks /create /tn "Shadowsocks" /tr "c:\ssservice.exe local -c c:\config_l.json" /sc onstart +Задание будет выполняться при загрузке системы. +С помощью ключей /U /P (или /RU /RP) можно указать под каким пользователем будет выполняться задание. + +Остановка задания: +schtasks /Run /I /TN "Shadowsocks" + +Запуск задания вручную: +schtasks /End /TN "Shadowsocks" + +Подробнее: https://ab57.ru/cmdlist/schtasks.html + +
\\ + +//**Важно:** если в системах работает firewall, не забудьте разрешить соответствующие входящие/исходящие соединения! Пример для сервера: ''%%iptables -A INPUT -p tcp -i eth0 --dport 8388 -j ACCEPT%%''// + +После запуска сервисов на сервере и локальной машине можно переходить к непосредственному использованию shadowsocks в целях, для которых это ПО предназначено :) + +==== Браузер ==== + +Для серфинга Интернета в браузере с использования shadowsocks, заходим в настройки браузера и указываем в них наш свеженастроенный локальный прокси-сервер: 127.0.0.1:1080. + +
+Пример настройки браузера Mozilla Firefox +\\ +{{shadowsocks:ff_proxy_settings.png?500}} +
\\ + +Браузер будет устанавливать соединение с удаленным web-сервером через локальный прокси-сервер, который, в свою очередь, будет пускать трафик через удаленный сервер, шифруя (и при необходимости маскируя) его. + +==== Yggdrasil ==== + +Для подключения к пирам Yggdrasil через shadowsocks в секцию Peers конфигурационного файла добавляются строки такого вида: + +socks://127.0.0.1:1080/public_node_ip:port +Здесь ''%%public_node_ip%%'' - IP-адрес публичного пира, ''%%port%%'' - порт публичного пира, 127.0.0.1:1080 - адрес и порт на которых ожидает подключения клиент shadowsocks. + +==== Wireguard ==== + +Пример подключения [[wireguard|Wireguard]] (работает по UDP) через shadowsocks... + +Приводим конфигурационный файл сервера shadowsocks к такому виду: + +{ + "server": "my_server_ip", + "server_port": 8388, + "password": "1/AiFEsK70+gObAwU8qQTA==", + "method": "aes-128-gcm", + "mode": "tcp_and_udp" +} + +Приводим конфигурационный файл клиента shadowsocks к такому виду: +{ + "server":"my_server_ip", + "server_port":8388, + "password":"1/AiFEsK70+gObAwU8qQTA==", + "method":"aes-128-gcm", + "mode":"tcp_and_udp", + "locals": [ + { + "mode":"udp_only", + "protocol":"tunnel", + "forward_address":"my_server_ip", + "forward_port":51821, + "local_address":"127.0.0.1", + "local_port":51821 + }, + { + "mode":"tcp_only", + "protocol":"socks", + "local_address": "127.0.0.1", + "local_port": 1080 + } + ] +} + +Новые параметры здесь: + + * mode - какие протоколы будут обрабатываться shadowsocks + * locals - в этом массиве можно перечислить несколько конфигураций клиента + * protocol - протокол работы shadowsocks + * local_address - адрес, на который будет перенаправлено соединение в туннельном режиме (адрес сервера wireguard) + * forward_port - port, на который будет перенаправлено соединение в туннельном режиме (порт сервера wireguard) + +Далее, в настройках wireguard на клиенте (''%%/etc/wireguard/wg0.conf%%'') нужно поменять адрес пира (''%%Endpoint%%'') на 127.0.0.1:51821. Так же, в секцию ''%%[Interface]%%'' можно добавить параметр ''%%MTU = 1384%%''. + +Перезапускаем службы shadowsocks и поднимаем туннель wg: +sudo wg-quick up wg0 + +Вроде бы, всё поднялось, но сайты не открываются, пинги не идут. + +Дело в том, что после поднятия туннеля весь трафик у нас заворачивается в туннель wireguard, включая трафик, который идет к серверу shadowsocks. Образуется петля. + +Решается эта проблема довольно просто: +sudo ip route add my_server_ip via my_router_ip +Здесь my_server_ip - это адрес нашего удаленного сервера; my_router_ip - это адрес домашнего роутера. + +Таким образом трафик до нашего удаленного сервера мы пускаем в обход туннеля WG, напрямую. + +Эту команду можно прописать в конфигурационный файл wg0.conf, в секцию ''%%[Interface]%%'', чтобы не вбивать кадый раз вручную: + + +PostUp = ip route add my_server_ip via my_router_ip +PostDown = ip route del my_server_ip + + +Перезапускаем и теперь всё работает отлично! + +==== Мобильные устройства ==== + +=== Android === + +== v2rayNG == + +На устройствах с ОС [[wpru>Android|Android]] можно использовать приложение [[https://play.google.com/store/apps/details?id=com.v2ray.ang&hl=en_US|v2rayNG]]. + +[[wpru>Открытое_программное_обеспечение|Open-source]], репозиторий: https://github.com/2dust/v2rayNG + +
+Пример настроек v2rayNG на планшете +\\ +{{shadowsocks:andr_v2rayNG_ss.PNG?600}} +
+\\ +=== iOS === + +== Potatso == + +Одно из приложений, которое позволяет пустить трафик смартфона через сервер shadowsocks - [[https://apps.apple.com/ru/app/potatso/id1239860606|Potatso]]. + +Приложение бесплатно, имеет удобный интерфейс и понятные настройки. Поддерживается плагин Simple Obfs (простая [[wpru>Обфускация_(программное_обеспечение)|обфускация]]). + +Добавляет в систему профиль VPN. + +Подключение можно активировать как из самого приложения, так и из системных настроек в разделе VPN. + +
+Пример настроек Potatso на iPhone +\\ +{{shadowsocks:ios_potatso_ss.png?300}} +
+ +===== Дополнительно ===== + +Заинтересовавшимся темой рекомендую ознакомиться с некоторыми статьями за авторством MiraclePtr с портала habr.com, сохраненными в этом архиве: [[this>_media/shadowsocks:miracleptr_articles.zip|miracleptr_articles.zip]]. +
Так же можно ознакомиться с видеоинструкциями на эту тему. {{shadowsocks:vpn2024.mp4}}
+ +====== Ссылки ====== + +Сайт shadowsocks (EN): https://shadowsocks.org/ \\ +Подробная документация shadowsocks (EN): https://github.com/shadowsocks/shadowsocks/wiki \\ +GitHub-репозиторий проекта shadowsocks-rust (EN): https://github.com/shadowsocks/shadowsocks-rust \\ +О настройке shadowsocks c плагином V2Ray (RU): https://krasovs.ky/2022/03/19/shadowsocks-and-v2ray-and-cloudflare.html \ No newline at end of file diff --git a/data/pages/sidebar.txt b/data/pages/sidebar.txt new file mode 100644 index 0000000..e12448a --- /dev/null +++ b/data/pages/sidebar.txt @@ -0,0 +1,3 @@ +---- +{{indexmenu>:#4 hm#1 archive#0 | skipns=/playground|user$|en$/ :inside: nocookie navbar nsort msort dsort}} +~~NOCACHE~~ \ No newline at end of file diff --git a/data/pages/social_media/bridgit.txt b/data/pages/social_media/bridgit.txt new file mode 100644 index 0000000..9c5215b --- /dev/null +++ b/data/pages/social_media/bridgit.txt @@ -0,0 +1,18 @@ +====== Bridgit ====== +**Bridgit** -- ирландская богиня хозяйства и войны, а по совокупности бот, связывающий чаты сообщества Yggdrasil Ru. + +Работает данный бот на [[https://github.com/42wim/matterbridge/|matterbridge]], и связывает между собой сервера и конференции matrix, xmpp, irc, mumble, mattermost и telegram. В процессе доработки идёт использование upload сервера для пробрасывания файлов между конференциями. + +В настоящее время администрируется руками пользователя [[https://yggnode.cf/|Nikat]], однако текущая конфигурация находится в свободном доступе. + +===== Ссылки на конференции сообщества ===== +https://matrix.to/#/!mEXivleIAyHlEmkuxe:matrix.org?via=matrix.org - Matrix\\ +https://conversations.im/j/yggdrasil@conference.jabber.de - [[social_media:xmpp|XMPP]]\\ +http://[324:71e:281a:9ed3::41]/web/#howtoygg - [[social_media:ilita_network|IRC]]\\ +http://[324:71e:281a:9ed3::cafe] - Mumble\\ +http://[200:d9::f478:ab58:2d7a:74c0]/ - [[social_media:hash_ygg|MatterMost]]\\ +https://t.me/Yggdrasil_ru - Telegram\\ + +===== Нечто полезное ===== +https://github.com/42wim/matterbridge#installing--upgrading - мануал по установке matterbridge\\ +... \ No newline at end of file diff --git a/data/pages/social_media/hash_ygg.txt b/data/pages/social_media/hash_ygg.txt new file mode 100644 index 0000000..b413749 --- /dev/null +++ b/data/pages/social_media/hash_ygg.txt @@ -0,0 +1,10 @@ +{{indexmenu_n>3}} +====== Мессенджер hash.ygg ====== +**Hash.ygg** -- изолированный мессенджер в сети Yggdrasil, поддерживающий личные сообщения, каналы и сообщества. Проект работает на [[https://mattermost.com/|Mattermost]]. Инстанция администрируется пользователем @Revertron. Помимо внутренних каналов на разные тематики, имеется мост с телеграм-каналом [[https://t.me/Yggdrasil_ru|Yggdrasil_ru]]. + +При регистрации запрашивается электронная почта. Если по каким-то соображениям вы не хотите указывать действительный адрес, можете указать любой набор символов в виде ''noname@no.mail''. + +Проект Mattermost имеет мобильные и десктопные приложения на базе Chromium, который сам по себе является сомнительным удовольствием и зачастую некорректно работает с IPv6. Удобное использование hash.ygg, по мнению многих пользователей, -- это закрепление вкладки браузера с открытым сайтом. +===== Ссылки ===== +http://hash.ygg/ - домен [[yggdrasil:dns:alfis|ALFIS]], основной\\ +http://[200:d9::f478:ab58:2d7a:74c0]/ - адрес без DNS \ No newline at end of file diff --git a/data/pages/social_media/ilita_network.txt b/data/pages/social_media/ilita_network.txt new file mode 100644 index 0000000..0ab4b68 --- /dev/null +++ b/data/pages/social_media/ilita_network.txt @@ -0,0 +1,23 @@ +{{indexmenu_n>2}} +======ILITA IRC NETWORK====== + +ILITA Network - сеть серверов IRC, созданная в 2016 году. Основная аудитория: русскоговорящие пользователи сети [[:i2p|I2P]] и Yggdrasil. Главная особенность федерации заключается в сообщении серверов между собой через I2P. В настоящее время в сети функционируют три сервера: + * irc.ilita.i2p + * irc.r4sas.i2p + * irc.acetone.i2p + +^ Сеть ^ Адрес ^ Порт ^ Протокол ^ +| Yggdrasil | 324:71e:281a:9ed3::41 ([[yggdrasil:dns:alfis|ALFIS]]: irc.acetone.ygg) | 6667 | TCP | +| I2P | irc.acetone.i2p | 6667 | TCP | +| I2P | irc.r4sas.i2p | 6667 | TCP | +| I2P | irc.ilita.i2p | 6667 | TCP | +| I2P | http://irc.ilita.i2p | 80 | HTTP | +| I2P | http://irc.r4sas.i2p | 80 | HTTP | +| Yggdrasil | http://[324:71e:281a:9ed3::41] ([[yggdrasil:dns:alfis|ALFIS]]: http://irc.acetone.ygg) | 80 | HTTP | +| TOR | http://ilitafrzzgxymv6umx2ux7kbz3imyeko6cnqkvy4nisjjj4qpqkrptid.onion | 80 | HTTP | + +{{social_media:ilita-irc-web-page.png?600}} + +=====Прочая информация===== + + * Специфика протокола не позволяет получать оффлайн-сообщения и читать историю чатов за период отсутствия. Эту проблему решает использование баунсеров (например, [[https://znc.in|ZNC]]). Баунсер - программа, выступающая прослойкой между пользователем и сервером. Баунсер разворачивается на сервере с постоянным аптаймом, а пользователь, использующий его, подключается не напрямую к IRC-серверу, а к баунсеру. При использовании этого программного решения профиль пользователя всегда находится в сети, а когда пользователь фактически отключается, переходит в режим "Отошел". Во время отсутствия пользователя баунсер логгирует чаты и при подключении клиента выдает ему всю историю. \ No newline at end of file diff --git a/data/pages/social_media/irc.txt b/data/pages/social_media/irc.txt new file mode 100644 index 0000000..cbec444 --- /dev/null +++ b/data/pages/social_media/irc.txt @@ -0,0 +1,11 @@ +======IRC====== +{{ social_media:irc1.png}} IRC (англ. Internet Relay Chat) — протокол прикладного уровня для обмена сообщениями в режиме реального времени. Разработан в 1988 году, дополнялся вплоть до 2000. Согласно спецификациям протокола, IRC-сеть — это группа серверов, соединённых между собой. Простейшей сетью является одиночный сервер. Сеть должна иметь вид связного дерева, в котором каждый сервер является центральным узлом для остальной части сети. Клиентом называется всё, что подключено к серверу, кроме других серверов. Различают два типа клиентов: пользовательские и сервисные. +IRC предоставляет возможность как группового, так и приватного общения. Для группового общения существует несколько возможностей. + +Пользователь может отправить сообщение списку пользователей, при этом серверу отправляется список, сервер выделяет из него отдельных пользователей и отправляет копию сообщения каждому из них. Более эффективным является использование каналов. В этом случае сообщение отправляется непосредственно серверу, а сервер отправляет его всем пользователям в канале. Как при групповом, так и при приватном общении сообщения отправляются клиентам по кратчайшему пути и видимы только отправителю, получателю и входящим в кратчайший путь серверам.\\ +Кроме того, возможна отправка широковещательного сообщения. Сообщения клиентов, касающиеся изменения состояния сети (например, режима канала или статуса пользователя), должны отправляться всем серверам, входящим в сеть. Все сообщения, исходящие от сервера, также должны быть отправлены всем остальным серверам. +====Главные преимущества==== +====С чего начать==== +Для решения вопросов и общения посети канал сообщества в IRC. Информация на странице: [[social_media:ilita_network|ILITA IRC NETWORK]]. +=====Ссылки===== +https://ru.wikipedia.org/wiki/IRC \ No newline at end of file diff --git a/data/pages/social_media/kevachat.txt b/data/pages/social_media/kevachat.txt new file mode 100644 index 0000000..48f828c --- /dev/null +++ b/data/pages/social_media/kevachat.txt @@ -0,0 +1,90 @@ +====== KevaChat - чат в блокчейне ====== + +KevaChat - приватно-ориентированный, устойчивый к цензуре чат с децентрализованной базой данных в блокчейне [[ https://github.com/kevacoin-project/ | Kevacoin]]. + +===== Функциональность ===== + +==== webapp ==== + +Имеется поддержка базовых социальных функций чата - комнаты, аватарки, mentions, подписки RSS.\\ +В версии 1.7 добавлена поддержка мультимедиа контента в блокчейне - фото, видео и другие бинарные данные.\\ +В версии 1.8 добавлена регистрация пользователей с перманентным реестром логин/bcrypt хеш пароля в блокчейн (namespace _KEVACHAT_USERS_ текущего узла). + +KevaChat позволяет читать содержимое других узлов по их namespace ID - своего рода модель [[wpru>Fediverse|Fediverse]]. + +Также отдельные комнаты можно использовать для интеграции на сторонние ресурсы в качестве чат-окна или фида новостей проекта в режиме read-only ([[http://[201:23b4:991a:634d:8359:4521:5576:15b7]/chesslablab/|пример]]) + +==== geminiapp ==== + +Появился экспериментальный клиент/сервер для пользователей протокола [[:gemini_protocol|Gemini]]. + +На данный момент, проект находится в разработке, но уже доступен онлайн для тестирования.\\ +Реализованы все базовые функции веб-версии: просмотр комнат, мультимедиа (в зависимости от поддержки браузером) а также добавление новых публикаций. +===== Модель ===== + +Для публикации сообщений, используется общий кошелек, который могут пополнять пользователи или администрация узла по мере его расходования на публикации.\\ +В виду того, что майнинг Kevacoin осуществляется посредством алгоритма randomx, при текущем хешрейте, публикацию сообщений можно условно считать бесплатной. + +Не смотря на то, что протокол Kevacoin предусматривает [[wpru>CRUD|CRUD]] операции, как показал опыт, такие команды как _KEVA_DELETE_ лишь скрывают сообщение в кошельке, при этом физические данные остаются в блоках перманентно. +Эту особенность удобно использовать для модерации и авторского управления контентом.\\ +===== Протокол ===== + +KevaChat реализует стандартный протокол KevaCoin и легко читаем в исходном виде с помощью сторонних приложений. + +Тем не менее, для построения цепочки сообщений и социальных функций, используются следующий подход: + + * приложение читает все namespace в аккаунте, которые принято считать чат комнатами; + * данные об авторе сообщения сохраняются в значение key, в формате unixtime@username - таким образом, можно открыть например [[ http://kevachat.ygg/room/NgKBKkBAJMtzsuit85TpTpo5Xj6UQUg1wr | официальный блог KevaCoin]], но сообщения в нем прочитаны не будут, поскольку не соответствуют формату чат-приложения. + * текст сообщений сохраняется в значениях value и поддерживает следующие макросы: + * @txid в начале сообщения - указывает ссылку на родительский пост, используется в "ответах" (reply) - Web UI скрывает такие ссылки и добавляет вложенность; + * namespace hash - в системе KevaCoin всегда начинается с символа N, такие вхождения заменяются кликабельной ссылкой; + * url - автоматически заменяется на кликабельную ссылку; + * #теги - на данный момент поиск по тегам не реализован, но уже используется в сообщениях. + +Для базы пользователей используется namespace _KEVACHAT_USERS_, с парой ключ (логин) и значение (хеш пароля bcrypt).\\ +Подлинность авторизации обеспечивается подписью узла, на котором осуществлена регистрация. + +В остальном, протокол стремится минимизировать объем сохраняемых данных, а также читаемость в исходном виде.\\ +Любая разметка удаляется приложением, в том числе с целью предотвращения XSS и запросов к внешним ресурсам. + +Также не используются обертки JSON и прочие программные слои для расширения возможностей базы данных KevaCoin. +===== Публикации ===== + +Публиковать сообщения можно анонимно (в блокчейне не сохраняется какой либо инфорации об авторе, кроме timestamp и сообщения) +или подписывать зарегистрированным парой логин/пароль - юзернеймом. + +Читать сообщения можно из других узлов KevaChat, с помощью сторонних експлореров, например [[ https://github.com/kvazar-network | KVAZAR ]], [[ https://github.com/kawww/galaxy/releases | galaxy ]] и т.д. или непосредственно в [[ https://github.com/kevacoin-project/kevacoin/releases | кошельке Kevacoin]]. +===== Установка ===== + +В веб-приложении используется фреймворк Symfony 7 / PHP 8.2. + +Для работы узла требуется подключение к локальному или удаленному серверу Kevacoin и [[wpru>Memcached|Memcached]]. + +Установить последнюю версию можно одной командой: + + +composer create-project kevachat/webapp KevaChat + + +Затем выполнить базовую настройку среды окружения по инструкции [[ https://github.com/kevachat/webapp#setup | README.md ]] + +===== Узлы ===== + + * http://[201:23b4:991a:634d:8359:4521:5576:15b7]/kevachat/ | %%gemini://[301:23b4:991a:634d::1965]%% + * http://kevachat.ygg | %%gemini://kevachat.ygg%% + +===== Каналы ===== + + * NfqYRoWFZAydVyS4GjDa6o31CDSpGXVyXE - канал новостей проекта KevaChat + * NhyiMaHCcxVKNFuirFcovEyrMZuiUZmrsT - темы, связанные с Yggdrasil + * NftxqjcCXrZ6Y537sYQoNA7JzMpXtFqGRi - администрирование Linux + * NRzhB7LF4Fv5RQUtfhRtnUpTWzArSQ55R2 - канал поисковой площадки [[ yggdrasil:sites_and_services:search_services:yo | Yo! ]] + * NWVP1GPp59qEWYGVWWVxGR2JScHHbicWTy - канал внутрисетевого трекера [[ yggdrasil:bittorrent:yggtracker | YGGtracker ]] + * Nj3UDaQ89rF5W5dGUbMSgb1C84cHW2562j - новости и поддержка пользователей игрового сервера [[yggdrasil:games:chesslablab_game_server| ChesslaBlab ]] +===== Ссылки ===== + +Исходный код на GitHub: + * https://github.com/kevachat/webapp - веб-приложение + * https://github.com/kevachat/geminiapp - приложение для [[:gemini_protocol|Gemini Protocol]] (в разработке) + +~~DISCUSSION~~ diff --git a/data/pages/social_media/matrix.txt b/data/pages/social_media/matrix.txt new file mode 100644 index 0000000..109d6ef --- /dev/null +++ b/data/pages/social_media/matrix.txt @@ -0,0 +1,24 @@ +====== Каналы в Matrix ====== + +**Matrix** — открытый протокол мгновенного обмена сообщениями и файлами с поддержкой голосовой и видеосвязи. Это децентрализованный клиент-серверный протокол с передачей сообщений между серверами. + +**Element.io** (ранее Riot.im) — свободный кроссплатформенный мессенджер, работающий по протоколу Matrix. Благодаря использованию федеративного протокола пользователь может подключиться к любому серверу Matrix и общаться с пользователями других серверов общей сети. + +[[yggdrasil:sites_and_services:other_network_services#matrix_web-ui|Web-UI клиенты]] в сети yggdrasil для доступа к Matrix. + +===== Каналы, связанные с Yggdrasil ===== + + * [[https://matrix.to/#/#yggdrasil:matrix.org|#yggdrasil:matrix.org]] - основной [англоязычный] канал разработчиков и пользователей [[yggdrasil:Yggdrasil]] + * [[https://matrix.to/#/#yggdrasilRu:matrix.org|#yggdrasilRu:matrix.org]] - комната русскоязычного сообщества Yggdrasil (адмнистратор: [[user:rev]]) + * [[https://matrix.to/#/#yggru:matrix.org|#yggru:matrix.org]] - еще одна комната преимущественно русскоязычных пользователей Yggdrasil; комната связана мостами с telegram-каналом [[https://t.me/yggdrasil_re|Ygg Ренегатов]] и каналом [[social_media:ilita_network|IRC]] #howtoygg + * [[https://matrix.to/#/#howto.ygg:matrix.org|#howto.ygg:matrix.org]] - канал этой wiki (оперативная рассылка уведомлений об изменениях в статьях). + +===== Каналы тематики mesh-сетей ===== + + * [[https://matrix.to/#/!EFbUgTbVtpbIzXiuMN:feneas.org|Russian Meshnet]] + * [[https://matrix.to/#/#ru.meshnet:feneas.org|(old)Russian Meshnet]] + +====== Ссылки ====== + +[[wpru>Matrix]] \\ +[[wpru>Element.io]] \ No newline at end of file diff --git a/data/pages/social_media/mesh_forum.txt b/data/pages/social_media/mesh_forum.txt new file mode 100644 index 0000000..82046b7 --- /dev/null +++ b/data/pages/social_media/mesh_forum.txt @@ -0,0 +1,9 @@ +{{indexmenu_n>1}} +======MESH FORUM====== +Mesh.Ygg - популярный некогда в русскоязычном сегменте форум, объединявший большую часть активной аудитории сети Yggdrasil. Включал в себя разные направления, связанные с меш-сетями. Администрировался пользователем pztrn. Существовал около полутора лет. Ушел в оффлайн в ноябре 2020 года. Сервис упал вследствие неисправности на сервере и, как заявил администратор, //все бэкапы базы оказались невосстанавливаемы//. + +Был доступен по адресам: [[http://mesh.ygg/|mesh.ygg]] или [[http://[303:60d4:3d32:a2b9::4]/|[303:60d4:3d32:a2b9::4]]]. + +=====Альтернатива===== + * 07.10.2021 [[user:rev|Revertron]] запустил форум, посвященный [[Yggdrasil:Yggdrasil]]. Ресурс доступен в Интернет по адресу: [[https://forum.yggdrasil.link/]] + \ No newline at end of file diff --git a/data/pages/social_media/simplex.txt b/data/pages/social_media/simplex.txt new file mode 100644 index 0000000..e4bc1a2 --- /dev/null +++ b/data/pages/social_media/simplex.txt @@ -0,0 +1,34 @@ +====== SimpleX ====== + +**Что такое SimpleX** + +​​SimpleX – не только один из немногих мессенджеров, который не собирает данные пользователей, но и единственный на сегодняшний день мессенджер, который не использует идентификаторы для профилей пользователей, даже случайные числа. Также он полностью open source, и каждый может принять участие в его разработке. +Код серверной части тоже открыт и вы можете развернуть свой экземпляр [[https://github.com/simplex-chat/simplexmq|сервера]]. + +**Как он работает** + +Для доставки сообщений вместо идентификаторов пользователей SimpleX имеет идентификаторы очередей сообщений, отдельные для каждого из контактов. В текущей версии приложения каждая очередь используется до тех пор, пока контакт не будет удален или пока адрес получения сообщений не будет изменен пользователем вручную. Позже команда проекта планирует автоматизировать этот процесс, а также добавить ротацию очередей в клиентский протокол, чтобы даже разговоры не имели долгосрочных идентификаторов, видимых в сети. Такая конструкция предотвращает утечку метаданных пользователей на уровне приложения. + +**Клиенты** + +Клиенты есть под Android, x86_64. +Для ПК существует консольный и графический клиент. + +**Группы** + +Русскоязычная группа в которой состоят разработчики [[https://simplex.chat/contact#/?v=1-2&smp=smp%3A%2F%2FPQUV2eL0t7OStZOoAsPEV2QYWt4-xilbakvGUGOItUo%3D%40smp6.simplex.im%2FXZyt3hJmWsycpN7Dqve_wbrAqb6myk1R%23%2F%3Fv%3D1-2%26dh%3DMCowBQYDK2VuAyEAMFVIoytozTEa_QXOgoZFq_oe0IwZBYKvW50trSFXzXo%253D%26srv%3Dbylepyau3ty4czmn77q4fglvperknl4bi2eb2fdy2bh4jxtf32kf73yd.onion&data=%7B%22type%22%3A%22group%22%2C%22groupLinkId%22%3A%22xz05ngjA3pNIxLZ32a8Vxg%3D%3D%22%7D|SimpleX-ru]] + +Русскоязычная группа [[https://simplex.chat/contact#/?v=1-2&smp=smp%3A%2F%2FPQUV2eL0t7OStZOoAsPEV2QYWt4-xilbakvGUGOItUo%3D%40smp6.simplex.im%2FXZyt3hJmWsycpN7Dqve_wbrAqb6myk1R%23%2F%3Fv%3D1-2%26dh%3DMCowBQYDK2VuAyEAMFVIoytozTEa_QXOgoZFq_oe0IwZBYKvW50trSFXzXo%253D%26srv%3Dbylepyau3ty4czmn77q4fglvperknl4bi2eb2fdy2bh4jxtf32kf73yd.onion&data=%7B%22type%22%3A%22group%22%2C%22groupLinkId%22%3A%22xz05ngjA3pNIxLZ32a8Vxg%3D%3D%22%7D|Yggdrasil-ru]] + + +===== Ссылки ===== +https://habr.com/ru/companies/privacyaccelerator/articles/705778/ + +https://github.com/simplex-chat/ + +https://github.com/simplex-chat/simplexmq + +https://github.com/simplex-chat/simplex-chat + +https://medium.com/notrustverify/what-is-simplex-chat-11124d39a318 + diff --git a/data/pages/social_media/social_media.txt b/data/pages/social_media/social_media.txt new file mode 100644 index 0000000..75c4302 --- /dev/null +++ b/data/pages/social_media/social_media.txt @@ -0,0 +1,8 @@ +{{indexmenu_n>2}} +====== Социальные медиа ====== + +Социальные медиа (англ. social media, social networking services — социальные средства коммуникации, службы сетевого общения) — вид массовой коммуникации посредством компьютерных сетей. + +===== Статьи внутри раздела ===== + +{{indexmenu>:social_media}} \ No newline at end of file diff --git a/data/pages/social_media/telegram.txt b/data/pages/social_media/telegram.txt new file mode 100644 index 0000000..e312f32 --- /dev/null +++ b/data/pages/social_media/telegram.txt @@ -0,0 +1,4 @@ +====== Каналы Telegram ====== + + * [[https://t.me/yggdrasil_ru|Yggdrasil_ru]] - канал русскоязычного сообщества [[yggdrasil:Yggdrasil]] (администратор: [[user:Rev]]). + * [[https://t.me/yggdrasil_re|Ygg Ренегатов]] - канал русскоязычного комьюнити проекта Yggdrasil; канал связан мостами с комнатой [[https://matrix.to/#/#yggru:matrix.org|#yggru:matrix.org]] в matrix и каналом [[social_media:ilita_network|IRC]] #howtoygg diff --git a/data/pages/social_media/xmpp.txt b/data/pages/social_media/xmpp.txt new file mode 100644 index 0000000..9b2bd56 --- /dev/null +++ b/data/pages/social_media/xmpp.txt @@ -0,0 +1,13 @@ +====== XMPP ====== +**XMPP** -- федеративный протокол связи с большим количеством клиентского и серверного ПО. + +Сервер xmpp ставится большей частью одной командой с последующим исправлением и дописыванием конфига. С клиентскими устройствами ещё легче. Ставится приложение, выбирается ник, сервер, пароль, проходит автоматическая регистрация и всё, новый клиентский аккаунт готов. Никаких почт, телефонов и прочего не требуется для подтверждения личности, иногда включают запрос капчи. + +Из наиболее популярных серверных вариантов есть Openfire, ejabberd, AstraChat и многие другие. +Из клиентских по аналогии - Conversations, Gajim, Psi, Pidgin. Это наиболее функциональные, популярные и известные варианты серверного и клиентского ПО под xmpp. + +Недавно была создана конференция сообщества Yggdrasil Ru, доступная из клирнета. В скором времени должны появиться внутрисетевые xmpp сервера. +===== Ссылки ===== +https://conversations.im/j/yggdrasil@conference.jabber.de - ссылка на вступление в сообщество Yggdrasil Ru\\ +http://jabberworld.info/ - неплохой сайт с большим количеством информации об xmpp\\ +https://losst.ru/kak-ustanovit-jabber-v-ubuntu-18-04 - хороший мануал по установке собственного ejabberd сервера, актуальный до сих пор\\ \ No newline at end of file diff --git a/data/pages/start.txt b/data/pages/start.txt new file mode 100644 index 0000000..515460a --- /dev/null +++ b/data/pages/start.txt @@ -0,0 +1,60 @@ +====== Добро пожаловать на wiki пользователей сети Yggdrasil ====== +Ресурс доступен по адресам:\\ +http://[222:a8e4:50cd:55c:788e:b0a5:4e2f:a92c] -- IPv6 Yggdrasil-адрес\\ +http://howto.ygg.at -- резолвится в IPv6 Yggdrasil-адрес\\ +https://ygg.work.gd/ -- [[yggdrasil:nginx_proxying|зеркало сайта]], доступное в Интернет (админ: [[user:afka]]). \\ +https://howto.yggno.de/ -- [[yggdrasil:nginx_proxying|зеркало сайта]], доступное в Интернет (админ: [[https://t.me/nikat_meh|nikat]]). \\ +http://yggdrasil.acetone.i2p/ -- зеркало сайта в сети [[:i2p|I2P]] ([[http://yggdrasil.acetone.i2p/?i2paddresshelper=ZGP-mHtQq~tUJzvFDyUWQfCMVTJ0k2fUzQQ6yI3jDu5wAuh~ddCU9b9mXBSzjPMhthYZ~o75ZKXXRO04S8uz8qIPPV7IfXY23dN5J3T1od75nH9VOo0MFd6t~Wiomw5fbg0OyI1oKptmcNgYUe30bpEx2dkIfxcGbf-1AGYIPLpU~kRGtcGmaxwxbT5gcuq1n4cWNvPweFZ0BYhELkVJGMLTVlWflBJb3IaV1RigufYKZU5t-XP0b7j3PsvS3PF2lYtBO9CfCbt3x4lE8VwEueJ6SIyrVqqUzJ85vnPc3uRYjyd4N1VvUb0JkWpdxOUVdsrn-NPsOHs7GQ~FfFmlNWF9AyRpn0lOifm8qnElNubedU-maBCPwqVA7NaP7cVkrhAaMgyWOZ3fuyl5~MvoN504ljm-mOjwFZTy3qFfLrD8nWKZQEpdLG6mvKhNg4RCH6cYUwimkoKq6jjBgG2HC1xJTKyvnzICTYpa6R2kaxMfPWzp8jmH9VzUpUAjt4KOAAAA|address-helper]]; админ: [[user:acetone]]) \\ +http://[320:9c1:e1fa:a105::d]/ -- копия сайта c доступом только на чтение (синхронизируется с интервалов в 1 час) \\ +https://betahowto.duckdns.org -- прокси howto.ygg для Интернет-ссылок на редактирование первичной базы ([[https://github.com/YGGverse/YGGbro/tree/main/nginx/howto.ygg/betahowto.duckdns.org|конфигурация]]) + +Для протокола [[gemini_protocol|Gemini]]: + * %%gemini://[301:23b4:991a:634d::b]%% - зеркало сайта, в рамках проекта [[https://github.com/YGGverse/bdoku|β-Doku]] + * %%gemini://betahowto.ygg%% - алиас + * %%gemini://betahowto.duckdns.org%% - алиас в Интернет + +**HowtoYgg существует силами энтузиастов. Делись информацией, делай будущее доступным!**\\ +Посети канал сообщества ''#howtoygg'' в [[social_media:ilita_network|ILITA IRC]] и [[http://[324:71e:281a:9ed3::cafe]/|голосовой чат]] Mumble. + +===== Использование wiki ===== + +При регистрации можно указать любой e-mail-адрес (даже несуществующий), рассылка писем в настоящее время не осуществляется. + +Уведомления об изменениях в статьях и комментариях к ним публикуются в [[https://matrix.to/#/#howto.ygg:matrix.org|этом канале]] Matrix. + +Доступны RSS-ленты: [[this>feed.php|статьи]], [[this>/lib/plugins/feed/feed.php?plugin=discussion&fn=getComments|комментарии]]. + +У каждого зарегистрированного пользователя есть личная страничка, на которой можно разместить контакты и другую произвольную информацию: +''%%/user:your_login%%'' (или так: ''%%/doku.php?id=user:your_login%%'') (можно кликнуть на имя в левом нижнем углу окна или в [[this>doku.php?do=recent&id=start|истории изменений]]). + +Справка по синтаксису редактирования страниц: [[wiki:syntax|Синтаксис]]\\ +Как создавать и редактировать статьи: [[wiki:article_create]], [[doku>ru:editing|Правка страниц]] + +Предлагается [по-возможности] давать имена (не заголовки) разделам и страницам латиницей, если к нам будут заходить иностранцы, им будет проще понять, где что. +Имена уже созданных разделов можно посмотреть по кнопке "[[this>doku.php?do=index&id=start|Все страницы]]" + +Полный [[wpru>Руководство_пользователя|мануал]] по dokuwiki на русском языке доступен по этой ссылке: +[[doku>ru:manual|https://www.dokuwiki.org/ru:manual]] + +===== Частые вопросы пользователей Yggdrasil ===== + *[[yggdrasil:yggdrasil|Что такое Yggdrasil и для чего это нужно?]] + *[[yggdrasil:ip_address|Как узнать свой IP-адрес в Yggdrasil?]] + *[[yggdrasil:configure_peering|Я установил Yggdrasil, но другие узлы недоступны. Что я упустил?]] + *[[yggdrasil:sites_and_services|Какие сервисы работают в сети?]] + *[[yggdrasil:run_website|Как в Yggdrasil запустить сайт?]] + *[[yggdrasil:subnet_setting|Как настроить несколько IP-адресов на одном устройстве с Yggdrasil?]] + *[[yggdrasil:nginx_proxying | Как создать зеркало Интернет-сайта в сети Yggdrasil?]] + *[[yggdrasil:dns:internal_dns|Как попасть на сайт с доменным именем, типа site.ygg или site.mesh?]] + *[[archive:yggdrasil:dns:wyrd|Как получить доменное имя для своего сайта в сети Yggdrasil?]] + *[[yggdrasil:network_connection_variants|Как пользоваться Yggdrasil, не устанавливая его клиент на устройство?]] + *[[yggdrasil:mesh_setup|Как подключиться к Yggdrasil, используя технологию mesh?]] + *[[yggdrasil:public_peer|Что такое публичный пир?]] + *[[yggdrasil:public_peer#Как стать публичным пиром|Как стать публичным пиром?]] + *[[yggdrasil:connect_through_tor|Как подключиться к сети через Tor?]] + *[[yggdrasil:config_russian|Что насчет файла конфигурации Yggdrasil с пояснениями на русском языке?]] + *[[yggdrasil:several_services_on_machine|Как запустить несколько сервисов на одном устройстве?]] + *[[yggdrasil:crawler|Как получить информацию обо всех узлах сети?]] + *[[yggdrasil:conflicts|Не вызовет ли Yggdrasil конфликтов в моей сети?]] + *[[yggdrasil:mobile_clients|Как использовать Yggdrasil на смартфонах?]] + +~~DISCUSSION~~ diff --git a/data/pages/unix.txt b/data/pages/unix.txt new file mode 100644 index 0000000..ee1863d --- /dev/null +++ b/data/pages/unix.txt @@ -0,0 +1,10 @@ +{{indexmenu_n>4}} +====== Unix ====== + +Unix — семейство переносимых, многозадачных и многопользовательских операционных систем, которые основаны на идеях оригинального проекта AT&T Unix, разработанного в 1970-х годах в исследовательском центре Bell Labs Кеном Томпсоном, Деннисом Ритчи и другими. + +К unix-подобным системам относятся: Linux, Solaris, BSD и другие. + +===== Статьи внутри раздела ===== + +{{indexmenu>:unix}} \ No newline at end of file diff --git a/data/pages/unix/__template.txt b/data/pages/unix/__template.txt new file mode 100644 index 0000000..d115689 --- /dev/null +++ b/data/pages/unix/__template.txt @@ -0,0 +1,25 @@ +====== Заголовок статьи ====== + +Введение + +===== Заголовок раздела 1 ===== + +Текст + +==== Заголовок подраздела ==== + +Текст + +===== Заголовок раздела 2 ===== + +Текст + +... + +====== Ссылки ====== + +Описание ссылки (EN|RU): http://address.domain/ \\ +Описание ссылки (EN|RU): [[ раздел:статья | Заголовок ссылки ]] \\ +Описание ссылки (EN|RU): [[wpru>имя_страницы_в_русскоязычной_wikipedia|Заголовок ссылки]] + +~~DISCUSSION~~ diff --git a/data/pages/unix/file_encryption.txt b/data/pages/unix/file_encryption.txt new file mode 100644 index 0000000..245e46e --- /dev/null +++ b/data/pages/unix/file_encryption.txt @@ -0,0 +1,91 @@ +====== Шифрование файлов в Юникс-системах ====== + +===== Шифрование с помощью openssl ===== +// +Верховный суд США одобрил поправки в законодательство, дающие +правоохранительным органам право на доступ к компьютерам, находящимся в +любом месте, даже за границей. +(с)Би-Би-Си +// + +В связи с этим вот, что хочу сказать. Надежное шифрование файлов делается так: + +openssl enc -e -aes-256-cbc -md sha256 -in FILE -out CRYPTFILE + +Где FILE - это исходный файл, а CRYPTFILE - зашифрованный результат. + +Расшифровка: + +openssl enc -d -aes-256-cbc -md sha256 -in CRYPTFILE -out FILE + +Пароль вам предложат ввести. +Конечно, шифрующих программ очень много, но это будет работать везде и +всегда. Скажем, вы можете шифровать файл в IBM AIX, а расшифровать в Убунте +или OpenBSD. Ничего устанавливать не нужно, это вcтроено в Юниксы. + +===== Шифрование с помощью GPG ===== + +Этот способ подходит как для создания бэкапов, так и для шифрования файлов с последующей безопасной отправкой какому-либо получателю. + +Если шифруете свой бэкап для себя же, в качестве публичного ключа получателя выбирайте свой публичный ключ (и желательно, чтобы он был бессрочным). + +Смотрим список ключей GPG: + +gpg --list-keys + +Сжимаем и шифруем: + +tar -cz ./catalog/* | gpg --trust-model always -e -r 'User ' -o ./catalog.tar.gz.gpg +#или так (c использованием ID ключа): tar -cz ./catalog/* | gpg --trust-model always -e -r 9719AC4AE23BBAF5399FE03AA997BBAC69B92B43 -o ./catalog.tar.gz.gpg +#или так (c максимальным сжатием): tar -c ./catalog/* | gzip -9 | gpg --trust-model always -e -r 9719AC4AE23BBAF5399FE03AA997BBAC69B92B43 -o ./catalog.tar.gz.gpg + +Расшифровываем и распаковываем: + +gpg -d catalog.tar.gz.gpg | tar -xz +#gpg попросит ввести пароль от приватного ключа. +#файлы будут извлечены в текущий каталог. + +Для удобства распаковки архивов, созданных с использованием разных архиваторов, можно применять подобный скрипт: \\ +(можно прописать в ~/.bash_aliases) + + +#!/bin/sh + +#в качестве параметра указывать имя файла вида *.tar.gz.gpg или *.bz2.gpg + +if [ -z "$1" ] +then + echo 'Не указано имя файла для обработки. Выход.' + exit 0 +elif [ ! -f "$1" ] +then + echo "Указанный файл ($1) не существует. Выход." + exit 0; +fi + +DIR=$(dirname "$0") +FNAME=$(echo "$1" | sed 's/.gpg$//g') +gpg -o "$DIR/$FNAME" -d "$1" +echo 'Расшифровка завершена.' + +case $FNAME in + + *'tar.gz'*) + echo 'Распаковываем *.tar.gz...' + tar -xf "$DIR/$FNAME" + #rm -f "$DIR/$FNAME" + echo 'Архивный файл распакован.' + ;; + + *'bz2'*) + echo 'Распаковываем *.bz2...' + bzip2 -d "$DIR/$FNAME" + #rm -f "$DIR/$FNAME" + echo 'Архивный файл распакован.' + ;; + +esac + + +====== Ссылки ====== +GnuPG: [[wpru>GnuPG|https://ru.wikipedia.org/wiki/GnuPG]] diff --git a/data/pages/unix/onion_service_setup.txt b/data/pages/unix/onion_service_setup.txt new file mode 100644 index 0000000..f88bb2c --- /dev/null +++ b/data/pages/unix/onion_service_setup.txt @@ -0,0 +1,127 @@ +====== Организация onion-сервера ====== + +Для начала я кратко обозначу, какая польза постигнет вас, если вы +организуете свой собственный onion сервер. + + +1. У вашего сервера не будет IP. Он работает без DNS. Есть только +неказистое имя, вроде t2zz6dgyudp4iowf.onion Это старый стандарт, когда в +имени 16 знаков. Новый стандарт подразумевает 56 знаков. Вы не можете +выбрать себе имя, зато его можно менять хоть каждый день. Вам не потребуется +никакая регистрация. Сервер будет доступен под новым именем уже в следующую +минуту. Некрасивость имени пускай вас не смущает. Все равно в сети +используются гиперссылки, где имя явно не показывается. + +2. Сайт будет виден, даже если у вашего компьютера "черный IP", не +видимый из внешнего мира. В этой сети понятие IP вообще отсутствует как вид. + +3. Сайт будет виден, даже если ваш провайдер заблокировал все +входящие соединения из интернета к вам. + +4. Сайт будет виден, если вы включите свой комп в любую чужую сеть. Вам +ничего не нужно перестраивать. Он просто заработает. + +5. Никто не узнает, где физически находится ваш сайт. Но и вы тоже не +сможете понять, кто его посещает. Все соединения выглядеть так, будто +заходят с вашего же компьютера. Все Фантомасы, но и вы тоже Фантомас. + +Данная инструкция предназначена для линукса Debian, Ubuntu и похожих. +Она вообще подойдет для любого юникса с незначительными нюансами. В качестве +веб сервера используется Apache2. Можно использовать Nginx или что-то иное, +но опять же отличия будут незначительными. + +===== Установка софта ===== + + +Предполагается, что у вас уже установлены sshd и apache. К сети onion они не относятся, поэтому +установку мы пропустим. Теперь нам +потребуется установть Tor: + +apt-get install tor + +Здесь и далее все команды нужно выполнять, зайдя в сиситему как root, а +установку софта, кстати, мы уже закончили. Проверьте, что tor заработал. + +ps ax | grep tor + + +===== Настройка сервисов ===== + + +Откройте текстовым редактором файл /etc/tor/torrc И впишите следующие +строчки: + +HiddenServiceDir /var/lib/tor/matumba +HiddenServiceVersion 2 +HiddenServicePort 80 127.0.0.1:80 +HiddenServicePort 22 127.0.0.1:22 + +Похожее уже есть в конфигурации, закомментрованное. Вам нужно лишь +поправить. + +**HiddenServiceDir** - каталог где будут настройки onion сервера. +Предположим, что ваш сервер называтся matumba. Имя может быть любым. Его все +равно никто не увидит. + +**HiddenServiceVersion 2** - это строка нужна лишь тогда, когда вы хотите +создать короткое имя сайта. Если это не указать, вам присвоится длинное имя +из 56 символов. Это новый стандарт и он считается предпочтительным. + +**HiddenServicePort** - тут мы указываем, какие сервисы открыть - sshd и +httpd. + +Теперь перезапустите tor: + +systemctl stop tor +systemctl start tor + + +Если все пошло по плану, то в системе создался каталог /var/lib/tor/matumba +Заглянем в него. Файл hostname содержит имя вашего сайта: **dr2brcdyaopw3nga.onion** +или вроде того. + +===== Включение сервисов ===== + + +Поздравляю! Ssh сервер у вас уже есть. Можете проверить сами, если не +верите. + +torsocks ssh ВашеИмя@dr2brcdyaopw3nga.onion + +Точно так же вы будете заходить на свой сервер из внешнего интернета. + +Теперь делаем веб сервер. + +Создаем каталог /var/www/matumba с правами 755. Здесь будет корень вашего +сайта. Сделайте там тестовую страничку: + +echo "Beware of dragons" > index.html + + +Создайте файл /etc/apache2/sites-available/matumba.conf и выполните +конфигурацию вашего сайта. Самая простая конфигурация будет такой: + + +ServerName dr2brcdyaopw3nga.onion +DocumentRoot /var/www/matumba + + + +Включаем новый сайт в сеть: + +a2ensite matumba +systemctl reload apache2 + + +Готово. Ваш сайт **dr2brcdyaopw3nga.onion** виден через Tor Browser. Проверяем из командной строки: + +my@host:~$ torsocks wget -q dr2brcdyaopw3nga.onion -O - +Beware of dragons +my@host:~$ + +При необходимости вы можете перенести свой сервер на другой хост, не потеряв имя. Для этого скопируйте файл /etc/tor/torrc и каталог /var/lib/tor/matumba на новое место. + + + + + diff --git a/data/pages/user/%D0%BF%D1%83%D1%88%D0%B8%D1%81%D1%82%D1%8B%D0%B9_%D0%BC%D0%B0%D1%81%D1%82%D0%B5%D1%80.txt b/data/pages/user/%D0%BF%D1%83%D1%88%D0%B8%D1%81%D1%82%D1%8B%D0%B9_%D0%BC%D0%B0%D1%81%D1%82%D0%B5%D1%80.txt new file mode 100644 index 0000000..589a142 --- /dev/null +++ b/data/pages/user/%D0%BF%D1%83%D1%88%D0%B8%D1%81%D1%82%D1%8B%D0%B9_%D0%BC%D0%B0%D1%81%D1%82%D0%B5%D1%80.txt @@ -0,0 +1,11 @@ +====== Мастер Пушистый ====== + +About me + +===== Contacts ===== + +e-mail: admin@amatbnjil3kd4aaaaaaaaaa6ju.meship \\ +telegram: https://t.me/... \\ +matrix: https://matrix.to/#/@...:matrix.org \\ +... + diff --git a/data/pages/user/4ikarashka.txt b/data/pages/user/4ikarashka.txt new file mode 100644 index 0000000..06682bc --- /dev/null +++ b/data/pages/user/4ikarashka.txt @@ -0,0 +1,11 @@ +====== 4ikarashka ====== + +About me + +===== Contacts ===== + +e-mail: 4ikarashka@gmail.com \\ +telegram: https://t.me/... \\ +matrix: https://matrix.to/#/@...:matrix.org \\ +... + diff --git a/data/pages/user/acetone.txt b/data/pages/user/acetone.txt new file mode 100644 index 0000000..5c25a4e --- /dev/null +++ b/data/pages/user/acetone.txt @@ -0,0 +1,4 @@ +===== acetone ===== +Для меня это самая захватывающая онлайн игра. Качаю своего персонажа уже не первый год. Присоединяйтесь, тут free to play. + +[[http://[324:71e:281a:9ed3::ace]/|acetone web page]] diff --git a/data/pages/user/admin.txt b/data/pages/user/admin.txt new file mode 100644 index 0000000..e030944 --- /dev/null +++ b/data/pages/user/admin.txt @@ -0,0 +1,3 @@ +Контакты: + +Element.io: https://matrix.to/#/@ygguser:matrix.org \ No newline at end of file diff --git a/data/pages/user/afka.txt b/data/pages/user/afka.txt new file mode 100644 index 0000000..08487d6 --- /dev/null +++ b/data/pages/user/afka.txt @@ -0,0 +1,8 @@ +====== afka ====== + +About me + +===== Contacts ===== + +telegram: https://t.me/dradanudanay \\ + diff --git a/data/pages/user/cofob.txt b/data/pages/user/cofob.txt new file mode 100644 index 0000000..2dac0ae --- /dev/null +++ b/data/pages/user/cofob.txt @@ -0,0 +1,5 @@ +===== cofob ===== + +==== Контакты ==== +Matrix - @cofob:matrix.org +Почта - cofob@riseup.net diff --git a/data/pages/user/d4708.txt b/data/pages/user/d4708.txt new file mode 100644 index 0000000..2216beb --- /dev/null +++ b/data/pages/user/d4708.txt @@ -0,0 +1,4 @@ +====== d4708 ====== + +About me + diff --git a/data/pages/user/denbabkin.txt b/data/pages/user/denbabkin.txt new file mode 100644 index 0000000..012f00b --- /dev/null +++ b/data/pages/user/denbabkin.txt @@ -0,0 +1,11 @@ +====== Dennis Babkin ====== + +About me + +===== Contacts ===== + +e-mail: denbabkin@gmail.com \\ +telegram: https://t.me/... \\ +matrix: https://matrix.to/#/@...:matrix.org \\ +... + diff --git a/data/pages/user/duff.txt b/data/pages/user/duff.txt new file mode 100644 index 0000000..9dad1cd --- /dev/null +++ b/data/pages/user/duff.txt @@ -0,0 +1,11 @@ +====== Duff Anonymovich ====== + +About me + +===== Contacts ===== + +e-mail: duff@duff.liberty \\ +telegram: https://t.me/... \\ +matrix: https://matrix.to/#/@...:matrix.org \\ +... + diff --git a/data/pages/user/evgeny.txt b/data/pages/user/evgeny.txt new file mode 100644 index 0000000..b1f27ce --- /dev/null +++ b/data/pages/user/evgeny.txt @@ -0,0 +1 @@ +Telegram: [[https://t.me/EvgenyNord|@EvgenyNord]] \ No newline at end of file diff --git a/data/pages/user/gastarbeiter.txt b/data/pages/user/gastarbeiter.txt new file mode 100644 index 0000000..3cef227 --- /dev/null +++ b/data/pages/user/gastarbeiter.txt @@ -0,0 +1,11 @@ +====== Илья ====== + +About me + +===== Contacts ===== + +e-mail: me@domain.ru \\ +telegram: https://t.me/... \\ +matrix: https://matrix.to/#/@...:matrix.org \\ +... + diff --git a/data/pages/user/invu.txt b/data/pages/user/invu.txt new file mode 100644 index 0000000..daa8763 --- /dev/null +++ b/data/pages/user/invu.txt @@ -0,0 +1,11 @@ +====== invu ====== + +About me + +===== Contacts ===== + +e-mail: no.no@no \\ +telegram: https://t.me/... \\ +matrix: https://matrix.to/#/@...:matrix.org \\ +... + diff --git a/data/pages/user/l27001.txt b/data/pages/user/l27001.txt new file mode 100644 index 0000000..a939477 --- /dev/null +++ b/data/pages/user/l27001.txt @@ -0,0 +1,8 @@ +===== l27001 ===== + +Я просто мимокрокодил + +Контакты: + * Telegram: @l270011 + * Matrix: @l27001:syn0.ezdomain.ru + * E-Mail (Clearnet): l27001@ezdomain.ru \ No newline at end of file diff --git a/data/pages/user/newbie.txt b/data/pages/user/newbie.txt new file mode 100644 index 0000000..cec4867 --- /dev/null +++ b/data/pages/user/newbie.txt @@ -0,0 +1,11 @@ +====== newbie ====== + +===== Для связи: ===== + +[[wpru>Element.io|Element.io]] (matrix): https://matrix.to/#/@ygguser:matrix.org + +===== Недавние изменения, внесённые мною ===== + +{{editor>?newbie&default&desc&comments}} + + diff --git a/data/pages/user/olej.txt b/data/pages/user/olej.txt new file mode 100644 index 0000000..760bf2f --- /dev/null +++ b/data/pages/user/olej.txt @@ -0,0 +1,11 @@ +====== Олег ====== + +About me + +===== Contacts ===== + +e-mail: olej.tsil@gmail.com \\ +telegram: https://t.me/olej_tsil \\ +matrix: https://matrix.to/#/@...:matrix.org \\ +... + diff --git a/data/pages/user/pan_szymanowski.txt b/data/pages/user/pan_szymanowski.txt new file mode 100644 index 0000000..db2e17b --- /dev/null +++ b/data/pages/user/pan_szymanowski.txt @@ -0,0 +1,12 @@ +{{ :mwork_lit.jpg }} + +Привет! Я Юрий Шимановский из Севастополя. Работаю юникс сисадмином в IBM (Миссури, США). Много лет трудился программистом на ассемблере и "С". Компьютерами не увлекаюсь. Это было бы уже слишком. Вернее, они для меня не на первом месте и даже не на втором. Писатель. Общий тираж книжных, газетных и журнальных публикаций - около 3-х миллионов. +Композитор, музыкант, пою. Имею опыт выступления по всем этим специальностям в больших концертных залах. Предназначение любого творчества вижу в пропаганде добра, чести и здравого смысла. Хожу в церковь. Люблю Путина. Отпуск предпочитаю проводить в Крыму. + +Сайт в клирнете http://shymanovsky.mooo.com Существует с 1997 года. Там же и всевозможные контакты. + +===== Cтатьи, несвязанные с Yggdrasil ===== + +[[user:pan_szymanowski:drawing_of_a_pipe]] \\ +[[user:pan_szymanowski:care_of_blockflute]] + diff --git a/data/pages/user/pan_szymanowski/care_of_blockflute.txt b/data/pages/user/pan_szymanowski/care_of_blockflute.txt new file mode 100644 index 0000000..0245d93 --- /dev/null +++ b/data/pages/user/pan_szymanowski/care_of_blockflute.txt @@ -0,0 +1,107 @@ +====== Деревянная блокфлейта ====== + +===== Советы по уходу, хранению и использованию ===== + + +**Введение** + +Для начала поясню, что заставило меня взяться за составление этой инструкции. В интернете очень много материалов, посвященных блокфлейтам. Казалось бы, зачем приумножать этот бесконечный поток информации? Дело в том, что всяких инструкций СЛИШКОМ много. Зачастую, они неполны, противоречат друг другу, сделаны на разных языках. Иногда они чересчур сложны для понимания. Порой изобилуют непонятной терминологией. Просто плохо написаны. Одним словом, захотелось создать сжатое, четкое руководство, которое можно легко держать в голове с одного прочтения. + +Наверняка вам удастся найти спорные моменты, которые потребуют обсуждений и замечаний. Однако, я старался найти истину, а из множества рекомендаций выбрал только те, которые мне представляются бесспорными. Ну и, конечно же, использовал свой собственный опыт. + +**1. Начальный этап** + +Очень важно новую блокфлейту "разыграть". Использование инструмента без предварительного разыгрывания недопустимо. У меня есть такой печальный опыт, когда за два месяца хорошая флейта превратилась в декоративное украшение квартиры, и теперь не годится для игры. А все из за того, что я не знал о разыгрывании. + +Звук нового инструмента скорее всего вас разочарует, особенно если вы уже играли на пластике. Тембр может быть неожиданно глухим, скрипучим, с призвуками. Возможен грязный строй, разная громкость на разных нотах, трудность в извлечением некоторых звуков. Но не надо отчаиваться. После розыгрыша по правилам эти недостатки скорее всего исчезнут. Правила разыгрывания могут быть прописаны в бумажке, прилагаемой к блокфлейте. Но, в целом они следующие: + - Играйте каждый день. + - Перед игрой прогрейте блок в ладони, минут пять. + - Первую неделю играйте не более 10 минут за занятие, при условии одного занятия в день. + - Разыгрывание лучше проводить при комнатной температуре. + - За два месяца постепенно увеличьте время игры до часа-полтора. + - Игра больше полутора часов вообще не рекомендуется. Однако, в этом вопросе есть нюансы, прописанные в следующем разделе. + +**2. Игра** + +Главная неприятность, с которой встречается исполнитель - появление воды в инструменте. Многие думают, что это слюна. Вовсе нет. В блокфлейте скапливается конденсат от выдыхаемого воздуха, то есть, чистая дистиллированная вода. На скорость появления конденсата влияет окружающая температура и теплоемкость флейты. Чем ниже температура, тем больше воды. Чем больше флейта (сопранино-> сопрано -> альт и т.д.) тем больше воды. Деревянные блокфлейты гораздо медленнее образуют конденсат, нежели пластиковые, и к тому же имеют средства его нейтрализации. Если температура окружающей среды больше 36.6 градусов, то конденсат не образуется вообще. Это в теории. На практике он не образуется уже и при 30-и. Играя в холодное время года на улице не забудьте предварительно прогреть флейту. Я обычно засовываю ее под куртку и держу хотя бы 5 минут. +Важно! Игра на морозе недопустима! Впитавшаяся в дерево влага может замерзнуть и тогда наступит необратимое повреждение инструмента. А влага в дереве есть всегда! + +Как я уже сказал, пластиковые флейты производят больше конденсата, но там это может рассматриваться всего лишь мелким неудобством. С деревом все гораздо хуже. Нужно обязательно прекращать игру, после излишнего увлажнения. Дело в том, что пробковое соединение может разбухнуть настолько, что разорвет флейту. Если вы еще мало знакомы с инструментом и его реакцией на окружающую температуру, во время игры иногда снимайте голову флейты, чтобы убедиться, что вы в состоянии это сделать. Если вам приходится затрачивать большие усилия, то заканчивайте игру и оставьте инструмент в разобранном состоянии для просушки. Если вы доигрались до того, что не можете разобрать флейту... ну, тут я даже не знаю, что делать. Продуйте ее, протрите изнутри, насколько это возможно, и оставьте сушиться собранной, помолясь. Возможно, вскоре набухание уменьшится и флейта разберется. А возможно, что набухание продолжится и флейта все-таки треснет. + +Одним словом, продолжительность ваших занятий будет ограничена окружающей температурой и индивидуальными свойствами инструмента. У меня она получается около полутора часов при комнатной температуре. Есть хороший индикатор увлажнения. Это лабиум, точнее звуковой нож, который рассекает вдуваемый воздух. По мере игры он начинает темнеть с краю, и это потемнение увеличивается. Когда нож потемнел целиком, скорее всего игру нужно заканчивать. + +**3. Хранение** + +Деревянную блокфлейту всегда хранят в разобранном виде. Это необходимо пробковому соединению для "отдыха" и возврату в первоначальное состояние. Если флейту держать собранной, то соединение утратит упругость и разболтается. Не допускается хранение вблизи источников тепла, в сырых местах и под прямыми солнечными лучами. Для защиты от пыли, и для переноски нужен +футляр. Причем не какой-нибудь, а проницаемый для воздуха. Иначе флейта не сможет нормально сохнуть. Подойдет чехол из плотной ткани на молнии или с завязочками. Поскольку флейта разобрана на две (или три) части, то неплохо предусмотреть отделения для каждой части. Таким образом детали не будут царапать друг друга при переноске. Деревянную блокфлейту нельзя мыть и вообще мочить в воде. Нельзя обрабатывать растворителями лакированную поверхность, если она есть. После занятий всегда протирайте ее изнутри. Для этого существует шомпол с закрепленным куском ткани. Ткань не должна оставлять ворсинки. Лучше всего для этой цели подходит батист. + +Считается, что пробковое соединение хорошо бы смазывать «пробковым жиром». Некоторые советуют вазелин для этой цели. Однако этот вопрос до конца не выяснен. Не вполне ясно, зачем вообще нужна смазка, если соединение плотное и в то же время легкое. Думается, впитавшийся в пробку жир изменит свойства соединения и лишит его пружинящих качеств. Одним словом, автор данной монографии не использует никаких смазок, поскольку не видит в этом необходимости. Надо отметить также, что соединение не обязательно бывает пробочным. Бывает нитяное, капроновое. Возможно там смазка и нужна. По крайней мере, от нее ничего не испортится и всегда можно ее удалить. + +Никогда вставляйте никаких предметов в свистковое отверстие и не касайтесь ножа. Любое, даже, малое повреждение этой части может навсегда испортить инструмент. + +Блокфлейту не достаточно просто "хранить". Нужно еще и поддерживать ее в рабочем состоянии. То есть, придется на ней играть хотя бы 15-20 минут в день. Она не должна находиться в совершенно сухом состоянии или наоборот чрезмерно влажном. Коль скоро вы закончили процесс разыгрывания в начале, то теперь должны этот статус поддерживать. Вы наверное, думали что будете играть на ней столько сколько захотите? Отнюдь. Вы будете играть столько, сколько захочет ваша блокфрейта. Не меньше и не больше. + +**4. Промасливание** + +Это самая запутанная и маловразумительная часть ухода за флейтой. Инструкций много, но они не отвечают на все вопросы. Есть даже документы с формулами и физическими свойствами масел, но они так и не дают представления, как проводить сам процесс. Какое масло использовать? Какие части промасливать? Как часто? И тут начинается неразбериха. Надо сказать, что не все деревянные инструменты нуждаются в промасливании. Некоторые провариваются в парафине во время изготовления. Их промасливать не нужно. Для начала, лучше обратиться к сопровождающей инструкции. Методичка к сопрано "Hohner 9550" говорит, что промасливать нужно. Предписывается использовать для этого льняное масло или специальное для блокфлейт. Попытки найти такое специальное масло у меня лично не увенчались ни чем. Продавцы под этим термином могут понимать масло для смазки клапанов на металлических флейтах или других инструментах. Однако же большинство источников говорят о том, что льняное масло подходит лучше всего. Купить его можно в отделах для художников, где продают еще краски и кисточки. Этим маслом разводят краски. Как раз из за этого у льняного масла есть коварная черта. Оно затвердевает, находясь на открытом воздухе. Краски ведь должны высохнуть. Поэтому, работая с льняным маслом нужно очень внимательно следить, чтобы нигде, особенно внутри флейты, не осталось натеков или капель. После затвердевания они изменят вам форму канала, и удалить это будет непросто. Все масло должно впитаться, а излишки начисто вытерты. + +Льняное масло может также продаваться вместе со столярными или малярными принадлежностями. Его используют для обработки древесины. + +Как часто нужно промасливать флейту? Разные источники называют сроки от 3-х до 6-и месяцев. Кроме того, это зависит от размера инструмента и от интенсивности использования. Думаю, не ошибусь, если посоветую промасливание сопрано раз в 4 месяца, если вы играете каждый день по часу. Лично я так и делаю. Жалоб нет. Флейта сама возьмет столько масла, сколько требуется. Так что частота этого процесса не особо критична. + +Список того, что нужно промасливать. + + - Внутреннюю часть канала. + - Каждое игровое отверстие. + - Голову изнутри. Однако тут есть ограничения. Нельзя промасливать заднюю заглушку, прилегающую к свистку а так же область канала у свистка, на расстоянии около 1 см от пробки. Нельзя также промасливать внутреннюю часть пробкового соединения головы флейты. + +Список того, что еще нельзя промасливать: + + - Флейту снаружи. + - Пробковое соединение на стволе флейты. + +Вопрос о свистковом устройстве остается открытым. Некоторые источники говорят, что промасливать надо. Однако такая рекомендация противоречит запрету вообще касаться свистка. К тому же придется касаться именно тогда, когда он размягчен маслом и особо чувствителен к повреждениям. Другие источники не советуют промасливать эту часть. Лично я не промасливаю. Моя флейта мне очень нравится, и рисковать я не хочу. + +Техника промасливания будет такая. + + * Наливаем масло в блюдце. Для флейты – сопрано хватит столовой ложки. + + * Готовим смазочный инструмент вот таким образом, закрепив сложенный в несколько слоев кусок материи на шомполе. Мочим его в масле, чтобы ткань пропиталась но масло не капало. Ткань должна быть без ворсинок. + + * Сперва промасливаем канал флейты, двигая шомпол туда-сюда и поворачивая. У масла есть интересное свойство. Будучи налитым в блюдце, оно сразу возникнет везде – и на столе, и на руках, и на одежде, и даже на полу под ногами. Скорее всего оно возникнет и на пробковом соединении, которое промасливать нельзя. Сразу стираем его. + + * Делаем тонкий жгутик из ткани и с помощью его промасливаем отверстия, не забывая и про октавник. + + * Ставим флейту сушиться в вертикальном положении на салфетку, чтобы излишки масла вытекали. + + * Промасливаем голову, удерживая ее в вертикальном положении. Это важно. Масло не должно попасть на заднюю стенку. А конструкция нашего мажущего инструмента не позволит маслу попасть в прилегающую к свистку часть канала. Это видно на картинке. Можно задвигать его до упора. + + * Скорее всего вы немного запачкаете и внутреннюю часть соединения. Быстренько протираем это место и засовываем туда тряпочный ком. Голову флейты не переворачиваем! + + * Ставим сушится сушиться. Излишки масла будут впитываться в наш ком. + +Самая сложная часть позади. Однако процесс не закончен. Оставляем части блокфлейты в вертикальном положении на 8 часов. Удобно это делать на ночь, как- нибудь закрепив. После этого переходим к завершающему этапу. + + * Опять вставляем салфетку в шомпол. Теперь это будет сухая салфетка. + + * Протираем канал флейты изнутри. + + * С помощью жгутика протираем отверстия, не забыв про октавник. + + * Еще раз протираем флейту изнутри. А теперь еще и снаружи. + + * Вынимаем затычку из головы флейты. Протираем изнутри и снаружи. + +Все! Процесс промасливания закончен. Пускай теперь флейта подсохнет еще часов 8 и можно играть. + +**Заключение** + +Ну вот, в общем, и вся моя инструкция, которая содержит основные правила ухода за деревянной блокфлейтой. +Вы можете скачать ее в PDF виде с картинками, поясняющими тонкости технологии: http://[201:8538:fde:5d90:2226:c723:5d60:a034]/Recorder_Care.pdf +Конечно возможны варианты и исключения из правил. Было бы здорово, если вы нашли инструкцию именно к вашему инструменту от изготовителя. Но такое бывает не всегда и не везде. Желаю всем творческих и технологических успехов! + +(с) JES 2015 Юрий Шимановский +http://[201:8538:fde:5d90:2226:c723:5d60:a034]/ + + + diff --git a/data/pages/user/pan_szymanowski/drawing_of_a_pipe.txt b/data/pages/user/pan_szymanowski/drawing_of_a_pipe.txt new file mode 100644 index 0000000..32c2918 --- /dev/null +++ b/data/pages/user/pan_szymanowski/drawing_of_a_pipe.txt @@ -0,0 +1,8 @@ +====== Чертеж свирели ====== + +В интернете существует много инструкций про изготовление свирелей. Кроме того, можно купить свирель у народных умельцев. Однако это всегда будут лишь игрушки-свистульки. Для того, чтобы свирель стала настоящим музыкальным инструментом, она должна быть точно рассчитана и тщательно изготовлена по этому чертежу. + +{{ music:technologies:flutomax.jpg }} + +Здесь выполнена настройка в до мажор. Почему именно в до мажор? Это стандартный строй, который используется еще в блокфлейте-сопрано, в сопилке и даже в большой концертной флейте. Ноты, как правило, пишутся в расчете именно на такие флейты. Ну и наконец до мажор - "белая" тональность, с которой проще разобраться новичку. + diff --git a/data/pages/user/plasmblaster.txt b/data/pages/user/plasmblaster.txt new file mode 100644 index 0000000..61a66d3 --- /dev/null +++ b/data/pages/user/plasmblaster.txt @@ -0,0 +1,11 @@ +====== plasmblaster ====== + +About me + +===== Contacts ===== + +e-mail: gsinyakin@mail.ru \\ +telegram: https://t.me/... \\ +matrix: https://matrix.to/#/@...:matrix.org \\ +... + diff --git a/data/pages/user/polnet74.txt b/data/pages/user/polnet74.txt new file mode 100644 index 0000000..065180c --- /dev/null +++ b/data/pages/user/polnet74.txt @@ -0,0 +1,11 @@ +====== Evgeny ====== + +About me + +===== Contacts ===== + +e-mail: polnet74@gmail.com \\ +telegram: https://t.me/... \\ +matrix: https://matrix.to/#/@...:matrix.org \\ +... + diff --git a/data/pages/user/pomatu.txt b/data/pages/user/pomatu.txt new file mode 100644 index 0000000..8c65f4b --- /dev/null +++ b/data/pages/user/pomatu.txt @@ -0,0 +1,11 @@ +====== pomatu ====== + +About me + +===== Contacts ===== + +e-mail: no@email \\ +telegram: https://t.me/... \\ +matrix: https://matrix.to/#/@...:matrix.org \\ +... + diff --git a/data/pages/user/rev.txt b/data/pages/user/rev.txt new file mode 100644 index 0000000..c507380 --- /dev/null +++ b/data/pages/user/rev.txt @@ -0,0 +1,9 @@ +===== Revertron ===== + +Бывший разработчик AdGuard for Android (в течение 6 лет). + +Сейчас известен как разработчик [[yggdrasil:dns:alfis|ALFIS]]. + +Контакты: + * Telegram: @Revertron + * Matrix: @revertron@zhub.link \ No newline at end of file diff --git a/data/pages/user/s.v.d.txt b/data/pages/user/s.v.d.txt new file mode 100644 index 0000000..de39aff --- /dev/null +++ b/data/pages/user/s.v.d.txt @@ -0,0 +1,11 @@ +====== S.V.D. ====== + +About me + +===== Contacts ===== + +e-mail: 00svd00@gmail.com \\ +telegram: https://t.me/... \\ +matrix: https://matrix.to/#/@...:matrix.org \\ +... + diff --git a/data/pages/user/tdemin.txt b/data/pages/user/tdemin.txt new file mode 100644 index 0000000..8ebc0e2 --- /dev/null +++ b/data/pages/user/tdemin.txt @@ -0,0 +1,3 @@ +====== Timur Demin ====== + +**Сайт**: https://tdem.in diff --git a/data/pages/user/test.txt b/data/pages/user/test.txt new file mode 100644 index 0000000..a284251 --- /dev/null +++ b/data/pages/user/test.txt @@ -0,0 +1,11 @@ +====== test account ====== + +About me + +===== Contacts ===== + +e-mail: a@a.ru \\ +telegram: https://t.me/... \\ +matrix: https://matrix.to/#/@...:matrix.org \\ +... + diff --git a/data/pages/user/u_s_e_r_p_a_g_e_t_e_m_p_l_a_t_e.txt b/data/pages/user/u_s_e_r_p_a_g_e_t_e_m_p_l_a_t_e.txt new file mode 100644 index 0000000..c635436 --- /dev/null +++ b/data/pages/user/u_s_e_r_p_a_g_e_t_e_m_p_l_a_t_e.txt @@ -0,0 +1,11 @@ +====== @NAME@ ====== + +About me + +===== Contacts ===== + +e-mail: @MAIL@ \\ +telegram: https://t.me/... \\ +matrix: https://matrix.to/#/@...:matrix.org \\ +... + diff --git a/data/pages/user/ufm.txt b/data/pages/user/ufm.txt new file mode 100644 index 0000000..72b0bb8 --- /dev/null +++ b/data/pages/user/ufm.txt @@ -0,0 +1,3 @@ +Matrix: + * **@ufm:twinkle.ygg.at** + * **@ufm:twinkle.lol** diff --git a/data/pages/user/uh32b.txt b/data/pages/user/uh32b.txt new file mode 100644 index 0000000..b9a757e --- /dev/null +++ b/data/pages/user/uh32b.txt @@ -0,0 +1,11 @@ +====== Ax ====== + +About me + +===== Contacts ===== + +e-mail: waa@mailnesia.com \\ +telegram: https://t.me/... \\ +matrix: https://matrix.to/#/@...:matrix.org \\ +... + diff --git a/data/pages/user/vpn.anon.txt b/data/pages/user/vpn.anon.txt new file mode 100644 index 0000000..a21763b --- /dev/null +++ b/data/pages/user/vpn.anon.txt @@ -0,0 +1,11 @@ +По всем вопросам пишите: wg0@riseup.net + +ВПН с доступом к yggdrasil: + +https://wg0.xyz + +http://wg0.ygg + +http://wg0.lib + +{{https://i.pinimg.com/564x/21/08/7b/21087bb9caccbaa3775c716ffc3c0ab9.jpg?250}} diff --git a/data/pages/vps.txt b/data/pages/vps.txt new file mode 100644 index 0000000..ff380d5 --- /dev/null +++ b/data/pages/vps.txt @@ -0,0 +1,91 @@ +====== VPS ====== + +Иногда у пользователей возникают вопросы о том, что такое VPS и где его взять. Здесь кратенько и ответим... + +**VPS** - **V**irtual **P**rivate **S**erver - личный виртуальный сервер. Говоря простым языком, это виртуальный сервер, который берется в аренду у хостинг-провайдера (хостинговой компании). + +Покупая (арендуя) такой сервер вы получаете в своё распоряжение [виртуальный] сервер с выбранными вами параметрами (производительность, объем накопителей, объем памяти и т.п.), которым будете управлять самостоятельно. Так же [в комплекте] вы, обычно, получаете "белые" IPv4-, IPv6-адреса и доменное имя. + +Почему сервер виртуальный? Потому, что, по сути, вы получаете в своё распоряжение виртуальную машину, размещенную, вместе со множеством других таких виртуальных машин на мощном оборудовании, в крупном [[wpru>Дата-центр|дата-центре]]. + +===== Для чего нужен VPS ===== + +VPS широко и повсеместно используются для размещения на них сайтов и прочих сервисов: VPN, почта, игры, среды для разработки и тестирования различного ПО... + +Для примера, арендовав VPS c минимальными параметрами за минимальную цену можно настроить на нём личные VPN-сервер, почтовый сервер, разместить не очень требовательный к ресурсам сайт, базу данных, поднять узел [[yggdrasil:Yggdrasil]] (не [[yggdrasil:public_peer|публичный пир]], для публичного не подойдет самый дешевый вариант). И, да, всё это можно устроить на одном виртуальном сервере примерно за 70-80 руб в месяц (цены на начало 2022 года). + +На более мощных серверах можно установить OC c графической оболочкой и [[wpru>RPD]]-сервисом, и использовать этот сервер для коллективной работы нескольких пользователей. Получится что-то вроде виртуального офиса c удаленными рабочими столами. Для примера, некоторые небольшие компании размещают на таких серверах базы 1С, документы офиса и т.п... + +У хороших провайдеров ваш сервер и все настроенные на нем сервисы будут доступны постоянно - 24 часа в сутки, 7 дней в неделю. + +===== Технологии виртуализации ===== + +Помимо VPS иногда можно встретить упоминание **VDS** (Virtual Dedicated Server - виртуальный выделенный сервер), либо просто Dedicated Server или "дедик". Если говорить упрощая, то можно сказать, что на данный момент VPS и VDS это практически одно и то же. Когда [в России] говорят VPS подразумевают VDS и наоборот. Формально же, принято считать, что VDS и VPS отличаются технологиями виртуализации ([[wpru>OpenVZ|OpenVZ]], [[wpru>XEN|XEN]], [[wpru>KVM|KVM]] и другие): VPS ассоциируется с OpenVZ, VDS - KVM или XEN. Но повторюсь, это условность, вы легко найдете предложения по аренде VPS c технологией KVM. + +В свою очередь, стоит заметить, что отличие технологий виртуализации OpenVZ и KVM, XEN весьма существенное. Опять же, упрощенно: VPS на базе OpenVZ используют ядро операционной системы-хоста, XEN и KVM более изолированы и используют своё ядро. Это наиболее существенное и критичное отличие. Для описанных выше целей, возможно, более удобными в использовании будут виртуальные машины на базе KVM, т.к., часто такое ПО как, например, VPN-сервер или тот же Yggdrasil требуют подключения модулей ядра, которые не используются на хост-системе (tun/tap), и настройка подобного в виртуальной машине, в этом случае, может вызвать сложности. + +**Dedicated Server** - это отдельный [физический] выделенный сервер в дата-центре под ваши нужды. Очевидно, это решение для высоконагруженных систем, требующих высокой производительности. На начальном этапе "дедик" вам, скорее всего, не понадобится, если, конечно, вы не планируете сразу запустить сервер какой-нибудь игры, к которому будут подключаться сотни игроков со всего мира. + +===== Как выбрать, где купить VPS ===== + +Серьезные проекты, коммерческие сайты и прочие сервисы, связанные с бизнесом, имеет смысл размещать у проверенных временем, надежных хостеров. Для целей знакомства с VPS, экспериментов можно выбрать что-то попроще и подешевле. Но в любом случае, для выбора параметров VPS необходимо будет определиться для чего вы его арендуете, с какой целью, с чем будете экспериментировать, и исходя из этого подбирать соответствующие параметры. + +Помимо очевидных параметров, влияющих на производительность сервера (количество и мощность CPU, объем памяти, объем места на дисках, пропускная способность сети, объем разрешенного трафика) имеет смысл уточнить, в какой стране находится дата-центр, на котором будет размещен ваш сервер. Так, если вы планируете настроить на сервере VPN для доступа к ошибочно заблокированным [[wpru>Роскомнадзор|РКН]] сайтам, необходимо выбирать размещение в странах, где эти блокировки не действуют. Так же, место размещения виртуальной машины может влиять на качество связности ваших сервисов - если у вас несколько VPS под разные нужды и между ними предполагается связь, возможно, следует выбрать размещение всех VPS в одной стране (а лучше в одном дата-центре). Если выбираете VPS под узел Yggdrasil, выбирайте местечко поближе к местам размещения публичных (или не публичных) пиров, с которыми будете соединяться. + +Учитываете, что в некоторых странах могут действовать свои ограничения на доступ к некоторым ресурсам. Например, у некоторых украинских хостеров запрещен доступ к российским ресурсам (vk.com, mail.ru, yandex.ru и прочие), т.о., используя VPN-сервер в этой стране, вы не сможете получить к ним доступ. + +В некоторых случаях, имеет смысл уточнить, какие есть ограничения на использование ПО, какие действуют ограничения на размещаемый контент и т.п. Иногда встречаются провайдеры, которые не приветствуют размещение на своих серверах узлов [[wpru>TOR]] и [[:I2P]], а так же, сайтов некоторых тематик (оскорбляющих чувства верующих, как вариант). Так же, не приветствуется PoW-майнинг криптовалют. + +Собственно, **как же выбрать VPS**, когда определились с параметрами, ведь, провайдеров разного пошиба огромное количество? + +Удобно пользоваться сайтами-агрегаторами предложений различных провайдеров. Например: [[https://vds.menu/|vds.menu]], [[https://vps.today/|vps.today]] и подобные. + +Для примера, заходим, на vds.menu слева видим фильтры, сверху кнопочки для сортировки. Допустим, нас интересует цена и страна размещения VPS. В фильтрах выбираем "Страна", ставим галочку "Россия" и снизу нажимаем кнопочку "Инверсия", таким образом мы выделили все страны, кроме России. Сортировку ставим по возрастанию цены и нажимаем "Найти". + +В первых строках результатов поиска сразу видим неплохой вариант VPS для экспериментов всего за 70 рублей (31.01.2022). + +{{:vps:VPS_srch_res.png?720&direct|Результаты поиска на vds.menu}} + +Используя другие фильтры, вы без особого труда сможете подобрать что-нибудь подходящее для себя. + +Некоторые хостеры предоставляют своим пользователям VPS с предустановкой на них определенного ПО (VPN-сервер, web-сервер с какой-либо CMS, gitea и т.п.). Например, у [[https://www.digitalocean.com/products/droplets/|DigitalOcean]] такие виртуальные машины называются Droplets. Варианты с предустановленным ПО так же есть у [[https://aws.amazon.com/ru/vpc/|Amazon]] и других провайдеров. Такие варианты подходят, например, для разработчиков, не желающих тратить время на развёртывание сред своих разработок ([[wpru>LAMP]] и т.п.), а так же, для пользователей, которым нужно просто и быстро поднять, например, свой VPN-сервер, без заморочек с установкой и настройкой. + +Для серьезной работы и для целей обучения больше подходят VPS без предустановок, где всё, начиная с установки ОС, вы будете делать самостоятельно. + +===== Как купить ===== + +После выбора провайдера и его конкретного предложения/тарифного плана, нужно, собственно, перейти на сайт провайдера и оформить аренду VPS. В большинстве случаев это не должно вызывать сложностей. Многие провайдеры имеют страницы сайтов, переведенные на русский язык. + +При регистрации, как правило, требуется рабочий email-адрес, номер телефона, ФИО. + +Оплата производится, как в любом другом интернет-магазине. + +После оплаты вы получите письмо, в котором будут указаны параметры вашего сервера, его адрес(а) и данные для авторизации в панели управления. + +Отдельно стоит упомянуть, что в сети можно найти провайдеров, предоставляющих VPS на условиях анонимности с возможностью оплаты криптовалютой. Нужен ли вам такой сервис и стоит ли доверять таким провайдерам - решать вам. + +Ничто не мешает приобретать несколько VPS у одного провайдера - все будут отображаться в одной панели. + +===== Как использовать ===== + +Установка ОС, ПО и настройка всего этого выходит за рамки этой статьи. Замечу лишь, что управление сервером осуществляется через специальную web-панель, доступ к которой вы получите после оплаты. С помощью этой панели можно настроить некоторые параметры сети, выбрать и установить ОС, сделать резервную копию (если входит в тарифный план), перезагрузить, остановить VPS, отмонтировать диск, загрузиться с [[wpru>Live_CD|LiveCD]] и прочее. + +{{:vps:VPS_panel.png?950&direct|Панель управления VPS}} +{{:vps:VPS_panel2.png?950&direct|Панель управления VPS}} + +Если в качестве ОС вы планируете использовать Linux без графической оболочки, скорее всего, вы будете подключаться к серверу по [[wpru>SSH|SSH]]. SSH часто установлен по-умолчанию в дистрибутивы, доступные для разворачивания на VPS, и после разворачивания вы получите письмо с данными авторизации (их можно сменить самостоятельно). + +По любым вопросам, связанным с использованием VPS можно обращаться в службу тех. поддержки хостера. Если это не российский хостер, потребуется знание иностранного (чаще английского) языка. Однако, больших надежд на тех. поддержку на дешевых тарифах возлагать не стоит, даже если возникают какие-то проблемы, причина которых кроется на стороне хостера. + +Ни ваш сервер, ни ваши данные никому не важны так, как они нужны и важны вам, поэтому не стоит пренебрегать делать бэкапы. + +При возникновении проблем с подключением по SSH (если что-то напортачили с конфигурацией SSH или файервола), всегда можно подключиться к серверу, используя VNC, встроенное в панель управления сервером. Это значительно менее удобно, нежели использование SSH, но в некоторых ситуациях может выручить. + +В критических случаях, можно отмонтировать виртуальный жесткий диск, загрузиться с LiveCD, загрузить файл жесткого диска на локальное устройство и уже локально работать с ним, править конфигурационные файлы, копировать важное и т.п. + +Шифрование виртуального жесткого диска снизит производительность и не гарантирует защиту от доступа к данным со стороны хостинг-провайдера, использовать ли его - решайте в конкретных случаях. + +===== Заключение ===== + +Надеюсь, вопросы о том, что такое VPS и где его взять достаточно освещены. Добавлю, что, конечно, вместо VPS можно использовать какое-то домашнее устройство для экспериментов, хостинга и т.п., но VPS во многих случаях всё-таки более удобно, а 70-80 рублей (доллар-полтора) не та сумма, которую стоит жалеть для того, чтобы попробовать :) + diff --git a/data/pages/wiki.txt b/data/pages/wiki.txt new file mode 100644 index 0000000..c2b0cb7 --- /dev/null +++ b/data/pages/wiki.txt @@ -0,0 +1,5 @@ +====== Wiki: как пользоваться ====== + +===== Статьи внутри раздела ===== + +{{indexmenu>:wiki}} \ No newline at end of file diff --git a/data/pages/wiki/article_create.txt b/data/pages/wiki/article_create.txt new file mode 100644 index 0000000..adc878c --- /dev/null +++ b/data/pages/wiki/article_create.txt @@ -0,0 +1,20 @@ +====== Как создать статью ====== + +В этой wiki статьи создаются так же, как в любой другой вики. Просто создайте ссылку на несуществующую статью, перейдите по этой ссылке и щёлкните кнопку «Создать страницу». Ссылку на несуществующую статью можно создать в [[playground:playground|Песочнице]] (там же можно потренироваться в оформлении статей). + +Кроме того, создать статью можно перейдя по адресу вида: ''%%/раздел:имя_статьи%%'' (или ''%%doku.php?id=раздел:имя_статьи%%''), где до двоеточия указывается раздел (например: yggdrasil, pi-hole, unix, i2p), а после двоеточия указывается несуществующее имя статьи. Это самый простой способ. + +Для статей на иностранных языках используются соответствующие разделы: en, de, fr. Ссылка на статью на французском языке в разделе Yggdrasil будет выглядеть так: ''%%/fr:yggdrasil:article_name%%'' (или ''%%doku.php?id=fr:yggdrasil:article_name%%'') + +Рекомендуется имена разделов и статей задавать на английском языке, чтобы иноязычные пользователи не испытывали неудобств в навигации. + +Так же, рекомендуется следовать стилю оформления других статей и, по-возможности, описывать материал подробно, как для неспециалистов. + +На этом ресурсе используется плагин [[doku>plugin:indexmenu|IndexMenu]], который автоматически формирует навигационное меню в левой части страницы. Наименования статей в этом меню берутся из заголовков (из первого заголовка H1, H2 или H3), которые в соответствии с [[wiki:syntax|синтаксисом]] задаются с помощью символов "=". + +====== Ссылки ====== + +Правка страниц dokuwiki: [[doku>ru:editing|https://www.dokuwiki.org/ru:editing]] \\ +Синтаксис: [[wiki:syntax]] + +~~DISCUSSION~~ diff --git a/data/pages/wiki/decentralization.txt b/data/pages/wiki/decentralization.txt new file mode 100644 index 0000000..6141014 --- /dev/null +++ b/data/pages/wiki/decentralization.txt @@ -0,0 +1,60 @@ +====== К вопросу о децентрализации wiki ====== + +//**Примечание:** статья создана для обсуждения вопроса децентрализации [[this>|wiki]] и не является инструкцией или рекомендацией к действиям. Без согласованности мнений по этой теме никаких практических действий со стороны [[user:newbie|админа]] не предполагается.// + +Как известно, [[yggdrasil:yggdrasil]] является децентрализованной сетью, что означает, что в ней нет необходимости в некоем центральном узле, мощном сервере, который будет являться критически важным, объединяющим, управляющим, распределяющим, содержащим настройки и т.п. Сеть самоорганизующаяся, маршрутизация работает автоматически, "из коробки", все узлы [условно] равны и это не является препятствием для нормальной работы сети, наоборот - в определенных условиях, является преимуществом. Хотя, у такого подхода могут быть некоторые недостатки, уязвимости, но в целом, концепция [с некоторыми оговорками] подразумевает, что устойчивость децентрализованной сети выше... + +Периодически, в тематических чатах и на форумах, можно услышать мнение о том, что в децентрализованной сети все или большинство сервисов должны быть децентрализованными. В этом есть определенный смысл. Совместно работая над каким-либо ресурсом, люди могут опасаться того, что в какой-то момент узел, на котором хранится результат их работы может уйти в offline и не вернуться, труд окажется напрасным, собранная информация, знания окажутся недоступны, и всё сообщество в целом получит урон. Высокая вероятность того, что и школьник, и домохозяйка, воодушевившись, в какой-то момент могут открыть в развивающейся сети потенциально популярный ресурс, и разочаровавшись через две недели, закрыть его, не способствует снижению опасений. И это понятно. К слову, здесь [[wiki:wiki_backup|публикуются]], бэкапы всех статей wiki, которые может скачать любой желающий, но... + +Да, было бы хорошо использовать децентрализованные решения. Однако, что в первую очередь приходит на ум, как ассоциация со словом "децентрализация" в этом контексте? Наверное, блокчейн - хорошо зарекомендовавшая себя в некоторых областях технология связанных блоков, которая используется, в общем случае, для хранения, прозрачного учета, контроля, защиты от подмены неких данных и их транзакций... + +Саму технологию блокчейна тут обсуждать вряд ли стоит, не думаю, что найдется много пользователей, которые поспорят с тем, что блокчейн в его современной реализации не лишен недостатков и не очень хорошо подходит для создания на его основе универсальных децентрализованных баз данных, форумов, wiki... Хотя, кто знает? ) Для обсуждения и написан этот текст. + +Да, я слышал о WikiChain, но, на сколько я знаю, этот проект является экспериментом и не обделен недостатками, присущими технологии блокчейна. + +В общем, на данном этапе, проблема в том, что пока нет готовых решений для того, чтобы легко и просто организовать децентрализованную базу знаний в небольшой сети с равными узлами, но "разношерстными" пользователями ) Делитесь знаниями, если знаете о таких. + +Ну, а поскольку удобных децентрализованных решений нет (или я/мы о них не знаем), используем то, что есть. + +В мае 2020 г. была поднята эта wiki на базе движка [[https://www.dokuwiki.org/dokuwiki|dokuwiki]]. Наличие возможности подключать плагины, менять темы оформления, использовать различные способы хранения статей (СУБД / текстовые файлы), версионирование, Open Source, некоторая гибкость в настройках, скорость работы, "легкость" - это всё способствовало выбору именно этого движка. Кстати, некоторые считают, что хранение данных в текстовых файлах - это не серьезно, но я (тот, кто хостит этот ресурс) считаю, что использовать СУБД для этого ресурса в относительно небольшой сети, с малым числом активных пользователей - это, так сказать, небольшой overhead. Для несогласных сразу скажу, что поддержка СУБД в dokuwiki реализована в плагине и подключается без серьезных сложностей и проблем. Кроме того, существуют средства переноса статей из dokuwiki в другие wiki ([[https://www.mediawiki.org/wiki/MediaWiki|MediaWiki]], например). + +Изначально предполагалось, что ресурс будет пользоваться популярностью, люди будут активно делиться знаниями, но по-факту, подавляющее число статей здесь написано парой человек (спасибо всем, кто принял участие :)). А в чатах периодически можно увидеть выражение недовольства чем-либо, включая то, что "всё должно быть децентрализовано"... + +===== ОК. Что я, как админ ресурса, могу предложить на этот счет ===== + +==== «Костыльная» синхронизация каталогов с данными ==== + +Поскольку статьи пока хранятся в текстовых файлах можно использовать что-то типа [[https://syncthing.net/|Syncthing]] или [[wpru>rsync]]. C переходом на СУБД (если он когда-либо случится), можно использовать некоторые API для передачи изменений из одной базы в другую. + +[[wpru>IPFS|IPFS]] не подходит, т.к., не позволяет изменять файлы не там, где они были опубликованы, и распространять эти изменения. + +В случае с упомянутыми выше средствами синхронизации файлов, технически всё просто (по крайней мере, так видится): желающий разворачивает у себя движок (там может быть своё оформление, тема, несвязанные с синтаксисом форматирования плагины и т.п.), даём новоиспеченному админу права администратора, настраиваем синхронизацию, публикуем ссылки. Всё. Пользователи могут пользоваться обеими ресурсами. Не проверял, но теоретически должно работать... + +=== Чем это грозит === + +В качестве преимущества получаем децентрализацию со всеми её "плюшками", но есть, скажем так, нюансы: + + * Пока подобное не реализовывалось, возможно есть подводные камни, потребуются жертвы времени со стороны энтузиастов + * **Безопасность**: децентрализация связана с передачей учетных данных зарегистрированных пользователей (включая зашифрованные пароли) (полагаю, перед тем, как что-то сделать, было бы справедливо опросить всех зарегистрированных пользователей на предмет отношения к передаче их данных одному/двум/трем и более людям, желающим стать администраторами, при наличии несогласных, данные передавать не этично). Кроме того, в зависимости от настроек узла, самый слабый (в плане защищенности) узел будет ставить под угрозу все остальные узлы. + * Сложность настройки: на каждом узле придется добавлять новые узлы вручную + * Средства синхронизации довольно надежные, но не исключено, что будут какие-то коллизии, которые придется каким-то образом сообща разрешать + * Сам факт наличия нескольких администраторов: все мы люди разные с разным мнением по разным вопросам. Думаю, необходимо наличие согласованности мнений относительно, собственно, администрирования и модерирования. В противном случае, есть вероятность образования нескольких несвязанных ресурсов со всеми вытекающими... + +==== Плагин синхронизации ==== + +Существует давно не обновлявшийся плагин, который позволяет синхронизировать содержимое двух и более экземпляров wiki. + +У него тоже есть особенности. Он скорее подойдет для сбора статей в одно место с разных ресурсов, хотя может и отправлять и получать, но +синхронизирует только статьи, настройки и пользователи не синхронизируются. Используется конкретный пользователь для создания статей, полученных с других ресурсов и отправки статей на другие ресурсы, т.е., авторство и история изменения разными людьми не сохраняется. + +Желающие могут попробовать. + +Страница плагина: https://www.dokuwiki.org/plugin:sync + +====== Итого ====== + +Предлагаю всем оценить все плюсы и минусы и поделиться своим мнением на счет этого всего, а так же, поделиться идеями по этой теме, если оные имеются. + +Ну, и конечно, не возбраняется дополнять и корректировать саму статью :) + +~~DISCUSSION~~ diff --git a/data/pages/wiki/discussions.txt b/data/pages/wiki/discussions.txt new file mode 100644 index 0000000..3b623d6 --- /dev/null +++ b/data/pages/wiki/discussions.txt @@ -0,0 +1,15 @@ +====== Обсуждения ====== + +В [[:|этой wiki]] у зарегистрированных пользователей есть возможность оставить комментарии к статьями. Комментарии можно использовать, чтобы задать вопросы по статье, предложить какие-то правки, поблагодарить автора и т.п. Приветствуются осмысленные коментарии, уважительное обращение, если критика, то конструктивная. + +Комментарии и форма для их отправки располагаются на странице конкретной статьи, под статьей. + +Доступна {{commentsfeed>*|RSS-лента}} с комментариями. + +Ниже отображается список всех открытых обсуждений (статей с комментариями). + +===== Список обсуждений ===== + +{{threads>*}} + +~~DISCUSSION~~ \ No newline at end of file diff --git a/data/pages/wiki/dokuwiki.txt b/data/pages/wiki/dokuwiki.txt new file mode 100644 index 0000000..8156b51 --- /dev/null +++ b/data/pages/wiki/dokuwiki.txt @@ -0,0 +1,59 @@ +~~NOTOC~~ +====== Докувики (DokuWiki) ====== + +[[doku>dokuwiki|{{:wiki:dokuwiki-128.png?128x128 }}]] «Докувики» (DokuWiki) — это совместимая со стандартами и лёгкая в использовании [[wp>ru:Wiki|вики]], предназначенная в первую очередь для создания разного рода документации. Она ориентирована на команды разработчиков, рабочие группы и небольшие компании. Все данные хранятся в простых текстовых файлах, поэтому для работы не требуется СУБД((Система управления базами данных, например [[wp>ru:MySQL|MySQL]], [[wp>ru:SQLite|SQLite]].)). Простой, но мощный [[doku>ru:wiki:syntax|синтаксис]] облегчает создание структурированных текстов и позволяет при необходимости читать файлы данных даже за пределами вики. + +[[https://download.dokuwiki.org/|{{http://img-fotki.yandex.ru/get/4807/85226599.7/0_7eb87_dbf8f867_M.jpg?200x65|Скачать последнюю версию «Докувики»}}]] [[extensions|{{http://img-fotki.yandex.ru/get/5801/85226599.7/0_7eb86_c872044e_M.jpg?200x65|Дополнения — плагины и шаблоны}}]] [[ru:faq:support|{{http://img-fotki.yandex.ru/get/5111/85226599.7/0_7eb85_163f5aa5_M.jpg?200x65|Профессиональная поддержка}}]] + +[[doku>ru:manual|Руководство по «Докувики»]] поможет вам раскрыть все возможности этой системы. Так что перед тем, как задавать какие-либо вопросы на форумах, просьба прочесть данное руководство. + +===== Документация ===== + +=== О «Докувики» === + + * [[doku>ru:features|Список возможностей]] :!: + * [[doku>dokuinstall|«Докувики» используют]] + * [[doku>press|О «Докувики» пишут в прессе]] + * [[doku>blogroll|О «Докувики» пишут в блогах]] + * [[https://www.wikimatrix.org/show/DokuWiki|Сравнение с другими вики-системами]] + +=== Установка «Докувики» === + + * [[doku>ru:requirements|Системные требования]] + * [[https://download.dokuwiki.org/|Скачать «Докувики»]] :!: + * [[doku>ru:changes|История изменений]] + * [[doku>ru:install|Установка и обновление]] :!: + * [[doku>ru:config|Настройка (конфигурирование)]] + +=== Использование «Докувики» === + + * [[doku>ru:wiki:syntax|Вики-синтаксис]] + * [[doku>ru:manual|Руководство «Докувики»]] :!: + * [[doku>ru:faq|Часто задаваемые вопросы (FAQ)]] + * [[doku>ru:glossary|Алфавитный указатель]] + * [[http://search.dokuwiki.org/|Поиск помощи и документации]] + +=== Настройка «Докувики» === + + * [[doku>ru:tips|Советы и хитрости]] + * [[doku>ru:plugins|Установка расширений (плагинов)]] + * [[doku>ru:template|Как создавать и использовать шаблоны (они же скины, темы)]] + * [[doku>ru:development|Ресурсы для разработчиков]] + +=== Сообщество и обратная связь === + + * [[doku>ru:newsletter|Подписаться на рассылку]] :!: + * [[doku>mailinglist|Подписаться на новости]] + * [[doku>ru:forum|Форум]] + * [[doku>irc|Канал IRC]] + * [[https://github.com/splitbrain/dokuwiki/issues|Сообщить об ошибке или предложить новую возможность]] + * [[https://www.wikimatrix.org/forum/viewforum.php?id=10|Поделитесь опытом на «Викиматриксе» (WikiMatrix)]] + * [[doku>thanks|Благодарности]] + +===== Авторские права ===== + +2004--2018 (c) Андреас Гор (((Пожалуйста, не пытайтесь связаться со мной по поводу помощи и техподдержки --- используйте [[doku>mailinglist|список рассылки]] или [[https://forum.dokuwiki.org/|форум]].))) и сообщество «Докувики». + +«Докувики» распространяется по лицензии [[http://www.gnu.org/licenses/gpl.html|GNU General Public License]] версии 2. Если вы используете «Докувики» в своей работе, не сочтите за труд [[doku>ru:donate|передать мне несколько долларов]] ;-) + +Подробнее можно прочитать в статье про [[doku>faq:license|лицензии]]. \ No newline at end of file diff --git a/data/pages/wiki/stats.txt b/data/pages/wiki/stats.txt new file mode 100644 index 0000000..b202e63 --- /dev/null +++ b/data/pages/wiki/stats.txt @@ -0,0 +1,24 @@ +~~NOCACHE~~ +====== Статистика ====== + +{{statdisplay>all}} + + +{{statdisplay>all?graph}} + + +{{statdisplay>one month}} + + + +{{statdisplay>month by day}} + +{{statdisplay>month by day?graph}} + +{{statdisplay>top referers}} + +{{statdisplay>top entries}} + +{{statdisplay>top urls}} + +{{statdisplay>user agents}} \ No newline at end of file diff --git a/data/pages/wiki/syntax.txt b/data/pages/wiki/syntax.txt new file mode 100644 index 0000000..0d06807 --- /dev/null +++ b/data/pages/wiki/syntax.txt @@ -0,0 +1,451 @@ +====== Синтаксис форматирования ====== + +«Докувики» поддерживает простой язык разметки, который по возможности сохраняет файлы данных как можно более читабельными. Здесь перечислены все возможные синтаксические конструкции, которые можно использовать при редактировании статей. Просто посмотрите на исходный код этой статьи, нажав кнопку «Править страницу» в правой верхней части страницы в меню управления пользователя. Если хотите поупражняться, просто используйте «[[playground:playground|песочницу]]». Простую разметку также можно легко сделать с помощью [[doku>ru:toolbar|панели инструментов]]. + +===== Основные конструкции форматирования ===== + +«Докувики» поддерживает выделение текста **жирным шрифтом**, //курсивом//, __подчёркнутый текст__ и вывод текста ''моноширинным шрифтом''. Все эти конструкции можно **__//''объединить''//__**. + + +«Докувики» поддерживает выделение текста **жирным шрифтом**, //курсивом//, +__подчёркнутый текст__ и вывод текста ''моноширинным шрифтом''. +Все эти конструкции можно **__//''объединить''//__**. + + +Также можно использовать подстрочный и надстрочный индексы. + + +Также можно использовать подстрочный и надстрочный индексы. + + +Ещё можно зачеркнуть текст. + + +Ещё можно зачеркнуть текст. + + +**Абзацы** отбиваются пустой строкой. Если нужно **принудительно вставить перенос строки**, не создавая абзац, вставьте два обратных слэша и за ним пробел или переход к новой строке. + +Просто текст с разрывом строк\\ Обратите внимание, +что два обратных слэша действуют только в конце строки\\ +или если за ними стоит\\ пробел. Если его не поставить, \\получится вот так. + +Просто текст с разрывом строк\\ Обратите внимание, +что два обратных слэша действуют только в конце строки\\ +или если за ними стоит\\ пробел. Если его не поставить, \\получится вот так. + + +Принудительные переносы следует использовать только в случае крайней необходимости. + +===== Ссылки ===== + +Ссылки в «Докувики» бывают разные и создавать их можно тоже по-разному. + +==== Внешние ==== + +Внешние ссылки распознаются автоматически: http://www.google.com или просто www.google.com +--- также можно указывать текст ссылки: [[http://www.google.com|Это ссылка на Google]]. +Адреса электронной почты тоже распознаются: . + +Внешние ссылки распознаются автоматически: http://www.google.com или просто www.google.com +Также можно указывать текст ссылки: [[http://www.google.com|Это ссылка на Google]]. +Адреса электронной почты тоже распознаются: . + +==== Внутренние ==== + +Внутренние ссылки создаются посредством квадратных скобок. Можно либо просто указать [[doku>ru:pagename|имя страницы]], либо дополнительно прописать [[doku>ru:pagename|текст ссылки]]. Имена +вики-статей автоматически переводятся в нижний регистр, спецсимволы использовать нельзя. + +Внутренние ссылки создаются посредством квадратных скобок. +Можно либо просто указать [[doku>ru:pagename]], либо дополнительно прописать [[doku>ru:pagename|текст ссылки]]. +Имена вики-статей автоматически переводятся в нижний регистр, спецсимволы использовать нельзя. + +Можно использовать в ссылке [[doku>ru:namespaces|пространства имён]] через двоеточие. + +Можно использовать в ссылке [[doku>ru:namespaces|пространства имён]] через двоеточие. + +Ставить ссылки на определённый раздел тоже можно. Просто добавьте через решётку (#) имя раздела, так же, как это делается в HTML. Ссылка на [[#внутренние|этот раздел]]. + +Ссылка на [[#внутренние|этот раздел]]. + +Примечания: + + * Ссылки на [[wiki:syntax|существующие статьи]] отображаются иначе, чем ссылки на [[nonexisting|несуществующие]]. + * «Докувики» по умолчанию не использует [[wp>ru:CamelCase|CamelCase]] (ВерблюжийРегистр) для автоматического создания ссылок, но эту возможность можно включить в файле [[doku>config]]. Проверка: если DokuWiki --- ссылка, значит эта возможность включена. + * Если меняется название раздела, ссылки на него не меняются автоматически. Так что не очень полагайтесь на ссылки на разделы. + * Ссылки на разделы делаются именно на [[#Разбивка на разделы|разделы]]. + +==== Интервики ==== + +«Докувики» поддерживает [[doku>ru:interwiki|интервики]]-ссылки. Это короткие ссылки +на другие вики. Например, вот ссылка на статью Википедии о вики: [[wp>Wiki]]. + +«Докувики» поддерживает [[doku>ru:interwiki|интервики]]-ссылки. Это короткие ссылки +на другие вики. Например, вот ссылка на статью Википедии о вики: [[wp>Wiki]]. + + +==== Сетевые ресурсы Windows ==== + +Ссылки на сетевые ресурсы вида \\server\share тоже распознаются. Однако учтите, что такие ссылки имеют смысл только в гомогенных группах пользователей, например в корпоративном интранете. + +Ссылки на сетевые ресурсы вида \\server\share тоже распознаются. + +Примечания: + + * Из соображений безопасности непосредственный просмотр сетевых ресурсов работает по умолчанию только в Internet Explorer (и только в «локальной зоне»). + * В браузерах Mozilla эту возможность можно включить с помощью опции [[http://www.mozilla.org/quality/networking/docs/netprefs.html#file|security.checkloaduri]], но делать это не рекомендуется. + * Подробней читайте здесь: [[http://bugs.dokuwiki.org/index.php?do=details&task_id=151|bug 151]]. + +==== Картинки-ссылки ==== + +Совместив синтаксис ссылки и [[#картинки и другие файлы|картинки]], можно вставить в текст картинку, которая будет внутренней или внешней ссылкой: + +[[http://www.php.net/|{{wiki:dokuwiki-128.png}}]] + +[[http://www.php.net/|{{wiki:dokuwiki-128.png}}]] + +Учтите: форматирование картинок --- это единственная синтаксическая конструкция, которую можно использовать в тексте ссылки. + +==== Сноски ==== + +С помощью двойных скобок можно добавить сноску((Сноска — помещаемые внизу страницы примечание, ссылка, перевод.)). + +С помощью двойных скобок можно добавить сноску((Сноска — +помещаемые внизу страницы примечание, ссылка, перевод.)). + +===== Разбивка на разделы ===== + +Для структурирования текста можно использовать до пяти уровней заголовков. Если в тексте больше трёх заголовков, автоматически создаётся список содержимого. Его можно отключить, вставив в документ строку %%~~NOTOC~~%%. + + +==== Заголовок 3 уровня ==== +=== Заголовок 4 уровня === +== Заголовок 5 уровня == + +==== Заголовок 3 уровня ==== +=== Заголовок 4 уровня === +== Заголовок 5 уровня == + +Четыре и более тире преобразуются в горизонтальную черту: + +---- + +===== Картинки и другие файлы ===== + +См. также: «[[doku>ru:images|Работа с изображениями и медиафайлами]]». + +С помощью фигурных скобок можно вставлять в текст внешние и внутренние [[doku>ru:images|картинки]]. По желанию можно указать их размер. + +Нормальный размер: {{wiki:dokuwiki-128.png}} + +Отмасштабированная до заданной ширины: {{wiki:dokuwiki-128.png?50}} + +Отмасштабированная до заданных размеров: {{wiki:dokuwiki-128.png?200x50}} + +Отмасштабированная внешняя картинка: {{http://de3.php.net/images/php.gif?200x50}} + + +Нормальный размер: {{wiki:dokuwiki-128.png}} +Отмасштабированная до заданной ширины: {{wiki:dokuwiki-128.png?50}} +Отмасштабированная до заданных размеров: {{wiki:dokuwiki-128.png?200x50}} +Отмасштабированная внешняя картинка: {{http://de3.php.net/images/php.gif?200x50}} + + +Поставив слева или справа пробел, можно задать выравнивание картинки: + +{{wiki:dokuwiki-128.png }} +{{ wiki:dokuwiki-128.png}} +{{ wiki:dokuwiki-128.png }} + +{{wiki:dokuwiki-128.png }} — картинка слева +{{ wiki:dokuwiki-128.png }} — посередине +{{ wiki:dokuwiki-128.png}} — справа + + +И, конечно, картинке можно задать название (в большинстве браузеров оно отображается в виде всплывающей подсказки). + +{{ wiki:dokuwiki-128.png |Логотип «Докувики»}} + +{{ wiki:dokuwiki-128.png |Логотип «Докувики»}} + +Если задать имя файла (внутреннее или внешнее), который не является картинкой (''gif, jpeg, png''), оно будет отображаться в виде ссылки. + +Узнать, как вставить картинку со ссылкой можно в [[#картинки-ссылки|разделе выше]]. + +===== Списки ===== + +«Докувики» поддерживает нумерованные и маркированные списки. Чтобы создать элемент списка, поставьте в начале строки два пробела и потом звёздочку (*) в случае маркированного списка, или дефис (-) --- в случае нумерованного. + + * Первый элемент маркированного списка + * Второй элемент списка + * Можно сделать вложенный список + * Ещё один элемент + + - Тот же список, только нумерованный + - Ещё элемент + - Чем больше пробелов в начале, тем глубже вложенность + - Всё просто + + + * Первый элемент маркированного списка + * Второй элемент списка + * Можно сделать вложенный список + * Ещё один элемент + + - Тот же список, только нумерованный + - Ещё элемент + - Чем больше пробелов в начале, тем глубже вложенность + - Всё просто + + +См. также [[doku>ru:faq:lists|FAQ по элементам списка]]. + +===== Смайлики ===== + +«Докувики» переделывает наиболее употребляемые смайлики в их графические эквиваленты. Дополнительные смайлики можно положить в директорию ''smiley'' и добавить их в файл ''conf/smileys.local.conf''. Вот смайлики, которые есть в «Докувики»: + + * 8-) %%8-)%% + * 8-O %%8-O%% + * :-( %%:-(%% + * :-) %%:-)%% + * =) %%=)%% + * :-/ %%:-/%% + * :-\ %%:-\%% + * :-? %%:-?%% + * :-D %%:-D%% + * :-P %%:-P%% + * :-O %%:-O%% + * :-X %%:-X%% + * :-| %%:-|%% + * ;-) %%;-)%% + * ^_^ %%^_^%% + * :?: %%:?:%% + * :!: %%:!:%% + * LOL %%LOL%% + * FIXME %%FIXME%% + * DELETEME %%DELETEME%% + +===== Типографские символы ===== + +«Докувики» может переделывать символы, набранные простым текстом, в их типографски корректные эквиваленты. Распознаются следующие символы. + +-> <- <-> => <= <=> >> << -- --- '640x480' (c) (tm) (r) ...\\ +"Александр Сергеевич(tm) --- это наше всё (c) не я" + + +-> <- <-> => <= <=> >> << -- --- '640x480' (c) (tm) (r) ... +"Александр Сергеевич(tm) --- это наше всё (c) не я" + + +Примечание: это конвертирование можно отключить в файле конфигурации ''[[doku>ru:entities|conf/entities.conf]]''. + +===== Таблицы ===== + +«Докувики» поддерживает упрощённый синтаксис создания таблиц. + +^ Заголовок 1 ^ Заголовок 2 ^ Заголовок 3 ^ +| Ряд 1 Колонка 1 | Ряд 1 Колонка 2 | Ряд 1 Колонка 3 | +| Ряд 2 Колонка 1 | Объединение колонок (обратите внимание на двойную вертикальную черту) || +| Ряд 3 Колонка 1 | Ряд 2 Колонка 2 | Ряд 2 Колонка 3 | + +Обычные ряды должны начинаться и заканчиваться вертикальной чертой --- %%|%%, а заголовки «крышечкой» (циркумфлекс) — %%^%%. + + ^ Заголовок 1 ^ Заголовок 2 ^ Заголовок 3 ^ + | Ряд 1 Колонка 1 | Ряд 1 Колонка 2 | Ряд 1 Колонка 3 | + | Ряд 2 Колонка 1 | Объединение колонок (обратите внимание на двойную вертикальную черту) || + | Ряд 3 Колонка 1 | Ряд 2 Колонка 2 | Ряд 2 Колонка 3 | + +Чтобы объединить две соседние клетки в ряду, просто оставьте соседнюю клетку полностью пустой, как показано выше. Следите, чтобы количество разделителей клеток было одинаковым. + +Вертикальные заголовки тоже можно сделать: + +| ^ Заголовок 1 ^ Заголовок 2 ^ +^ Заголовок 3 | Ряд 1 Колонка 2 | Ряд 1 Колонка 3 | +^ Заголовок 4 | Объединения нет | | +^ Заголовок 5 | Ряд 2 Колонка 2 | Ряд 2 Колонка 3 | + +Как легко увидеть, разделитель, стоящий перед клеткой, определяет форматирование: + + | ^ Заголовок 1 ^ Заголовок 2 ^ + ^ Заголовок 3 | Ряд 1 Колонка 2 | Ряд 1 Колонка 3 | + ^ Заголовок 4 | Объединения нет | | + ^ Заголовок 5 | Ряд 2 Колонка 2 | Ряд 2 Колонка 3 | + +Можно сделать вертикально объединённые ячейки добавлением трёх двоеточий '':::'' в объединяемые нижележащие ячейки. + +^ Заголовок 1 ^ Заголовок 2 ^ Заголовок 3 ^ +| Ряд 1 Колонка 1 | эта ячейка объединена вертикально | Ряд 1 Колонка 3 | +| Ряд 2 Колонка 1 | ::: | Ряд 2 Колонка 3 | +| Ряд 3 Колонка 1 | ::: | Ряд 2 Колонка 3 | + +В этих ячейках не должно быть ничего, кроме синтаксиса объединения ('':::''). + + ^ Заголовок 1 ^ Заголовок 2 ^ Заголовок 3 ^ + | Ряд 1 Колонка 1 | эта ячейка объединена вертикально | Ряд 1 Колонка 3 | + | Ряд 2 Колонка 1 | ::: | Ряд 2 Колонка 3 | + | Ряд 3 Колонка 1 | ::: | Ряд 2 Колонка 3 | + +Текст клетки таблицы можно выравнивать. Просто добавьте минимум два пробела с противоположной стороны: слева — если надо выравнять вправо, справа — если надо выравнять влево, и по два с каждой стороны — если по центру. + +^ Таблица с выравниванием ^^^ +| вправо| по центру |влево | +|влево | вправо| по центру | +| xxxxxxxxxxxx | xxxxxxxxxxxx | xxxxxxxxxxxx | + + ^ Таблица с выравниванием ^^^ + | вправо| по центру |влево | + |влево | вправо| по центру | + | xxxxxxxxxxxx | xxxxxxxxxxxx | xxxxxxxxxxxx | + +Примечание: вертикальное выравнивание не поддерживается. + +===== Неформатируемые блоки ===== + +Неформатируемые блоки можно вставлять в документ, либо начиная каждую строчку блока с двух или более пробелов (как это делалось в некоторых предыдущих примерах), либо используя тэги ''%%%%'' или ''%%%%''. + +Это неформатированный текст, в котором сохранены все пробелы: вот <- так. + +В принципе то же самое, но этим выделением можно показать, что цитируется содержимое файла. + +Чтобы парсер полностью проигнорировал некий текст (т. е. не форматировал его), либо заключите его в тэги ''nowiki'', либо ещё проще --- в двойные знаки процента ''%%''. + +Это просто текст, в котором есть адрес %%http://www.splitbrain.org/%% +и %%**форматирование**%% --- но ничего не происходит. + +Это просто текст, в котором есть адрес %%http://www.splitbrain.org/%% +и %%**форматирование**%% --- но ничего не происходит. + +Чтобы увидеть, как используются эти блоки, смотрите код страницы. + +===== Подсветка синтаксиса ===== + +«Докувики» может подсвечивать программный код, чтобы его было проще читать. Для этого используется библиотека [[http://qbnz.com/highlighter/|GeSHi]] — соответственно подсвечиваются все языки, поддерживаемые GeSHi. Синтаксис такой же, как и в блоке ''code'' в предыдущем разделе, но на этот раз внутри тэга добавляется название языка. Например %%%%. + + +/** + * The HelloWorldApp class implements an application that + * simply displays "Hello World!" to the standard output. + */ +class HelloWorldApp { + public static void main(String[] args) { + System.out.println("Hello World!"); //Display the string. + } +} + + +На данный момент распознаются следующие языки: 4cs, 6502acme, 6502kickass, 6502tasm, 68000devpac, abap, actionscript3, actionscript, ada, aimms, algol68, apache, applescript, apt_sources, arm, asm, asp, asymptote, autoconf, autohotkey, autoit, avisynth, awk, bascomavr, bash, basic4gl, batch, bf, biblatex, bibtex, blitzbasic, bnf, boo, caddcl, cadlisp, ceylon, cfdg, cfm, chaiscript, chapel, cil, c_loadrunner, clojure, c_mac, cmake, cobol, coffeescript, c, cpp, cpp-qt, cpp-winapi, csharp, css, cuesheet, c_winapi, dart, dcl, dcpu16, dcs, delphi, diff, div, dos, dot, d, ecmascript, eiffel, email, epc, e, erlang, euphoria, ezt, f1, falcon, fo, fortran, freebasic, freeswitch, fsharp, gambas, gdb, genero, genie, gettext, glsl, gml, gnuplot, go, groovy, gwbasic, haskell, haxe, hicest, hq9plus, html, html4strict, html5, icon, idl, ini, inno, intercal, io, ispfpanel, java5, java, javascript, jcl, j, jquery, julia, kixtart, klonec, klonecpp, kotlin, latex, lb, ldif, lisp, llvm, locobasic, logtalk, lolcode, lotusformulas, lotusscript, lscript, lsl2, lua, m68k, magiksf, make, mapbasic, mathematica, matlab, mercury, metapost, mirc, mk-61, mmix, modula2, modula3, mpasm, mxml, mysql, nagios, netrexx, newlisp, nginx, nimrod, nsis, oberon2, objc, objeck, ocaml-brief, ocaml, octave, oobas, oorexx, oracle11, oracle8, oxygene, oz, parasail, parigp, pascal, pcre, perl6, perl, per, pf, phix, php-brief, php, pic16, pike, pixelbender, pli, plsql, postgresql, postscript, povray, powerbuilder, powershell, proftpd, progress, prolog, properties, providex, purebasic, pycon, pys60, python, qbasic, qml, q, racket, rails, rbs, rebol, reg, rexx, robots, rpmspec, rsplus, ruby, rust, sas, sass, scala, scheme, scilab, scl, sdlbasic, smalltalk, smarty, spark, sparql, sql, standardml, stonescript, swift, systemverilog, tclegg, tcl, teraterm, texgraph, text, thinbasic, tsql, twig, typoscript, unicon, upc, urbi, uscript, vala, vbnet, vb, vbscript, vedit, verilog, vhdl, vim, visualfoxpro, visualprolog, whitespace, whois, winbatch, xbasic, xml, xojo, xorg_conf, xpp, yaml, z80, zxbasic. + +==== Скачиваемые блоки кода ==== + +Используя тэги ''%%%%'' или ''%%%%'', как показано выше, вы можете сделать отображаемый код доступным для загрузки. Для этого определите имя файла после кода языка вот так: + + + + + + + + + + + +Если вам не нужна подсветка, но нужен загружаемый файл, поставьте прочерк (дефис) (''-'') на месте кода языка: ''%%%%''. + +**Особенность:** при написании имени файла на русском языке для формирования корректного имени файла обрамляйте название файла двойными кавычками. Например, %%"Фоо Бар.php"%%. + + + + +===== Вставка HTML и PHP ===== + +Чистый HTML- или PHP-код можно вставлять в документ с помощью тэгов ''html'' и ''php''. Используйте заглавные буквы для блочных элементов. + + + +Тут вставлен код HTML + + + +

И здесь блочная вставка HTML

+ +
+ +Получается: + + +Тут вставлен HTML-код + + + +

И здесь блочная вставка HTML

+ + +---- + + + +echo 'Версия PHP: '; +echo phpversion(); +echo ' (прямая вставка в HTML).'; + + + +echo ''; +echo ''; +echo '
То же самое — в элементе блочного уровня:'.phpversion().'
'; +
+
+ +Получается: + + +echo 'Версия PHP: '; +echo phpversion(); +echo ' (прямая вставка в HTML).'; + + + +echo ''; +echo ''; +echo '
То же самое — в элементе блочного уровня:'.phpversion().'
'; +
+ +**Примечание:** по умолчанию вставка HTML и PHP запрещена. Когда она запрещена, код не исполняется, а выводится в исходном виде. + +===== RSS/ATOM Feed Aggregation ===== + +[[DokuWiki]] может интегрировать данные из внешних XML-каналов. Для анализа XML-каналов, используется [[http://simplepie.org/|SimplePie]]. Все форматы, понятные SimplePie, также могут быть использованы в Докувики. Вы можете влиять на рендеринг с помощью нескольких дополнительных параметров, разделенных пробелами: + +^ Параметр ^ Описание ^ +| any number | Отобразить максимальное количество элиментов, по умолчанию 8 | +| reverse | Сначала отобразить последние элементы в ленте | +| author | Показывать имена авторов | +| date | Показывать даты | +| description| Показывать описание. Если [[doku>config:htmlok|HTML]] отключен, все теги будут удалены | +| nosort | Не сортировать элементы в ленте | +| //n//[dhm] | Период обновления, где d=дни, h=часы, m=минуты. (например 12h = 12 часов). | + +Период обновления по умолчанию равен 4 часам. Любое значение ниже 10 минут будет рассматриваться как 10 минут. Докувики обычно пытается предоставить кэшированную версию страницы, очевидно, что это неуместно, когда страница содержит динамический внешний контент. Параметр указывает Докувики повторно отобразить страницу, если прошло больше периода обновления с момента последнего отображения страницы. + +По умолчанию лента будет отсортирована по дате, сначала по самым новым элементам. Вы можете отсортировать его по возрастанию дат, используя параметр «reverse», или отобразить ленту как есть с «nosort». + +**Пример:** + + {{rss>http://slashdot.org/index.rss 5 author date 1h }} + +{{rss>http://slashdot.org/index.rss 5 author date 1h }} + + +===== Управляющие макросы ===== + +Некоторый синтаксис влияет на то, как «Докувики» обрабатывает статьи без создания каких-либо результатов для себя. Доступны следующие макросы: + +^ Макрос ^ Описание | +| %%~~NOTOC~~%% | Если этот макрос присутствует в статье, оглавление не будет создано. | +| %%~~NOCACHE~~%% | «Докувики» помещает всё выводимое в кэш по умолчанию. Иногда это нежелательно (например, когда выше был использован синтаксис %%%%), добавление этого макроса заставит «Докувики» обрабатывать статью при каждом вызове. | + +===== Синтаксические плагины ===== + +Синтаксис «Докувики» может быть расширен за счёт [[doku>ru:plugins|плагинов]]. Как их устанавливать и использовать --- описывается на страницах плагинов. Следующие плагины доступны в инсталляции «Докувики» на этом сайте: + +~~INFO:syntaxplugins~~ \ No newline at end of file diff --git a/data/pages/wiki/wiki_backup.txt b/data/pages/wiki/wiki_backup.txt new file mode 100644 index 0000000..cc78124 --- /dev/null +++ b/data/pages/wiki/wiki_backup.txt @@ -0,0 +1,21 @@ +====== Архив всех статей ====== + +Содержимое [[this>|этой wiki]] -- это результат коллективной работы всего сообщества. Для того, чтобы эта работа не оказалась напрасной, а все статьи в какой-то момент не оказались безвозвратно утеряны в результате непредвиденных обстоятельств или технических сбоев, всё содержимое wiki ежедневно архивируется и загружается в хранилище на специальном сервере. Облегченную копию этого архива любой желающий может скачать, хранить на своей машине и использовать по своему усмотрению. По сути, этот архив является бэкапом данных и может быть использован для восстановления всех статей на другом сервере. + +Архив создается ежедневно в 23-30 по московскому времени, ссылка для скачивания на этой странице обновляется автоматически: **[[this>howto-wiki_2024-02-08-23-30.tar.gz|Архив всех статей]]** ([[this>howto-wiki_2024-02-08-23-30.tar.gz.sha-256|SHA-256]]). + +Для автоматического ежесуточного скачивания архива всех статей можно использовать команду (Linux): +wget http://[222:a8e4:50cd:55c:788e:b0a5:4e2f:a92c]/howto-wiki_$(date -d "$date -1 days" +"%F")-23-30.tar.gz +или (в зависимости от времени запуска (до 0:00 или после)): +wget http://[222:a8e4:50cd:55c:788e:b0a5:4e2f:a92c]/howto-wiki_$(date +"%F")-23-30.tar.gz + +===== Как восстановить статьи из бэкапа ===== + +Необходимо установить [[doku>|dokuwiki]], скопировать содержимое каталогов data, conf из архива в соответствующие каталоги установленной dokuwiki и настроить права доступа web-сервера к восстановленным файлам. + +В некоторых статьях используется форматирование, синтаксис которого, реализован в плагине [[doku>plugin:wrap|wrap]]. Необходимо установить этот плагин, чтобы сохранить форматирование. + +Чтобы придать dokuwiki такой же вид, как на этом ресурсе, можно использовать шаблон (template) [[doku>template:navigation|Navigation]] и плагин [[doku>plugin:indexmenu|IndexMenu]]. + +Регистрационные данные о пользователях в архив не включены из соображений безопасности, на новом сервере всем пользователям придется регистрироваться заново. + diff --git a/data/pages/wireguard.txt b/data/pages/wireguard.txt new file mode 100644 index 0000000..7f4f647 --- /dev/null +++ b/data/pages/wireguard.txt @@ -0,0 +1,16 @@ +====== WireGuard ====== + +WireGuard -- протокол связи и бесплатное программное обеспечение с открытым исходным кодом, реализующее зашифрованные виртуальные частные сети. Был разработан с учетом простоты использования, высокой производительности и малой подверженности атакам. + +В марте 2020 года WireGuard был включен в ядро Linux версии 5.6. + +WireGuard использует [[wp>Curve25519|Curve25519]] для обмена ключами, [[wpru>Salsa20#ChaCha|ChaCha20]] для шифрования и [[wp>Poly1305|Poly1305]] для аутентификации данных. Также он работает с [[wp>SipHash|SipHash]] для хеш-ключей и [[wpru>BLAKE_(хеш-функция)#BLAKE2|BLAKE2]] для хеширования. + +===== Статьи внутри раздела ===== + +{{indexmenu>:wireguard}} + +====== Ссылки ====== + +[[wp>WireGuard|https://wikipedia.org/wiki/wireguard]] \\ +https://www.wireguard.com/ \ No newline at end of file diff --git a/data/pages/wireguard/__template.txt b/data/pages/wireguard/__template.txt new file mode 100644 index 0000000..d115689 --- /dev/null +++ b/data/pages/wireguard/__template.txt @@ -0,0 +1,25 @@ +====== Заголовок статьи ====== + +Введение + +===== Заголовок раздела 1 ===== + +Текст + +==== Заголовок подраздела ==== + +Текст + +===== Заголовок раздела 2 ===== + +Текст + +... + +====== Ссылки ====== + +Описание ссылки (EN|RU): http://address.domain/ \\ +Описание ссылки (EN|RU): [[ раздел:статья | Заголовок ссылки ]] \\ +Описание ссылки (EN|RU): [[wpru>имя_страницы_в_русскоязычной_wikipedia|Заголовок ссылки]] + +~~DISCUSSION~~ diff --git a/data/pages/wireguard/simple_vpn.txt b/data/pages/wireguard/simple_vpn.txt new file mode 100644 index 0000000..3021333 --- /dev/null +++ b/data/pages/wireguard/simple_vpn.txt @@ -0,0 +1,185 @@ +====== Простой VPN-сервер ====== + +Рассмотрим установку и настройку [[:WireGuard|WireGuard]] в качестве простого VPN-сервера на [[wpru>Debian|Debian 10]]. + +Будем исходить из задачи настроить VPN c топологией "звезда", сервер - на [[:VPS]]. C клиентов настроим доступ к домашней сети и к компьютеру в офисе (с которого так же будем иметь доступ к домашней сети). Кроме того, через VPN будет маршрутизироваться трафик в [[:yggdrasil:Yggdrasil]], т.е., на клиентах Yggdrasil устанавливать необходимости не будет для того, чтобы получить доступ сеть. Для разрешения доменных имен [[yggdrasil:dns:ALFIS|ALFIS]] через туннель, будем использовать один из [[:yggdrasil:dns:alfis#список_публичных_серверов|публичных серверов]]. + +//Примечание: этот пример предполагает наличие в домашней сети роутера с возможностью установки в него WireGuard.// + +===== Установка ===== + +Для Debian 10 WireGuard находится в репозитории backports. Добавляем его: +sh -c "echo 'deb http://deb.debian.org/debian buster-backports main' > /etc/apt/sources.list.d/buster-backports.list" + +Обновляем информацию о пакетах и устанавливаем WireGuard: +apt update && apt-get --yes install wireguard-dkms wireguard-tools + +===== Настройка сервера ===== + +Активируем режим роутера, включив форвардинг пакетов между сетевыми интерфейсами: +sysctl -w net.ipv4.ip_forward=1 +sysctl -w net.ipv6.conf.all.forwarding=1 + +Для того, чтобы форвардинг работал после перезагрузки системы вносим изменение в конфигурационный файл ''%%/etc/sysctl.conf%%'' -- в строках ''%%#net.ipv4.ip_forward=1%%'' и ''%%#net.ipv6.conf.all.forwarding=1%%'' удаляем признак комментария (''%%#%%''). Должно получиться так: +net.ipv4.ip_forward=1 +net.ipv6.conf.all.forwarding=1 + +Создаем каталог для конфигурационного файла WireGuard и переходим в него: +mkdir -p /etc/wireguard && cd /etc/wireguard + +Генерируем ключи сервера: +wg genkey | tee privatekey-server | wg pubkey > publickey-server + +И сразу можем сгенерировать ключи для клиентов (например, для: домашнего роутера, смартфона, ноутбука и рабочей машины в офисе) +wg genkey | tee privatekey-client-router | wg pubkey > publickey-client-router +wg genkey | tee privatekey-client-smartph | wg pubkey > publickey-client-smartph +wg genkey | tee privatekey-client-wrkPC | wg pubkey > publickey-client-wrkPC +wg genkey | tee privatekey-client-ntb | wg pubkey > publickey-client-ntb + +Создаем конфигурационный файл сервера WireGuard (используем редактор vi, nano или любой другой): +vi wg0.cfg + +Содержимое файла: +[Interface] +Address = 10.0.0.1/24, fd00::1/124 # адреса сервера в туннеле и их подсети +PrivateKey = 7Ewkr05HDT/DdmYSM8rGv554OoF3mk9vfC3DdlYW/nc= # приватный ключ сервера +ListenPort = 51820 # порт, на котором будет ожидать подключений сервер (можно изменить, если будут ограничения по используемым портам) +# правила iptables будут добавляться и удаляться автоматически при включении и отключении виртуального сетевого интерфейса WireGuard: +# (эти правила реализуют NAT для клиентов) +#IPv4 +PostUp = iptables -A FORWARD -i %i -j ACCEPT +PostUp = iptables -A FORWARD -o %i -j ACCEPT +PostUp = iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE +#IPv6 +PostUp = ip6tables -A FORWARD -i %i -j ACCEPT +PostUp = ip6tables -A FORWARD -o %i -j ACCEPT +PostUp = ip6tables -t nat -A POSTROUTING -o eth0 -j MASQUERADE +#Yggdrasil +PostUp = ip6tables -t nat -A POSTROUTING -o tun0 -j MASQUERADE +######################### +#IPv4 +PostDown = iptables -D FORWARD -i %i -j ACCEPT +PostDown = iptables -D FORWARD -o %i -j ACCEPT +PostDown = iptables -t nat -D POSTROUTING -o eth0 -j MASQUERADE +#IPv6 +PostDown = ip6tables -D FORWARD -i %i -j ACCEPT +PostDown = ip6tables -D FORWARD -o %i -j ACCEPT +PostDown = ip6tables -t nat -D POSTROUTING -o eth0 -j MASQUERADE +#Yggdrasil +PostDown = ip6tables -t nat -D POSTROUTING -o tun0 -j MASQUERADE +#eth0 - имя интерфейса на сервере (у вас может отличаться) +#tun0 - интерфейс Yggdrasil на сервере +#вместо %i WireGuard автоматически подставит имя своего интерфеса (wg0) + +#Ниже в конфигурационном файле сервера перечислены клиенты, которым разрешено подключение к серверу +[Peer] +#Роутер +PublicKey = keP1jP+XvTp84kUxct6MGXx8rR1xFCMoBniN8m+WLxE= # соответствующий публичный ключ клиента +AllowedIPs = 10.0.0.2/32, 192.168.1.0/24 # адреса и подсети, которые будут маршрутизироваться сервером, через туннель до клиента (иными словами, то, к чему сервер будет иметь доступ через туннель) +# 192.168.1.0/24 - адрес домашней сети, роутер в этой сети имеет адрес 192.168.1.1 +# 10.0.0.2/32 - адрес клиента в туннеле (/32 - означает один хост в подсети) + +[Peer] +#Смартфон +PublicKey = ho2zZ01goTnlZ03pjl8cJcvRVzsnAivkKRjHaXa50Q0= +AllowedIPs = 10.0.0.3/32, fd00::3/128 #/128 - один хост + +[Peer] +#ноутбук +PublicKey = trrzZ01goTnlZ03pjl8cJcvRVzsnAivkKRjHaXaamd= +AllowedIPs = 10.0.0.4/32, fd00::4/128 + +[Peer] +#Рабочая машина в офисе +PublicKey = 0Kn68QK84Nb5wkxbzpnLiPPgj15KXpEvRk+ATlxFvHw= +AllowedIPs = 10.0.0.5/32, fd00::5/128 + +#В секции [Interface] указывается приватный ключ сервера (генерировали ранее), в секциях [Peer] указываются публичные ключи клиентов. + +//Примечание: fd00::/8 -- аналог частных IPv4 адресов. Подробнее: [[https://habr.com/ru/post/64592/|Основы IPv6]], [[wpru>Частный_IP-адрес|Частный IP-адрес]].// + +Включаем автоматический запуск сервера WireGuard при загрузке системы: +systemctl enable wg-quick@wg0 + +На этом настройку сервера можно завершить... + +Запускаем сервер WireGuard: +wg-quick up wg0 + +Файлы конфигурации и ключи можно сохранить на локальной машине для того, чтобы проще было настраивать клиенты. Если вы подключаетесь из под Windows можно использовать программу [[https://winscp.net/eng/docs/lang:ru|WinSCP]], под Linux - scp. + +===== Настройка клиентов ===== + +Подробно рассмотрим настройку клиента на Linux. + +Клиенты под Windows, на смартфоне и роутере настраиваются c помощью графического интерфейса WireGuard (т.е., нужно установить соответствующее приложение), и при понимании принципов, с этим сложностей возникнуть не должно. + +[[:wireguard:simple_vpn#По поводу роутера|Ниже]] будет еще небольшое замечание по поводу настройки роутера... + +На ноутбуке с Linux аналогичным описанному выше способом устанавливаем WireGuard, создаем конфигурационный файл, вносим в него: + +[Interface] +Address = 10.0.0.4/24, fd00::4/124 +PrivateKey = sdwrd1oaoYAFOg0CPBkXhsvfzPrLj79aIQ0THsffes= +DNS = 94.140.14.14, 94.140.15.15, 302:db60::53 # последним указан публичный адрес DNS-сервера ALFIS (можно указать не публичный, а свой) +#так же, в разделе с DNS можно прописать домашний DNS-сервер (pi.hole, например) + +#Трафик через туннель маршрутизируется полностью, за исключением нижеследующего: +PostUp = ip route add zzz.zz.zzz.zz via 192.168.1.1 # сервер в офисе (нужно по работе) +PostUp = ip route add $(dig A myDomain.com +short | tail -n 1) via 192.168.1.1 # и еще один сервер, который требует скоростного доступа + +#!Если вместе с туннелем Wireguard на этой же машине будет запускаться Yggdrasil, то тут же имеет смысл перечислить +#публичные пиры, к которым будете подключаться, чтобы соединение с ними не шло через туннель. + +################################################################ + +#то, к чему ходим напрямую +PostDown = ip route del zzz.zz.zzz.zz +PostDown = ip route del $(dig A myDomain.com +short | tail -n 1) + +#!Если вместе с туннелем Wireguard на этой же машине будет запускаться Yggdrasil, то тут же имеет смысл перечислить +#публичные пиры, к которым будете подключаться, чтобы соединение с ними не шло через туннель. + +[Peer] +PublicKey = asdoSDafr2sNv6cp/FcdlKiuVCi2DtCduU0mmrrte= +Endpoint = xxx.xxx.xxx.xxx:51820 # адрес сервера WireGuard и порт, на котором он ожидает подключений +AllowedIPs = 0.0.0.0/0, ::/0 # адреса / подсети, которые будут маршрутизироваться через туннель (маршрутизируем всё) +#!При такой конфигурации необходимо наличие "настоящего" IPv6 на сервере, иначе сайты по IPv6 (не Yggdrasil) открываться не будут +#!Вместо ::/0 можно использовать 200::/7 +PersistentKeepalive = 30 # чтобы соединение не прерывалось + +Ничто не мешает создать wg1.conf, wg2.conf и т.д. для подключения из разных мест. + +На этом клиенте туннель постоянно поднятым держать необходимости нет, симлинк systemd-юнита создавать не нужно. При необходимости активируем туннель так: +wg-quick up wg0 + +Информацию о соединениях и на сервере и на клиенте можно смотреть так: +wg show wg0 + +==== По поводу роутера ==== + +На роутере WireGuard настраивается, в основном, для того, чтобы в любое время из любого места иметь доступ к домашней сети, поэтому туннельный IPv6 ему не нужен. Кроме того, из дома мы в любой момент с любого устройства можем получить доступ к серверу, и это даёт возможность настроить на роутере машрутизацию через туннель к ошибочно заблокированным [[wpru>Роскомнадзор|РКН]] сайтам. Т.о., все устройства дома проблем из-за этого испытывать не будут и не будут требовать каких-либо дополнительных действий. Весь трафик пускать через туннель на роутере смысла нет, можно прописать там конкретные адреса. Но тут кому как будет удобнее... + +Устанавливается WireGuard на роутере, как специальный компонент через панель управления, и настраивается так же -- через web-интерфейс, либо через [[wp>Opkg|opkg]] и консоль -- в зависимости от модели и аппаратных возможностей роутера... + +===== Заключение ===== + +Так можно настроить простую приватную сеть с топологией "звезда". Устройства связаны, как нужно, доступ к Yggdrasil через туннель работает, доменные имена успешно разрешаются указанными серверами, в том числе ALFIS. + +Если вам доступ к Yggdrasil через туннель не нужен, можно убрать всё, что касается IPv6 из конфигурационных файлов. + +В процессе настройки [маршрутизации] вам, скорее всего, понадобятся средства диагности, чтобы видеть, по какому именно маршруту идут пакеты до заданного узла. Для этих целей можно использовать утилиты traceroute или mtr-tiny (совмещает в себе ping и traceroute). + +Чтобы увидеть по какому маршруту идут пакеты просто выполните: traceroute google.com +или +mtr -b google.com + +Флагами ''%%-4%%'' ''%%-6%%'' можно выбирать, тестируем IPv4 или IPv6. + +//Примечание: в Windows утилита traceroute переименована в tracert.// + +Иногда, так же бывает полезно узнать, как ресурсы, к которым вы обращаетесь, определяют ваш IP-адрес. Для этого можно использовать такие сайты, как [[https://2ip.ru/|2ip.ru]] или [[https://myip.ru/|myip.ru]]. Подобные сайты в Yggdrasil: [[http://[200:6223::d35b:1fd8:be0d:2841]/|myip.ygg]], [[http://[301:d060:fb10:ae5b::2]/|http://[301:d060:fb10:ae5b::2]/]]. + +Так, если вы зайдете на [[https://myip.ru/|myip.ru]] до подключения к VPN, он покажет адрес, который выдан вам вашим провайдером Интернет (или прокси-сервера, если подключаетесь через прокси), а если после подключения к VPN (при условии, что маршрутизация настроена правильно), покажет адрес вашего VPN-сервера. + +И на последок, пара сайтов, которые могут помочь определить "утечку" (если для вас это критично) вашего реального IP или запросов DNS: [[https://ipleak.net/|ipleak.net]], [[https://dnsleak.com/|dnsleak.com]], [[https://www.dnsleaktest.com|dnsleaktest.com]]. diff --git a/data/pages/yggdrasil/__template.txt b/data/pages/yggdrasil/__template.txt new file mode 100644 index 0000000..d115689 --- /dev/null +++ b/data/pages/yggdrasil/__template.txt @@ -0,0 +1,25 @@ +====== Заголовок статьи ====== + +Введение + +===== Заголовок раздела 1 ===== + +Текст + +==== Заголовок подраздела ==== + +Текст + +===== Заголовок раздела 2 ===== + +Текст + +... + +====== Ссылки ====== + +Описание ссылки (EN|RU): http://address.domain/ \\ +Описание ссылки (EN|RU): [[ раздел:статья | Заголовок ссылки ]] \\ +Описание ссылки (EN|RU): [[wpru>имя_страницы_в_русскоязычной_wikipedia|Заголовок ссылки]] + +~~DISCUSSION~~ diff --git a/data/pages/yggdrasil/address_miners/address_miners.txt b/data/pages/yggdrasil/address_miners/address_miners.txt new file mode 100644 index 0000000..7226b3a --- /dev/null +++ b/data/pages/yggdrasil/address_miners/address_miners.txt @@ -0,0 +1,7 @@ +====== Майнеры адресов Yggdrasil ====== + +**Майнеры адресов Yggdrasil** -- специальные программы, предназначенные для генерирования (майнинга) адресов Yggdrasil, удовлетворяющих определенным условиям (например, содержащих определенную последовательность символов в строковом представлении). + +===== Статьи внутри раздела ===== + +{{indexmenu>:yggdrasil:address_miners}} \ No newline at end of file diff --git a/data/pages/yggdrasil/address_miners/simpleygggen.txt b/data/pages/yggdrasil/address_miners/simpleygggen.txt new file mode 100644 index 0000000..e975bef --- /dev/null +++ b/data/pages/yggdrasil/address_miners/simpleygggen.txt @@ -0,0 +1,271 @@ +====== SYG - Майнер адресов на bash ====== + +SimpleYggGen -- майнер адресов Yggdrasil, написанный на bash. Позиционировался, как простой инструмент, с которым справится даже начинающий пользователь Linux. Позволяет добывать адреса с красивыми сочетаниями символов. Работает с регулярными выражениями. Проект поддерживался пользователем [[user:acetone|acetone]]. Первый релиз датируется 23 апреля 2020 года.\\ +Причина малой скорости работы скрипта кроется в обращении операционной системы к бинарному файлу Yggdrasil. Скрипт постоянно запрашивает у него конфигурационный файл, после чего проверяет полученный адрес через стандартный функционал того же бинарного файла.\\ +Код распространяется свободно, номинально под лицензией GPL v3 or later. + +**Notabene**: В настоящее время использование скрипта SYG на bash не имеет практического смысла. Он остался в истории, как идеологический прородитель, когда в игру вступили майнеры, написанные на [[yggdrasil:address_miners:simpleygggen_cpp|C++]] и [[yggdrasil:address_miners:simpleygggen_go|Go]]. + +{{:syg:v2.4.png}} + +==== Механика процесса ==== +Для работы скрипта, в системе должен быть установлен клиент Yggdrasil. В конечном счете майнинг сводится к получению файлов конфигурации Yggdrasil и их проверке на совпадение адреса с искомым фрагментом. Цель (target) задается при запуске скрипта. Обработка осуществляется по параметру EncryptionPublicKey.\\ + +=== Наглядный пример === + +# Получаем новый файл конфигурации со случайным адресом. Записываем его в переменную "tempconf". +tempconf=$(yggdrasil -genconf) + +# Извлекаем из конфига значение EncryptionPublicKey в одноименную переменную. +EncryptionPublicKey=$(echo $tempconf | grep -w -o -E "EncryptionPublicKey: [0-9a-f]{64}") + +# Проверяем адрес, ищем совпадение с искомой строкой ($target). +if ( echo $EncryptionPublicKey | yggdrasil -address -useconf | grep -i -E "$target") + +# Если есть совпадение, извлекаем из конфига EncryptionPrivateKey. +then EncryptionPrivateKey=$(echo $tempconf | grep -w -o -E "EncryptionPrivateKey: [0-9a-f]{64}") + +# Затем удачный конфиг записывается на диск. + + +==== Скачать ==== +Для практического использования скрипта и более подробного изучения кода, можете сохранить скрипт, кликнув по заголовку блока: + +#!/bin/bash + +#---------------------------------------------------------------# +# RU: Пожелания и правки присылайте на hash.null @acetone # +# EN: Send wishes and corrections to the hash.null @acetone # +# # +# SimpleYggGen v2.4, acetone, 2020. Russia. # +#---------------------------------------------------------------# + +#-----------------КОНФИГУРАЦИЯ / CONFIGURATION------------------# +# Set Yggdrasil binary path: +# for Linux: +YGGBIN=/usr/bin/yggdrasil +# for Windows (running that script with MSYS2 (msys2.org): +#YGGBIN="/c/Program Files/Yggdrasil/yggdrasil.exe" +# +# To enable non-special names uncomment that line: +#nonspecial=true +# +# To enable system testing uncomment that line: +runtest=true +# +#------------------------КОНЕЦ / END----------------------------# + +#---------------------------------------------------------------# +#--ЛЮБЫЕ ИЗМЕНЕНИЯ В КОДЕ НИЖЕ ВЫ ДЕЛАЕТЕ НА СВОЙ СТРАХ И РИСК--# +#-----ANY CHANGES IN THE CODE BELOW YOU DO AT YOUR OWN RISK-----# +#---------------------------------------------------------------# + +test () { + timestart=$(date '+%s') + + for (( c=1; c<101; c++ )); do + tempconf=$("$YGGBIN" -genconf) + EncryptionPublicKey=$(echo $tempconf | grep -w -o -E "EncryptionPublicKey: [0-9a-f]{64}") + if [[ $c = 102 ]]; then + echo '' > /dev/null + fi + echo -n -e "\e[36m Analyzing $c%\e[0m" \\r + done + + timestop=$(date '+%s') + final=$(($timestop-$timestart)) + + if [[ "$final" -le "1" ]]; then + color="\e[36m" + elif [[ "$final" -le "2" ]]; then + color="\e[32m" + elif [[ "$final" -le "3" ]]; then + color="\e[33m" + else + color="\e[31m" + fi + + echo -n -e "$color Testing taken $final second(s)\e[0m\n\n" +} + +log () { + echo -e "Yggdrasil addresses list\\n$(date '+%Y-%m-%d %H:%M:%S')"\\n > ./syg.log + + if ( ls ./sygX* 2> /dev/null | grep 2 &> /dev/null ); then + ls ./sygX* 2> /dev/null | tr -d syg | tr _ : | tr -d X >> ./syg.log 2> /dev/null + echo '' >> ./syg.log + liness=$(wc ./syg.log -l | cut -f1 -d' ' 2> /dev/null); + tail -n $(($liness-2)) ./syg.log 2> /dev/null + echo -e "\e[32m Names saved to syg.log\e[0m\n" + else + echo -e "\e[31m sygX* file not exist\e[0m\n" + main + exit 0 + fi +} + +tars () { + log + tar -cf ./syg$(date '+%Y%m%d_%H%M').tar ./sygX* syg.log 2> /dev/null + echo -e "\e[32m All addresses archived\e[0m\n" +} + +intro () { + clear + echo -e "\e[38m"' ' + echo -e " ▒▒▒▒▒▒ ▒ ▒ ▒▒▒▒▒▒" + sleep 0.05 + echo -e " ▒ ▒ ▒ ▒" + sleep 0.05 + echo -e " ▒▒▒▒▒▒ ▒▒▒▒▒▒ ▒ ▒▒▒" + sleep 0.05 + echo -e " ▒ ▒ ▒ ▒" + sleep 0.05 + echo -e " ▒▒▒▒▒▒ ▒▒▒▒▒▒ ▒▒▒▒▒▒\e[0m" + echo -e "\e[38m\n © SimpleYggGen v2.4\n acetone, 2020\e[0m\n" +} + +main () { + circle=0 + randomfortune=0 + sleep 0.03 + echo -e -n ' Target'"$color » \e[0m" + read userinput + + if [[ $userinput = '' ]]; then + target=:: + elif [[ $userinput == [lL][oO][gG] ]]; then + log + sleep 0.3 + main + elif [[ $userinput == [tT][aA][rR] ]]; then + tars + sleep 0.3 + main + elif [[ $userinput == [tT][aA][rR][dD][eE][lL] ]]; then + tars + rm -r ./sygX* 2> /dev/null + echo -e "\e[33m Original files deleted\e[0m\n" + sleep 0.3 + main + elif [[ $userinput == *[g-zG-Zа-яА-Я\;\+\&\#\~\_\%\=\/]* ]]; then + sleep 0.03 + echo -e " \e[31mIncorrect input\e[0m" \\n + sleep 0.03 + main + else + target=$userinput + fi + + if [[ $nonspecial == "true" ]]; then + dirname=$(echo $target | tr \* S | tr \| I | tr : C | tr ^ U | tr $ D | tr - M | tr [ L | tr ] J | tr . T) + else + dirname=$target + fi + + clear + echo -e \\n" [$color$target\e[0m] $(date '+%Y.%m.%d %H:%M:%S')\n" + tput civis + for ((;;)); do + tempconf=$("$YGGBIN" -genconf) + EncryptionPublicKey=$(echo $tempconf | grep -w -o -E "EncryptionPublicKey: [0-9a-f]{64}") + + if ( echo $EncryptionPublicKey | "$YGGBIN" -address -useconf | grep -i -E "$target" &> /dev/null ); then + EncryptionPrivateKey=$(echo $tempconf | grep -w -o -E "EncryptionPrivateKey: [0-9a-f]{64}") + yggsubnet=$(echo $EncryptionPublicKey | "$YGGBIN" -subnet -useconf) + yggaddress=$(echo $EncryptionPublicKey | "$YGGBIN" -address -useconf) + + mkdir ./sygX$dirname &> /dev/null + sygnamefile=$(echo $yggaddress | tr : _) + echo -e "# Address: $yggaddress\n# Subnet: $yggsubnet\n\n# Change it to yggdrasil.conf\n $EncryptionPublicKey\n $EncryptionPrivateKey\n\n# SimpleYggGen v2.4 [$(date '+%Y-%m-%d %H:%M:%S')] \n# Check new version: https://cloud.disroot.org/s/TA63PBsQ6Z7dfGW" > ./sygX$dirname/$sygnamefile + randomfortune=$(($randomfortune+1)) + fi + + circle=$(($circle+1)) + echo -n -e " \e[35m$circle/\e[0m$randomfortune \e[32m$yggaddress\e[0m " \\r + done +} + +# Start script execution +intro + +# Run test if enabled +if [[ $runtest == "true" ]]; then + test +else + color="\e[37m" +fi + +# Start interactive +main + + +Для использования, после загрузки необходимо сделать файл исполняемым: + +$ chmod +x ./syg2.4.sh + +И запустить (права суперпользователя не требуются): + +$ ./syg2.4.sh + +==== Регулярные выражения ==== +Регулярные выражения - это набор символов, которые наделены особыми свойствами. Они позволяют сделать процесс майнинга более нацеленным на нужный результат. Это позволяет избежать выдачи похожих, но неподходящих адресов. + * Звездочка "*" означает любое количество символов в строке, предшествующих "звездочке", в том числе и нулевое число символов. Выражение "233*" - означает 2 + один или более символов "3" + любые другие символы: 23, 233, 23355, и так далее. + * Точка "." означает не менее одного любого символа. Выражение "13." будет означать 13 + по меньшей мере один любой символ (включая пробел): 1133, 11333, но не 13 (отсутствуют дополнительные символы). + * Крышка "^" означает начало строки. + * Знак доллара "$" в конце регулярного выражения соответствует концу строки. + * Квадратные скобки "[ ]" предназначены для задания подмножества символов. Квадратные скобки, внутри регулярного выражения, считаются одним символом, который может принимать значения, перечисленные внутри этих скобок. Выражение "[abc]" соответствует одному из символов a, b или c. Выражение "[a-f]" соответствует одному из символов в диапазоне от a до f, включительно. Выражение "[a-f0-9]" соответствует одному из символов латиницы от "a" до "f" или цифре. Выражение "[^b-f]" соответствует любому символу, кроме символов из диапазона от "b" до "f", включительно. В данном случае крышка означает отрицание. + +Для проверки регулярного выражения перед майнингом его можно проверить следующим образом: + +echo примерный_адрес_который_вы_хотите | grep -E "Регулярное_выражение" + +Если выдача команды оказалась пустой, по вашему регулярному выражению искомый адрес обнаружен не будет. +==== Примеры ==== +=== Практические примеры регулярных выражений: === +''^...:420:'' # Привязка к началу строки, первые три символа - любые, двоеточие, 420, двоеточие.\\ +''^2.[a-f]'' # Привязка к началу строки, двойка - первая, затем любой символ, третий символ - любая //цифра// от "a" до "f".\\ +''1dea$'' # Привязка к концу строки.\\ +''^...:[0-9]{1,4}:[0-9]{1,4}:[0-9]{1,4}:[0-9]{1,4}:[0-9]{1,4}:[0-9]{1,4}:[0-9]{1,4}$'' # Адрес, состоящий только из цифр от 0 до 9.\\ +''^...:[a-f]{1,4}:[a-f]{1,4}:[a-f]{1,4}:[a-f]{1,4}:[a-f]{1,4}:[a-f]{1,4}:[a-f]{1,4}$'' # Адрес, состоящий только из //букв// от a до f. +=== Примеры майнинга === +''::'' # Адрес с двойным двоеточием (является целью по умолчанию).\\ +На майнинг указанного адреса ушли сотни миллионов циклов (около месяца в несколько потоков).\\ +''200::c84:77b0:f66d:b47e:64c7'' + + +''^...:ace:'' # Второй разряд адреса "ace".\\ +Такие адреса находились примерно раз в 20-40 минут, каждый оценивался визуально. В результате майнинга в течение нескольких суток были сохранены адреса с [[yggdrasil:subnet_setting|подсетью]] следующего вида:\\ +'' +300:ace:1ace:dd67::\\ +300:ace:1dea:319f::\\ +300:ace:ac1d:1f10::\\ +'' + +Конечно же это баловство, но мелочь, а приятно ;-) +==== Дополнительные функции ==== +В версии 2.3 //(релиз 29.05.2020)// появилось три функции, которые делают работу с полученными файлами конфигурации более удобной. + * ''log'' - сохраняет в файл имена всех имеющихся адресов + * ''tar'' - создает лог и упаковывает все имеющиеся адреса в один архив + * ''tardel'' - создает лог, упаковывает конфиги в архив и удаляет оригинальные файлы +Данный функционал полезен для крупномасштабного майнинга. +==== Специальные символы в именах ==== +Для замены специальных символов в названии файлов и папок, создаваемых майнером, необходимо раскомментировать строку ''special=false''. В некоторых ситуациях это может оказаться полезным. +Таблица замены спецсимволов: +^ Спецсимвол ^ Замена ^ Мнемоника ^ +| * | S | Star | +| Вертикальная черта | I | | +| : | C | Colon | +| Крышка | U | Up | +| $ | D | Dollar | +| - | M | Minus | +| [ | L | | +| ] | J | | +| . | T | Точка, по-русски | + +===== Ссылки ===== + * [[yggdrasil:address_miners:simpleygggen_cpp|SimpleYggGen-C++]] + * [[yggdrasil:address_miners:simpleygggen_go|SimpleYggGen-Golang]] от tdemin + * [[https://github.com/vikulin/ygg_me_nice_ipv6|YggMeNice (Golang)]] от vikulin + +''**Спасибо:**'' R4SAS \ No newline at end of file diff --git a/data/pages/yggdrasil/address_miners/simpleygggen_cpp.txt b/data/pages/yggdrasil/address_miners/simpleygggen_cpp.txt new file mode 100644 index 0000000..35e4864 --- /dev/null +++ b/data/pages/yggdrasil/address_miners/simpleygggen_cpp.txt @@ -0,0 +1,28 @@ +======SYG-CPP - Майнер адресов на C++====== + +^ :!: Внимание! ^ +| С выходом Yggdrasil v. 0.4 изменился способ генерирования IPv6-адресов Yggdrasil. Раньше использовались хеши ключей curve25519, в версии 0.4.x используются ключи ed25519. Данная статья писалась еще во времена версий 0.3.x.\\ \\ Источник: https://yggdrasil-network.github.io/2021/06/19/preparing-for-v0-4.html| + +SYG-CPP - это майнер адресов Yggdrasil, написанный на языке C++. По своей сути является логическим продолжением майнера [[yggdrasil:address_miners:simpleygggen|SYG, выполненного на bash]]. Разработка ведется пользователем [[user:acetone|acetone]], однако сделать свой вклад в развитие может каждый желающий, предложив свои изменения в [[https://notabug.org/acetone/SimpleYggGen-CPP|репозитории проекта]] (GitHub не используется принципиально). Майнер поддерживает три основных режима работы: майнинг по паттерну, т.е. явному вхождению символов в конечном адресе (например, двойное двоеточие или ''cafe:babe'' и т.п.), режим майнинга высоких адресов (для понимания зачем нужны высокие адреса, читайте [[yggdrasil:spoofing_theory|эту]] статью) и поиск по регулярному выражению, а также гибридный режим: одновременный поиск по имени и высоте. В версии ''3.3 "worldwide"'' была добавлена возможность работы с meshname-доменами: их отображение в общем выводе с IPv6 адресом и ключами, а также майнинг данных доменов по паттерну и регулярному выражению. В версии ''3.4 "subnetlover"'' появился ряд дополнительных функций: конвертация IP в meshname-домен и обратная конвертация meshname-домена в IPv6. + +Первый релиз ''v1.0-hothead'' датируется 11 августа 2020 года. Сравнительный тест с [[yggdrasil:address_miners:simpleygggen_go|майнером на Golang]] в режиме майнинга по имени показал стабильное преимущество SYG-CPP примерно на 15% (бенчмарк первых версий, 11.08.2020). Версия syg-cpp 3.0 "Vort" имеет преимущество в ~100 раз. По некоторым данным, разработка майнеров на Golang полностью остановлена, т.к. их максимальная оптимизация дает около 25% от производительности аналогичного продукта на C++. На момент версии SYG-CPP 3.X перспективу разработки имеет только майнер на видеокартах (CUDA, OpenCL), т.к. дальнейшая оптимизация майнинга на процессоре не даст значительного прироста. Один такой майнер анонсирован пользователем под ником frodo_buggins: [[https://notabug.org/frodo_buggins/ygg-brute|ссылка]] на git-репозиторий. + +**Скачать** майнер можно на [[https://notabug.org/acetone/SimpleYggGen-CPP/releases|странице релизов]] в интернете, либо с [[http://[324:9de3:fea4:f6ac::ace]/files/software/yggdrasil_address_miners/sygcpp/|внутрисетевого репозитория]]. +======Механика процесса====== +Эта глава объясняет базовую механику работы майнера SYG-CPP. Также она призвана пояснить доступным языком (насколько это возможно) алгоритм образования IPv6 адресов Yggdrasil, т.к. читать оригинальный код на Golang с англоязычными комментариями может оказаться затруднительно. + +Узлы сети сообщаются друг с другом путем обмена открытыми ключами шифрования. Из открытого ключа каждый узел по определенному алгоритму самостоятельно выводит IPv6 адрес абонента на другом конце. Передача информации на каждый отдельный адрес шифруется соответствующим публичным ключом. Благодаря этому Yggdrasil считается защищенной меш-сетью со сквозным шифрованием. + +{{yggdrasil:yggdrasil-address-algorithm.png?600 }} + +Необходимые алгоритмы для создания адреса: **x25519** (ассиметричное шифрование на эллиптической кривой Curve25519), **SHA512** (хеш-сумма), и функция преобразования битовой информации в IPv6. В SYG-CPP для получения пары ключей и выведения хеша от открытого ключа используется библиотека libsodium (до версии 2.0 использовалась библиотека OpenSSL. От нее отказались, т.к. libsodium показывает результат почти что в два раза лучше, т.е. быстрее). С версии 3.0 используются переписанные библиотечные функции.\\ Иллюстрация наглядно отображает процесс формирования адреса из ключа. Учитывая, что в режиме майнинга адресов высокого порядка функция преобразования битовой информации в завершенный IPv6 адрес происходит только при нахождении наибольшего количества лидирующих единиц в хешэ, т.е. фактически при майнинге работает только урезанная функция, считающая лидирующие единицы, майнинг адресов высокого порядка в происходит быстрее. + +На выходе майнер выдает связку ключей и IPv6 адрес с инструкцией по его применению: для этого требуется изменить ''EncryptionPublicKey'' и ''EncryptionPrivateKey'' в файле конфигурации Yggdrasil (C:\ProgramData\Yggdrasil\yggdrasil.conf или /etc/yggdrasil.conf). +=====Скриншоты===== +{{syg:sygcpp-4.0-mesh.png}} +{{syg:sygcpp-4.0-help.png}} +=====Ссылки===== +[[https://notabug.org/acetone/SimpleYggGen-CPP|Git]]\\ +[[https://simpleygggen.sourceforge.io/|Sourceforge]] + +//Пользователи, сделавшие вклад в развитие SimpleYggGen-CPP: orignal, lialh4, R4SAS, Vort, filarius// \ No newline at end of file diff --git a/data/pages/yggdrasil/address_miners/simpleygggen_go.txt b/data/pages/yggdrasil/address_miners/simpleygggen_go.txt new file mode 100644 index 0000000..644a98c --- /dev/null +++ b/data/pages/yggdrasil/address_miners/simpleygggen_go.txt @@ -0,0 +1,46 @@ +====== SimpleYggGen-Go ====== + + +SimpleYggGen-Go — перереализация bash-скрипта [[yggdrasil:address_miners:simpleygggen|SimpleYggGen]] на языке программирования Go, позволяющая работать в несколько потоков и более производительная за счет использования родных библиотек криптографии из Yggdrasil и нативного кода. Основана на программе ''cmd/genkeys'' из Yggdrasil, изначально предназначенной для генерации более устойчивых к коллизиям ключей шифрования. + +Текущая версия — **v0.2.1**. + +За счет нативного кода и отсутствия затрат на запуск Yggdrasil и grep для выборки адресов дает в несколько тысяч раз большую производительность — на майнинг 100 000 000 ключей уходит 27 минут в 8 потоков на AMD Ryzen 1700X. + +Исходный код программы доступен под лицензией MIT. + +===== Установка ===== + +При установленном компиляторе Go: + + +go get -u -v github.com/tdemin/syg_go + + +Также собранные бинарники можно загрузить со [[https://git.tdem.in/tdemin/syg_go/releases|страницы релизов]] или [[http://[324:9de3:fea4:f6ac::ace]/files/software/yggdrasil_address_miners/syg_go/|внутрисетевого репозитория]]. Если вы пользуетесь Arch Linux, вы можете установить программу [[https://aur.archlinux.org/packages/syg_go|из AUR]] одной командой: + + +yay -S syg_go + + +===== Использование ===== + +Майнер выполняется в терминале и выводит туда статистику выполнения, а также смайненные ключи. + +{{:syg:ygg_syg_go.png?400|}} + +У майнера несколько конфигурабельных опций командной строки: ''-threads'', которой устанавливается максимальное число потоков (по умолчанию равно количеству потоков вашего процессора), ''-iter'', с помощью которого задается количество итераций, после которого выводится прогресс (по умолчанию каждые 100 000 итераций для тестов производительности, на современных процессорах имеет смысл задавать в ''100000000'' или выше) и ''-regex'', после которой идет задание целевого регулярного выражения, на соответствие которому проверяется адрес (по умолчанию ''::''). Смысл регулярного выражения тот же, что и у оригинального SimpleYggGen. + +С версии 0.1.1 программа перереализует функции вывода адреса для улучшения производительности относительно кода Yggdrasil, включить использование только оригинального кода из Yggdrasil можно опцией ''-original''. С версии 0.1.3 можно также использовать опцию ''-highaddr'', которая устанавливает режим майнинга т.н. "высоких" адресов (т.е. более устойчивых к коллизиям: чем выше начальные биты адреса, тем более устойчив адрес). + +Вывод майнера можно сохранять в файл одновременно с выводом в терминал, как это делается, зависит от используемой вами ОС. Например, в *nix-системах можно воспользоваться следующей командой: + + +syg_go | tee syg.txt + + +===== Ссылки ===== + + * [[https://github.com/tdemin/syg_go|Репозиторий проекта]] + * [[https://github.com/tdemin/syg_go/releases|Страница загрузок]] + * [[https://aur.archlinux.org/packages/syg_go|Страница в AUR]] \ No newline at end of file diff --git a/data/pages/yggdrasil/address_miners/ygglkan.txt b/data/pages/yggdrasil/address_miners/ygglkan.txt new file mode 100644 index 0000000..b344fbc --- /dev/null +++ b/data/pages/yggdrasil/address_miners/ygglkan.txt @@ -0,0 +1,11 @@ +====== Ygglkan ====== + +**Ygglkan** - майнер, написанный на [[wpru>Rust_(язык_программирования)|rust]] с использованием API [[wpru>Vulkan|vulkan]]. + +По [[https://t.me/Yggdrasil_ru/302014|сообщению]] автора, на AMD Radeon RX 6800 XT майнер выдаёт 3 мегахеша. + +====== Ссылки ====== + +Проект на GitHub (EN): https://github.com/averyanalex/ygglkan \\ + +~~DISCUSSION~~ diff --git a/data/pages/yggdrasil/admin_api.txt b/data/pages/yggdrasil/admin_api.txt new file mode 100644 index 0000000..fd9db83 --- /dev/null +++ b/data/pages/yggdrasil/admin_api.txt @@ -0,0 +1,194 @@ +====== API для администрирования ====== + +Сокет администратора предоставляет интерфейс для запросов информации и настройки [[Yggdrasil:Yggdrasil|Yggdrasil]] во время выполнения. По умолчанию Yggdrasil прослушивает подключения администратора на localhost: 9001 (параметр AdminListen в [[yggdrasil:config_russian|конфигурационном файле]]). + +===== Утилита для управления ===== + +Утилита yggdrasilctl предоставляет удобный интерфейс CLI для сокета администратора Yggdrasil. Она может подключаться как к локальным, так и к удаленным экземплярам Yggdrasil и принимать те же команды, что описаны ниже. Каждое поле задается в формате field=value. + +Примеры использования: + +yggdrasilctl getDHT +yggdrasilctl getPeers + +Для получения списка поддерживаемых команд наберите: + +yggdrasilctl list + +Чтобы выполнить действие на удаленном узле Yggdrasil, укажите параметр -endpoint: + +yggdrasilctl -endpoint=tcp://10.0.0.1:9001 getPeers +yggdrasilctl -endpoint=unix:///var/run/yggdrasil.sock getDHT + +Чтобы получить ответ в формате JSON вместо "дружественного" вывода, укажите параметр -json: + +yggdrasilctl -json getPeers + +===== Сокет администратора ===== + +Сокет администратора Yggdrasil для запросов и ответов использует формат JSON. + +Запрос должен быть: + + * корректной строфой JSON + * должен завершаться символом новой строки (\n) + +После получения запроса возвращается ответная строфа. + +==== Запрос ==== + +Структура типичного запроса выглядит следующим образом: + +{ + "request": "XXX", + "arguments": { + "baz": "qux" + } +} + +Запрос: + + * //должен// содержать поле "request" (string) - значение содержит команду запроса + * //может// иметь поле "keepalive" (bool) - значение true или false, указывающее, следует ли поддерживать соединение для дальнейших запросов (если не указано, Yggdrasil закроет соединение администратора после возврата ответа) + * //должен// содержать другие обязательные поля для конкретного запроса + * //может// содержать другие необязательные поля для запроса + +===Пример выполнения запроса с помощью nc через unix-сокет=== + +echo "{\"request\": \"debug_remotegetself\", \"arguments\": {\"key\": \"00000275cb3ab9ee8d285ecaef5a0d82fbd6d19edc5bc33617094232fd047964\"}}" | nc -U /var/run/yggdrasil.sock + +==== Ответ ==== + +Типичный ответ имеет такую структуру: + +{ + "request": + { + "request": "XXX", + "foo": "bar", + "baz": "qux" + }, + + "response": + { + }, + + "status": "success" +} + +Ответ: + + * //всегда// содержит поле "request" (string), которое содержит тело исходного запроса + * //всегда// содержит поле "status" (string), которое может сожержать либо "success" (успех), либо "error" (ошибка) + * //дополнительно// может содержать секцию "response", который содержит данные ответа на запрос + * //дополнительно// может содержать поле "error" (string), содержащее текст ошибки + +==== Типы запросов ==== + +Поле "request" содержит команду, предписывающую, какой запрос следует выполнить. + +=== getDHT === + +Не содержит никаких дополнительных полей запроса. + +Возвращает известные узлы в DHT. + + * key (string) содержит PublicKey удаленного узла + * port (int) порт + * rest (int) + +=== getPeers === + +Не содержит никаких дополнительных полей запроса. + +Возвращает одну или несколько записей, содержащих информацию об активных одноранговых сеансах. Первая запись обычно относится к текущему узлу. + +Для каждого IPv6-адреса: + + * key (string) содержит PublicKey удаленного узла + * port (uint8) номер локального порта + * coords ([]int) содержит координаты узла в дереве + * remote (string) содержит URI удаленного узла + + +=== addPeer === + +Ожидает: + + * uri (string) адрес добавляемого узла в стандартном формате URI, используемом в файле конфигурации, т. е. ''%%tcp://a.b.c.d:e%%'' + +Добавляет новый узел. + +Возвращает: + * Ноль или более успешно добавленных строк URI в секции «added» + * Ноль или более неудачных URI в секции «not_added» + +=== removePeer === + +Ожидает: + + * port (uint8) порт удаляемого узла, его можно определить с помощью getPeers + +Удаляет существующий узел. + +Возвращает: + * Ноль или более строк с успешно удаленными портами в секции «removed» + * Ноль или более неудачных портов в секции «not_removed» + +=== getSelf === + +Не ожидает никаких дополнительных полей запроса. + +Возвращает одну запись, содержащую информацию о текущем узле Yggdrasil. + +Для текущего адреса IPv6: + + * key (string) содержит PublicKey текущего узла + * build_name (string) содержит имя сборки, если оно доступно (например, yggdrasil, yggdrasil-Development) + * build_version (string) содержит версию сборки, если она доступна (например, 0.3.0, 0.2.7-0091) + * coords ([]int) содержит координаты узла в дереве + * subnet (string) содержит маршрутизируемую подсеть IPv6 для данного хоста + +=== getSessions === + +Не ожидает никаких дополнительных полей запроса. + +Возвращает ноль или более записей, содержащих информацию об открытых сеансах между текущим узлом Yggdrasil и другими узлами. Открытые сеансы говорят о том, что недавно был обмен траффиком с удаленным узлом. + +Для каждого IPv6-адреса: + + * key (string) содержит PublicKey удаленного узла + +=== getTunTap === + +Не ожидает никаких дополнительных полей запроса. + +Возвращает одну запись, содержащую информацию об адаптере TUN/TAP текущего узла. + +Для каждого адаптера: + + * mtu (uint8) содержит MTU локального адаптера TUN/TAP + + +=== getMulticastInterfaces === + +Не ожидает никаких дополнительных полей запроса. + +Возвращает ноль или более строк, содержащих включенные многоадресные интерфейсы. + +Если возвращаются ноль строк, то подразумевается, что многоадресный пиринг не разрешен ни на одном интерфейсе. + +=== getNodeInfo === + +Ожидает: + + * key=строка, содержащая hex-кодированный открытый ключ удаленного узла, в том же формате, что и, например, подробный вывод ответа из getDHT + +Просит удаленный узел ответить с его nodeinfo. + +Возвращает секцию nodeinfo. Данные могут быть в любом формате, могут содержать любые ключи. + +====== Ссылки ====== +Admin API (EN): https://yggdrasil-network.github.io/admin.html + +~~DISCUSSION~~ diff --git a/data/pages/yggdrasil/alt_clients/alt_clients.txt b/data/pages/yggdrasil/alt_clients/alt_clients.txt new file mode 100644 index 0000000..ea3bece --- /dev/null +++ b/data/pages/yggdrasil/alt_clients/alt_clients.txt @@ -0,0 +1,4 @@ +====== Альтернативные клиенты ====== + +===== Статьи внутри раздела ===== +{{indexmenu>:yggdrasil:alt_clients}} \ No newline at end of file diff --git a/data/pages/yggdrasil/alt_clients/popura.txt b/data/pages/yggdrasil/alt_clients/popura.txt new file mode 100644 index 0000000..ee90dd6 --- /dev/null +++ b/data/pages/yggdrasil/alt_clients/popura.txt @@ -0,0 +1,20 @@ +====== Альтернативный клиент Popura ====== + +Popura - альтернативный клиент сети Yggdrasil. + +Popura использует тот же основной API Yggdrasil, но добавляет некоторые полезные и экспериментальные функции, которых не достаёт оригинальному клиенту. + +Особенности Popura: + + *Автоматический интернет-пиринг + *Объявление /64 префикса в локальной сети + *Система наименований Meshname + *Сбор информации из DHT в admin API + +====== Ссылки ====== + +Офф. git-репозиторий: https://github.com/popura-network/Popura + +Telegram-канал: https://t.me/PopuraChan + +~~DISCUSSION~~ \ No newline at end of file diff --git a/data/pages/yggdrasil/alt_clients/riv-mesh.txt b/data/pages/yggdrasil/alt_clients/riv-mesh.txt new file mode 100644 index 0000000..0a506d4 --- /dev/null +++ b/data/pages/yggdrasil/alt_clients/riv-mesh.txt @@ -0,0 +1,19 @@ +====== RiV-mesh ====== + +**RiV-mesh** — [[wpru>Форк|форк]] [[Yggdrasil:yggdrasil]]. + +Отличия от исходного проекта: + + * использует [[wpru>REST|REST]], вместо [[yggdrasil:admin_api|сокета администратора и утилиты администрирования]] + * по-умолчанию использует адреса из диапазона ''%%fc00::/7%%'' (доступа к адресам Yggdrasil соответственно не будет (см. о переключении ниже)) + * разработаны установочные пакеты для различных типов устройств ([[wpru>NAS|NAS]], [[wpru>PC|PC]], мобильные устройства) + * имеет графический интерфейс управления + +На данный момент RiV-mesh можно переключить на сетевое адресное пространство Yggdrasil (''%%0200::/7%%'') с помощью параметра ''%%NetworkDomain.Prefix 2%%'' в конфигурационном файле mesh.conf. + +====== Ссылки ====== + +Репозиторий проекта на GitHub (EN): https://github.com/RiV-chain/RiV-mesh \\ +Документация RiV-mesh (EN): https://riv-chain.github.io/RiV-mesh/ \\ + +~~DISCUSSION~~ \ No newline at end of file diff --git a/data/pages/yggdrasil/bittorrent/bittorrent.txt b/data/pages/yggdrasil/bittorrent/bittorrent.txt new file mode 100644 index 0000000..e3e7cef --- /dev/null +++ b/data/pages/yggdrasil/bittorrent/bittorrent.txt @@ -0,0 +1,37 @@ +====== BitTorrent ====== + +**BitTorrent** - пиринговый ([[wpru>Одноранговая_сеть|P2P]]) сетевой протокол для обмена файлами по сети. + +Протокол имеет ряд преимуществ перед моделью "клиент-сервер", в виду своей децентрализованной p2p модели: главные из которых - безотказность работы при отключении отдельно взятого узла и снижение затрат на обслуживающие сервера данных. +Поскольку данные хранятся и распространяются между многими хранилищами, протокол также подразумевает снижение нагрузки на пропускной канал. + +Во многом, эти качества сделали технологию популярной в сфере обмена мультимедийными файлами. +В ряде стран введено ограничение на частное использование BitTorrent посредством сети интернет, таким образом, возможность получить доступ к файлам, используя этот протокол, может быть ограничена или недоступна. + +===== Yggdrasil ===== + +Протокол Yggdrasil обеспечивает защищенный канал связи, устойчивый к блокировкам глобальных маршрутизаторов а также мониторинга трафика со стороны провайдера (например, факт автоматической отправки анонсов на сомнительные ресурсы, при открытии файла .bittorent). +Для внутрисетевых сервисов, совмещение протоколов BitTorrent и Yggdrasil позволяет не привязываться к условиям ISP или VPS провайдера, DNS и других сервисов, обычно необходимых для работы протокола BitTorrent в сети интернет. + +Адрес узла Yggdrasil статичен и может использоваться в качестве URL анонс-сервера или пирингового узла, в том числе для построения перманентного DHT, при этом подлинность гарантируется приватным ключем обладателя и не имеет срока истечения. + +Для частного пользователя - это возможность заменить использование платных прокси-серверов и VPN. + +При подключении узлов посредством интернет, то есть наличием в цепи потключения [[https://publicpeers.neilalexander.dev/|транзитного пира]], +такому узлу будут известны только адреса и [[https://github.com/matrix-org/pinecone/wiki/2.-Spanning-Tree#coordinates| внутрисетевые координаты]] соединения. +Порт, заголовки, URI и другие данные - передаются в зашифрованном виде и известны только отправителю и получателю Yggdrasil локально. + +Пользователь может осуществлять уникальные настройки маршрутизации без или с привязкой к другим сетям и протоколам, комбинируя различные подходы и технологии приватности, например TOR и I2P. + + +===== Статьи внутри раздела ===== + +{{indexmenu>:yggdrasil:bittorrent}} + +===== Ссылки ===== + + * [[yggdrasil:sites_and_services:other_network_services#каталоги|Внутрисетевые каталоги]]\\ + * [[yggdrasil:sites_and_services:other_network_services#трекеры|Внутрисетевые трекеры]] + + * О BitTorrent на Wikipedia (RU): https://ru.wikipedia.org/wiki/BitTorrent\\ + * Узнать больше о соседе: https://iknowwhatyoudownload.com/ru/peer\\ diff --git a/data/pages/yggdrasil/bittorrent/jackett.txt b/data/pages/yggdrasil/bittorrent/jackett.txt new file mode 100644 index 0000000..746b86c --- /dev/null +++ b/data/pages/yggdrasil/bittorrent/jackett.txt @@ -0,0 +1,48 @@ +====== Jackett ====== + +Jackett - это агрегатор и поисковый сервер торрентов с [[https://github.com/Jackett/Jackett|открытым исходным кодом]]. + +На момент написания материала, включает интеграцию 595 приватных и публичных торрент каталогов. + +По своей сути, это проксирующий серер для унификации и обработки поисковых запросов для [[#Интеграции|тематического ПО]], поддерживающего протокол [[https://torznab.github.io/spec-1.3-draft/index.html|Torznab]]. +Также, может использоваться как локальный сайт для поиска торрентов или интеграции в другие проекты, например [[https://habr.com/ru/articles/505814/|Telegram]]. + +Пользователю не требуется посещать разные торрент-каталоги, устанавливать для каждого из них плагин в свой торрент-клиент, а также посещать поисковые системы (блокирующие поисковые результаты по торрент тематике).\\ +Владельцам сайтов - не требуется создавать плагины для каждого программного обеспечения, достаточно интегрировать сервис для Jackett и поиск будет доступен для всех приложений, использующих этот сервер в качестве поискового провайдера. + +===== Установка ===== + +На официальном сайте, имеется подробная инструкция для разных операционных систем. + +Jackett можно запустить из бинарного файла //jackett// или скомпиллировать из исходников и добавить в системный сервис. + +После запуска службы, веб интерфейс доступен по адресу: + + +http://localhost:9117 + + +Для интеграции ПО, необходимо указать этот адрес в качестве URL провайдера, добавив ключ API (доступен в локальной веб-панели) +===== Интеграции ===== + + * Sonarr + * Radarr + * SickRage + * CouchPotato + * Mylar3 + * Lidarr + * DuckieTV + * [[yggdrasil:bittorrent:qbittorrent|qBittorrent]] + * Nefarious + +===== Ссылки ===== + +[[ https://github.com/Jackett/Jackett | Официальный сайт проекта ]] \\ + +===== Похожие проекты ===== + +[[ https://github.com/Prowlarr/Prowlarr | Prowlarr ]] - поддерживает те же сайты, что и Jackett\\ +[[ https://github.com/theotherp/nzbhydra2 | NZBHydra ]] - поддерживает больше функций, но содержит меньше сайтов \\ +[[ https://github.com/cardigann/cardigann | Cardigann ]] - последние обновления в 2020 году + +~~DISCUSSION~~ diff --git a/data/pages/yggdrasil/bittorrent/opentracker.txt b/data/pages/yggdrasil/bittorrent/opentracker.txt new file mode 100644 index 0000000..82053c7 --- /dev/null +++ b/data/pages/yggdrasil/bittorrent/opentracker.txt @@ -0,0 +1,69 @@ +====== Opentracker ====== + +Для организации трекера в сети [[yggdrasil:yggdrasil|Yggdrasil]], подойдет любой сервер, с поддержкой IPv6, одним из таких является [[https://erdgeist.org/arts/software/opentracker/|Opentracker]] - сервер с открытым исходным кодом, написанный на [[wpru>Си_(язык_программирования)|языке C]]. + +Opentracker не требует базы данных, так как вся информация о пирах хранится в оперативной памяти. + +===== Установка ===== + +Выполняем официальную инструкцию, предварительно раскомментировав строку ''-DWANT_V6'' в файле [[https://erdgeist.org/gitweb/opentracker/tree/Makefile|Makefile]], таким образом сервер будет оперировать исключительно IPv6 + + +cvs -d :pserver:cvs@cvs.fefe.de:/cvs -z9 co libowfat +cd libowfat +make +cd .. +# LEGACY: cvs -d:pserver:anoncvs@cvs.erdgeist.org:/home/cvsroot co opentracker +git clone git://erdgeist.org/opentracker +cd opentracker +make + + +===== Настройки доступа ===== + +Opentracker работает на порту 6969, поэтому для входящих подключений добавим правило в iptables с помощью утилиты ''ufw'' + + +ufw allow 6969 + + +В случае, если хотим обслуживать соединения исключительно в сети yggdrasil + + +ufw allow from 0200::/7 to any port 6969 + + +===== Автозапуск ===== + +Добавляем запуск сервера при старте системы, я использовал crontab + + +@reboot /path/opentracker -p 6969 -P 6969 + + +===== Проксирование ===== + +Для корректного приема подключений, opentracker должен быть скомпилирован с флагом: + + +-DWANT_IP_FROM_PROXY + + +При этом, прокси-сервер должен передавать серверу opentracker клиентский IP, иначе в качестве сидов будет передан локальный IP. + +О настройке проксирования трафика посредством nginx для различных нужд, например организации кластеров, можно почитать в разделе [[#Ссылки|ссылки]]. + +===== Подключение ===== + +Для тестирования раздачи, а также приёма подключений в сети Yggdrasil, торрент-клиент необходимо настроить для прослушивания локального интерфейса или адреса, иначе пир будет идентифицирован по IP сети по-умолчанию (Интернет) и передавать этот адрес трекеру. + +На примере [[yggdrasil:bittorrent:qbittorrent|qBittorrent]], сделать это можно в **Preferences** - **Advanced** - **Network interface** или **Optional IP address to bind to** + +При наличии фаервол, условием для проверки сидирования данных в сети Yggdrasil является открытие порта, определенного случайно или заданного явно в настройках BitTorrent клиента. + +Также, при смене параметров интернет-подключения (VPN или proxy), важно перезапустить BitTorrent клиент. +===== Ссылки ===== + + * [[https://erdgeist.org/arts/software/opentracker/|Официальный сайт]] + * [[https://radjik.livejournal.com/195622.html|О настройке проксирования трафика посредством nginx для организации кластеров]] + * [[yggdrasil:bittorrent:qbittorrent#встроенный_трекер|Торрент-трекер на базе qBittorrent]] \ No newline at end of file diff --git a/data/pages/yggdrasil/bittorrent/qbittorrent.txt b/data/pages/yggdrasil/bittorrent/qbittorrent.txt new file mode 100644 index 0000000..6c17857 --- /dev/null +++ b/data/pages/yggdrasil/bittorrent/qbittorrent.txt @@ -0,0 +1,338 @@ +====== qBittorrent ====== + +Свободный [[yggdrasil:bittorrent:bittorrent|BitTorrent]] клиент, написанный с использованием фреймворка Qt и библиотеки libtorrent. + +===== Пиринг в Yggdrasil ===== + +По-умолчанию, клиент прослушивает все сетевые интерфейсы и отлично подходит для обмена файлами в сети [[yggdrasil:yggdrasil|Yggdrasil]]. + +При необходимости, в графических настройках можно указать сетевой интерфейс явно, что особенно полезно для изолированного от других сетей сидирования. + +Для этого, достаточно указать интерфейс или адрес Yggdrasil из списка доступных: + +**Preferences → Advanced → Network interface** или **Optional IP address to bind to** + +Поскольку трафик между пирами Yggdrasil шифруется по-умолчанию, для снижения нагрузки, штатное шифрование можно отключить: + +**Preferences → BitTorrent → Privacy → Encription mode → Disable** + +===== Сидирование ===== + +Загружая файлы посредством протокола BitTorrent, принято делиться раздачей с другими. + +Для этого достаточно открыть порт в фаервол: + + +ufw allow from 0200::/7 to any port [Listening Port] + + +[Listening Port] - автоматически выданный клиентом порт в разделе **Preferences** → **Connections** + +Обратите внимание, что UPnP в контексте Yggdrasil не используется, поэтому включение этой опции никак не влияет на участие в сидинге. + +Не забываем анонсировать свою раздачу как минимум одному [[yggdrasil:sites_and_services:other_network_services#torrent|трекеру в сети Yggrasil]]. Сделать это можно выбрав соответствующий файл, во вкладке **Trackers** → **Add trackers...** + +Подробная настройка сид-сервера на базе qBittorrent, описана в разделе [[yggdrasil:bittorrent:seedbox#сервер_на_базе_qbittorrent|Сервер на базе qBittorrent]] + +===== Встроенный трекер ===== + +В клиенте qBittorrent имеется встроенный торрент-трекер, активировать который можно в разделе меню: + +**Advanced → Enable embedded tracker** + +Разрешаем покдключение к трекеру из сети Yggdrasil (по-умолчанию 9000): + + +ufw allow from 0200::/7 to any port 9000 + + +Затем, можно поделиться ссылкой вида http://[address]:9000/announce с другими или добавить в список [[yggdrasil:sites_and_services:other_network_services#torrent|внутрисетевых сервисов]] + +* Организовать легковесный торрент-трекер можно также с помощью специализированного ПО, например [[yggdrasil:bittorrent:opentracker|Opentracker]] + +===== Темы оформления ===== + +Клиент поддерживает [[https://github.com/qbittorrent/qBittorrent/wiki/List-of-known-qBittorrent-themes|альтернативные темы]] оформления в формате .qbttheme + +Следует учитывать, что темы для десктоп клиента несовместимы с клиентом Web UI.\\ +Для изменения внешнего вида Web UI, вместо файла .qbttheme, используются [[https://github.com/qbittorrent/qBittorrent/wiki/List-of-known-alternate-WebUIs|альтернативные клиенты]]. + +==== Альтернативный Web UI ==== + +Чтобы создать альтернативный Web UI, достаточно скопировать директорию + + +cp src/webui/www /somelocation/newtheme + + +Минимальный набор файлов представлен директориями: + + +/private - все страницы клиента, доступные после авторизации +/public - страница логина + + +После нужных изменений, путь к альтернативному клиенту можно в опции: + +**Preferences → Web UI → Use alternative Web UI** + +В последних версиях qBittorrent была убрана поддержка обработки мульти-язычных строк, поэтому придется удалить конструкции из файлов html авто-заменой + + +QBT_TR\((.*)\)QBT_TR\[CONTEXT=.*\] + + +Результатом можно поделиться на GitHub, добавив страницу проекта в список [[https://github.com/qbittorrent/qBittorrent/wiki/List-of-known-alternate-WebUIs|List of known alternate WebUIs]] + +==== Контрибуция ==== + +Для отправки PR в официальный репозиторий, чтобы исключить конфликты обновлений, желательно разбивать правки на отдельные ветки: + + +git checout master +git checkout -b my-webui-fix + + +Важно перед отправкой тестировать форматирование и валидность кода: + + +cd src/webui/www +npm install +npm run lint && npm run format + + +===== Сборка из исходников ===== + +Актуальные инструкции по компиляции, описаны в файле [[https://raw.githubusercontent.com/qbittorrent/qBittorrent/master/INSTALL|INSTALL]] а также разделе официальной [[https://github.com/qbittorrent/qBittorrent/wiki#compilation|Wiki]] + +При использовании последней версии из репозитория, с большой вероятностью, версии зависимостей в штатных репозиториях окажутся устаревшими.\\ +В частности, может дополнительно понадобиться сборка последних версий [[https://www.boost.org/|libboost]], [[https://www.libtorrent.org/|libtorrent]] и [[https://www.qt.io|Qt]]. + +==== Автоматическая сборка ==== + +Для сборки серверного клиента без графической оболочки (qbittorrent-nox), есть удобная утилита [[https://github.com/userdocs/qbittorrent-nox-static|qbittorrent-nox-static]], которая соберет все зависимости автоматически. + +Удобна тем, что также поддерживает различные платформы, в том числе ARM. +==== Ручная сборка ==== + +=== libboost === + +Официальная инструкция: + + +git clone --recursive https://github.com/boostorg/boost.git +cd boost +./bootstrap.sh +./b2 + + +Главная ветка включает межверсионные изменения последней версии.\\ +На практике, для разрешения зависимостей, используются [[https://github.com/boostorg/boost/releases|релизы]] (это касается и остальных пакетов). +Загружаем архив нужной версии и пропускаем шаг git/clone. + +Для глобальной установки: + + +./b2 install + + +=== libtorrent === + + +git clone --recurse-submodules https://github.com/arvidn/libtorrent.git +cd libtorrent +./configure +make + + +//* возможно для конфигурации потребуется указать путь к boost, например ./configure --with-boost-libdir=/usr/lib/arm-linux-gnueabihf/// + +Для глобальной установки: + + +make install + +=== qt === + +Необходимую для qBittorrent версию проще всего установить из официального онлайн-установщика (для загрузки потребуется регистрация на сайте). + +Также библиотеки (qtbase и qttools) можно загрузить [[https://download.qt.io/official_releases/qt/|из архива релизов]] и собрать вручную. + +В таком случае, важно учитывать наличие доступных ресурсов - для сборки qtbase понадобится порядка 3Гб ОЗУ и до 5Гб дискового пространства. + +Если есть возможность подключения внешнего накопителя, буфер памяти можно увеличить через файл подкачки: + + +fallocate -l 4G /mount/swapfile +chmod 600 /mount/swapfile +mkswap /mount/swapfile +swapon /mount/swapfile + + +по завершению: + + +swapoff /mount/swapfile +rm /mount/swapfile + + +При монтировании дополнительного дискового пространства посредством /etc/fstab, важно добавить флаги user,exec иначе при сборке cmake выдаст ошибку "Permission denied".\\ + +== qtbase == + +Процесс компиляции выглядит примерно так: + + +cd /mount/qtbase-everywhere-src-6.5.3 +cmake -B build +cmake --build build --parallel 4 + + +//* 4 - количество потоков//\\ + +Можно указать параметры для отдельных дистрибутивов, например Debian/Ubuntu + + +-DCMAKE_BUILD_TYPE=RelWithDebInfo +-DCMAKE_INSTALL_PREFIX=/usr/local + + +В этом примере, собранные файлы будут расположены в директории + + +/mount/qtbase-everywhere-src-6.5.3/build/lib/cmake + + +Для глобальной установки: + + +cd /mount/qtbase-everywhere-src-6.5.3/build +cmake --install . + + +== qttools == + +Как указано в файле dependencies.yaml, сборка требует предустановленной библиотеки qtbase, приступаем только если выполнили [[yggdrasil:bittorrent:qbittorrent#qtbase|предыдущий шаг]]. + + +cd /mount/qttools-everywhere-src-6.5.3 +qt-configure-module . +cmake --build . + + +Для глобальной установки: + + +cmake --install . + + +=== qbittorrent-nox === + +Для сборки серверной версии с помощью cmake - отключаем графическую среду флагом + + +-DGUI=OFF + + +Если пакеты Qt не установлены глобально, при компиляции qBittorrent с помощью cmake, нужно указать дополнительный флаг c префиксом директории: + + +-DCMAKE_PREFIX_PATH='/home/USERNAME/Qt/6.5.3/gcc_64/lib/cmake' + + +Подробнее о доступных опциях сборки и их значениями по-умолчанию, можно почитать в разделе [[https://github.com/qbittorrent/qBittorrent/wiki/#compilation|Compilation]] + + +git clone https://github.com/qbittorrent/qBittorrent.git +cd qBittorrent +cmake -B build -G "Ninja" -DCMAKE_BUILD_TYPE=Release -DGUI=OFF +cmake --build build + + +Готовый бинарный пакет qbittorrent-nox будет доступен в директории /build +===== Решение проблем ===== + +==== Потребление памяти ==== + +При большом количестве раздач, в qBittorrent 4, [[https://github.com/qbittorrent/qBittorrent/issues/16612|наблюдается]] проблема повышенного расхода памяти с активным использованием swap и зависанием интерфейса. + +Чтобы избежать перебоев в работе других служб, можно добавить лимиты на процесс, указав объем доступной памяти: + + +nano /etc/systemd/system/qbittorrent-nox.service + + +* qbittorrent-nox - серверный клиент qbittorrent + + +[Service] +MemoryHigh=256M +MemoryMax=512M +MemorySwapMax=512M + + +В версии 5 (из ветки unstable) проблема пока что не наблюдалась. + +Установить альфа версию для требуемого дистрибутива можно из списка на [[https://www.qbittorrent.org/download|официальной странице загрузок]], раздел "Other Binary Packages"\\ +Например, репозиторий Ubuntu: + + +add-apt-repository ppa:qbittorrent-team/qbittorrent-unstable + + +==== Совместимость ==== + +=== Протоколы === + +qBittorrent по-умолчанию генерирует торрент-файлы гибридного формата. + +Клиенты (например, [[yggdrasil:bittorrent:transmission|Transmission]]) не имеющие поддержку протокола 2 версии, не смогут открыть файл. + +Таким образом, при создании торрент-файлов лучше явно указывать формат версии 1. + +=== Magnet === + +Автоматически сгенерированный из magnet ссылки .torrent файл (при включенной опции авто-сохранения .torrent файлов), может не содержать фрагментов (pieces) что сделает его не совместимым при импорте. + +В качестве решения, для раздач лучше генерировать новый .torrent файл после загрузки содержимого. + +==== Зависание скачиваний ==== + +В 4 версии клиента замечено зависание (stalled) при скачивании файлов. Частой причиной этому может быть использование только первого трекера (оффлайн) из списка доступных. + +Решение описано в [[https://github.com/qbittorrent/qBittorrent/wiki/Frequently-Asked-Questions#Only_one_tracker_is_working_The_others_arent_contacted_yet|официальной инструкции]] по дополнительным настройкам: + +**Preferences → Advanced → Always announce to all trackers** + +Также можно отметить + +**Preferences → Advanced → Always announce to all trackers in a tier** + +==== WebUI открывается как файл ==== + +В большинстве случаев связано с настройками MIME. + +В дистрибутивах Linux, можно попробовать очистить кеш в директории + + +/home/USERNAME/local/share/mime + + +==== Ошибка авторизации плагинов ==== + +При использовании приватных трекеров или таких, что требуют авторизации для осуществления поиска, следует: + + * Зайти на сайт и авторизироваться из браузера, возможно есть запрос Captcha + * Перезапустить сервис клиента - причиной может быть внутреннее кеширование клиентом предыдущих настроек +===== Ссылки ===== + +[[https://www.qbittorrent.org/|Официальный сайт qBittorrent]]\\ +[[https://github.com/qbittorrent/qBittorrent/wiki/Frequently-Asked-Questions|Частые вопросы]]\\ +[[https://github.com/qbittorrent/qBittorrent/wiki/List-of-known-qBittorrent-themes|Альтернативные темы (Десктоп)]]\\ +[[https://github.com/qbittorrent/qBittorrent/wiki/List-of-known-alternate-WebUIs|Альтернативные клиенты (Web UI)]]\\ +[[https://github.com/qbittorrent/search-plugins/wiki/Unofficial-search-plugins|Поисковые плагины]] + * Внутрисетевые: + * [[https://github.com/YGGverse/qbittorrent-yggtracker-search-plugin|YGGtracker]] - ([[https://github.com/YGGverse/qbittorrent-yggtracker-search-plugin/blob/main/nodes.json|Реестр узлов]]) + * Порты [[https://github.com/imDMG/qBt_SE|qBt_SE]]: + * [[https://raw.githubusercontent.com/YGGverse/qBt_SE/yggdrasil/engines/rutor_yggdrasil_321_c99a_91a1_cd2c__16.py|Rutor]] (http://[321:c99a:91a1:cd2c::16]/) + * [[https://raw.githubusercontent.com/YGGverse/qBt_SE/yggdrasil/engines/rutracker_yggdrasil_321_c99a_91a1_cd2c__18.py|Rutracker]] (http://[321:c99a:91a1:cd2c::18]/forum/) - для поиска необходима авторизация \ No newline at end of file diff --git a/data/pages/yggdrasil/bittorrent/seedbox.txt b/data/pages/yggdrasil/bittorrent/seedbox.txt new file mode 100644 index 0000000..4d5064a --- /dev/null +++ b/data/pages/yggdrasil/bittorrent/seedbox.txt @@ -0,0 +1,450 @@ +====== Сидбокс ====== + +Сидбокс (англ. Seedbox) - частное автономное устройство, выполняющее функцию сбора, хранения и распространения данных или сетевых мета-данных (информации об узлах) другим узлам в сети. + +Зачастую реализуется на базе одноплатного компьютера, в виду низкой энергозатратности и отсутствием шума. + +В отличии от десктоп сидирования, устройство обеспечивает высокий показатель up-time. + +===== Примеры устройств ===== + +{{:yggdrasil:bittorrent:seedbox:orange-pi-pc-plus-1tb-seed-box.png?200|OrangePi PC Plus / 1 Tb}} {{:yggdrasil:bittorrent:seedbox:orange-pi-pc-plus-1tb-seed-box-side-view.png?196|OrangePi PC Plus / 1 Tb}} + +===== Сидбоксинг ===== + +Культура и сообщество энтузиастов, мотивированных свободой обмена данными: метео, bittorrent, и другие направления. + +===== Yggdrasil ===== + +Yggdrasil является отличным инструментом для организации сид-сервера, без необходимости аренды выделенного IP адреса или порта; +сквозное шифрование обеспечивает защиту трафика, повышая устойчивость к прослушиванию и блокировкам со стороны провайдеров. + +Программное обеспечение может быть использовано как для нужд сидирования непосредственно в локальную сеть Yggdrasil, так и в качестве шлюза-ретранслятора данных между удаленными точками, находящихся за NAT или чувствительных к мониторингу трафика. + +Поскольку Yggdrasil обеспечивает соединение пиров путем туннелирования, не нужно настраивать маршрутизацию (проброс) портов на роутере, активировать опцию UPnP, достаточно разрешить выданный BitTorrent клиентом порт в настройках фаервол (при использовании модели whitelist) + +===== Аппаратная часть ===== + +==== Контроллер ==== + +=== Выбор устройства === + +Для организации раздач в локальной сети Yggdrasil, требования к производительности минимальны, в большинстве случаев подойдет ARM платформа с 1 Гб оперативной памяти и внешним накопителем. + +Использование для этой цели старого ноутбука, с постоянно подключенным зарядным устройством нежелательно для АКБ, если в устройстве не предусмотрен аппаратный модуль активной зарядки, обеспечивающий питание устройства напрямую, в случае, когда аккумулятор заряжен. + +Оптимальным выбором для создания сид-бокса будет [[https://www.raspberrypi.com/|Raspbery Pi]]. Из бюджетных вариантов, существует множество альтернатив, например для BitTorrent раздач подойдет [[http://www.orangepi.org/html/hardWare/computerAndMicrocontrollers/details/Orange-Pi-PC-Plus.html|Orange Pi PC Plus]], имеющий на борту процессор Allwinner H3 SoC Quad-core Cortex-A7, 1GB LPDDR3 SDRAM и встроенную память 8GB eMMC Flash. + +=== Операционные системы === + +Обычно для обслуживания сид-сервера, используется операционные системы семейства Linux. + +Например, Orange Pi [[http://www.orangepi.org/html/serviceAndSupport|предоставляет]] для загрузки свои официальные образы - Android, Linux, и другие, с адаптацией под характеристики каждой модели. + +Также, существуют независимые проекты с открытым исходным кодом для множества устройств, например [[https://www.armbian.com/|Armbian]], [[https://dietpi.com/|DietPi]] и другие. + +Не смотря на то, что большинство одноплатных компьютеров поставляется с предустановленной ОС, лучше установить последнюю версию подходящего для своих нужд дистрибутива. + +Для установки операционной системы, после создания установочного образа (удобно использовать [[https://etcher.balena.io|Balena etcher]]), подключаемся с помощью SSH, VNC или локально, если имеется внешний монитор, например, с HDMI адаптером. +Если используется портативный LCD дисплей, лучше запитывать его от отдельного источника питания USB, так как потребление тока может превышать 2 Ампера, что нежелательно для питания от микрокомпьютера напрямую. + + +=== Охлаждение === + +Основной нагрузкой на процессор, при организации сида BitTorrent, является вычисление Info Hash при создании и валидации содержимого раздач (что в прочем можно оптимизировать в настройках выбранного клиента). + +Поэтому желательно установить на модули процессора, питания и памяти дополнительные радиаторы пассивного охлаждения, которые можно приобрести в радио-любительских магазинах. +В операционной системе Linux, контроль температуры датчиков удобно осуществлять с помощью утилиты sensors, установить которую можно командой: + + +apt install lm-sensors + + +=== Расширение памяти === + +== Программное расширение == + +Если контроллер обладает малым объемом ОЗУ, расширить встроенную оперативную память можно с помощью файла подкачки на диске. + +Чтобы добавить раздел swap на встроенную память, выполняем команды + + +fallocate -l 2G /swapfile + + +назначаем права root + + +chmod 600 /swapfile + + +форматируем файл + + +mkswap /swapfile + + +после чего подключаем командой + + +swapon /swapfile + + +для подключения /swapfile при загрузке системы, добавим в /etc/fstab + + +# +/swapfile none swap sw 0 0 + + +Память swap желательно размещать на легко заменяемых носителях с высокой скоростью записи/чтения. + +Если накопитель используется также и для других нужд, важно предусмотреть отдельный раздел. На дисках HDD, желательно размещать swap в начале разделов. + +Подробнее о подготовке внешнего носителя данных, можно прочитать в разделе [[yggdrasil:bittorrent:seedbox#подготовка_носителя|Подготовка носителя]] + +==== Хранение данных ==== + +Объем внутренней памяти устройства минимален и ориентирован для установки операционной системы и программного обеспечения к ней. Чтобы превратить компьютер в полноценный сервер файло-обмена, необходимо подключить внешний накопитель. +Помимо расширения объема штатной памяти, внешний носитель удобен возможностью легкой замены, масштабированием или организацией массива RAID для ускорения операций чтения/записи, а также репликации данных. + +Для небольшого файло-обменного сервера, может быть использована обычная USB "флешка" на 128 Gb или внешний HDD диск, например Seagate Basic STJL1000400 2.5 USB 3.0 с 1TB ST1000LM035-FR на борту. + +Внешние SSD накопители имеют большую скорость обмена данными в мульти-поточном режиме, но бюджетные диски бытового класса особенно чувствительны к циклам записи. +Для HDD характерны долговечность но вместе с тем, ограниченная скорость чтения данных, что заметно при нескольких одновременных подключениях к серверу или работой с реляционными базами данных. + +Поскольку внешний накопитель будет использоваться для раздач BitTorrent, лучше отдать предпочтение HDD. + +Для надежности хранения и обеспечения целостности данных при аварийных отключениях питания, предпочтительнее использовать журналируемую файловую систему, например Ext4. + +=== Внешний накопитель === + +Рассмотрим пример создания разделов и форматирования с помощью утилит parted и mkfs. + +Подключаем накопитель и находим его в списке: + + +parted -l + + +В моем случае это /dev/sda, поэтому он будет указан в качестве примеров ниже и важно заменить актуальным, во избежание потери данных. + +Переходим в редактирование разделов + + +parted /dev/sda + + +Документацию интерфейса можно получить командой + + +help mkpart + + +Указываем стандарт разметки, GPT + + +mklabel gpt + + +В зависимости от целей и способа монтирования диска, можно создать несколько разделов. + + +Поскольку не знаю, сколько места может потребоваться для каждого пользователя (планируется расширять память новыми устройствами аппаратно) +создаю один общий логический раздел для директории /home и указываю размер 0-100%. Отступы (alignment) раздела при этом будут созданы автоматически. + + +mkpart logical ext4 0% 100% + + +Проверяем разметку разделов + + +print free + + +Если всё устраивает, сохраняем изменения командой + + +quit + + +Форматируем раздел, например в журналируемую файловую систему Ext4 + + +mkfs -t ext4 /dev/sda1 + + +Далее необходимо узнать UUID раздела командой + + +lsblk -o PATH,SIZE,RO,TYPE,MOUNTPOINT,UUID,MODEL + + +и для автоматического монтирования после запуска системы, указать в + + +/etc/fstab + + +результат должен быть примерно таким: + + +# +UUID=cf3151b5-dc12-1248-95d4-4de43dga3273 /mnt/sda1 ext4 defaults,noatime,rw,user,auto 0 2 + + +== Пример подключения в home == + +Копируем данные пользователей, предварительно остановив все службы, работающие с домашним каталогом, например, qbittorent-nox + + +service qbittorent-nox stop + + +производим резервное копирование и удаляем каталог /home + + +cp /home /home.bak +rm -R /home + + +монтируем диск + + +mount /dev/sda1 /home + + +копируем (или переносим) данные на носитель + + +cp /home.bak /home + + +каждому пользователю рекурсивно возвращаем права + + +chown -R qbittorent-nox:qbittorent-nox /home/qbittorent-nox + + +запускаем службы + + +service qbittorent-nox start + + +По аналогии, можно создать несколько разделов, задав при этом нужные точки монтирования. + +Желательно размещать swap, временные файлы и журналы на внешних дисках для увеличения срока эксплуатации внутренней памяти микрокомпьютера. + +=== Сетевой накопитель === + +Можно также подключить удалённый накопитель, расположенный на другом устройстве. + +== curlftpfs == + +Утилита для монтирования удалённой директории посредством FTP и CURL. + + +/usr/bin/curlftpfs -o allow_other ftp://user:password@[host]:21/source /target + + +Поскольку монтирование происходит от root, права доступа к ресурсу будут ограничены для остальных служб. Чтобы разрешить доступ к директории другим службам/пользователям, добавлен флаг -o allow_other. + +Для подключения диска при авто-запуске, можно использовать crontab, fstab и другие утилиты, но в виду зависимости использующего софта от этой директории, лучше всего добавить команды в инициализацию сервиса: + + +[Service] +Type=forking +ExecStartPre=+/usr/bin/curlftpfs -o allow_other ftp://user:password@[host]:21/source /target +ExecStop=+/usr/bin/umount /target + + +* //Знак "+" нужен для выполнения данных команд от root, в то время как основной сервис в ExecStart выполняется от своего пользователя.//\\ +* * //Разрешить монтирование для других пользователей можно в файле /etc/fuse.conf раскомментировав параметр user_allow_other// + +Следует заметить, что curlftpfs имеет ряд недостатков, например очистка памяти, проблемы с правами доступа на виртуальных машинах и тд. + +== sshfs == + +Смонтировать сетевое устройство можно также с помощью SSH. + +Подключение осуществляется с помощью пары ключей RSA или с помощью пароля одной командой: + + +/usr/bin/sshfs -o password_stdin user@server:/source '/target' <<< 'password' + + +К недостаткам такого метода можно отнести вопрос повышенных привилегий SSH и дополнительной нагрузки на процессор, особенно, если подключение к удалённому хосту происходит средствами Yggdrasil. + +== rclone == + +Многофункциональная утилита для синхронизации с популярными облачными платформами, также поддерживает различные протоколы - SSH, FTP и другие. + +Для монтирования сетевого диска, используется команда [[https://rclone.org/commands/rclone_mount|rclone mount]]. + +Прежде, чем смонтировать удалённый ресурс, необходимо настроить подключение с помощью [[https://rclone.org/commands/rclone_config/|rclone config]] + +Монтирование: + + +/usr/bin/rclone mount remote:/source /target & + + + * при операциях записи, необходимо включить минимальный уровень кеширования, указав флаг //--vfs-cache-mode writes// + * при запуске через systemd, важно указывать путь к файлу профиля через //--config// + * rclone, в отличии от других альтернатив, не требует запуска от администратора + * пример локального зеркала [[yggdrasil:bittorrent:yggtracker:v2#rclone|FTP для qbittorrent-nox]] + +===== Маршрутизация ===== + +В локальной сети, обычно, сидирующее устройство подключается к роутеру посредством интерфейса Ethernet, не занимая при этом эфир Wifi. + +При одновременном сидировании в различные сети, в том числе - интернет, обойти ограничения NAT и расширить географию раздач можно добавлением интерфейса VPN, например с помощью [[https://github.com/angristan/openvpn-install|CLI установщика OpenVPN]]. +Таким образом, раздачи будут осуществляться на интерфейсы eth0 (ISP), tun0 (Yggdrasil), tun1 (VPN) и т.д. + +Использование каналов можно проверить с помощью утилиты ifstat + +* Проброс портов и активация UPnP на роутере для работы BitTorrent-сервера в сети Yggdrasil не требуется. + +===== Сервер на базе qBittorrent ===== + + +Общая информация о клиенте, доступна в разделе [[yggdrasil:bittorrent:qbittorrent|qBittorrent]] + + +Устанавливаем серверный клиент qbittorrent-nox + + +apt install qbittorrent-nox + + +добавляем пользователя + + +adduser --system --group qbittorrent-nox + + +настраиваем авто-запуск + + +nano /etc/systemd/system/qbittorrent-nox.service + + + +[Unit] +Description=qBittorrent Command Line Client +After=network.target + +[Service] +Type=forking +User=qbittorrent-nox +Group=qbittorrent-nox +UMask=007 +ExecStart=/usr/bin/qbittorrent-nox -d --webui-port=8080 +Restart=on-failure + +[Install] +WantedBy=multi-user.target + + +* чтобы ограничить использование памяти, можно добавить лимиты в секцию [Service]: + + +MemoryHigh=256M +MemoryMax=512M +MemorySwapMax=512M + + +активируем + + +systemctl enable qbittorrent-nox + + +запускаем + + +systemctl start qbittorrent-nox + + +проверяем сервис и порт + + +systemctl status qbittorrent-nox +netstat -tupnl | grep 8080 + + +добавляем правила iptables для подключения к веб-панели + + +ufw allow from ADMIN_REMOTE_IP to any port 8080 + + +заходим в админ-панель указав admin/adminadmin в качестве логина по-умолчанию + + +http://SEED_SERVER_IP:8080 + + +указываем базовые настройки + + * **Connection → Listening Port** - этот порт необходимо добавить в правила iptables для сидирования раздач в Yggdrasil (см. далее) + * **Speed → Global Rate Limits** - ограничиваем скорость, чтобы сид-сервер не занимал весь пропускной канал на пиках + * **Web UI → Authentication → Username / Password** - указываем логин пароль, отличный от стандартного + * **BitTorrent → Automatically add these trackers to new downloads** - удобно указать адреса трекеров для автоматического добавления к загружаемым торрентам и магнет-ссылкам, например [[yggdrasil:sites_and_services:other_network_services#torrent|трекеры в сети Yggdrasil]] + * **Advanced → Always announce to all trackers, Always announce to all trackers in a tier** - активируем работу со всеми доступными трекерами в списке каждого торрента ([[yggdrasil:bittorrent:qbittorrent#зависание_скачиваний|подробнее]]) + * **Advanced → qBittorrent Section → Optional IP address to bind to** - IPv6 из списка, если хотим делиться только в сети Yggdrasil или оставляем по-умолчанию для раздач всем сетям (адрес своего узла в сети Yggdrasil можно получить с помощью команды yggdrasilctl getSelf) + * **Advanced → Enable embedded tracker** - Включив данную опцию, можно активировать сервер торрент-трекера и опубликовать его в списке [[yggdrasil:sites_and_services:other_network_services#torrent|внутрисетевых сервисов]] (см. также [[yggdrasil:bittorrent:opentracker|Opentracker]]) + +Сохраняем настройки и открываем Listening Port (для раздач в сеть интернет, достаточно поддержки роутером и наличия включённой опции UPnP) + + +ufw allow from 0200::/7 to any port [Listening Port] + + +данные профиля сохранены в директории пользователя qbittorrent-nox + + +/home/qbittorrent-nox/.config/qBittorrent + + +в частности, журналы для отладки проблем + + +/home/qbittorrent-nox/.local/share/qBittorrent/logs + + +== Расширение доступа == + +По умолчанию, qbittorrent-nox работает с файлами только в рамках собственного каталога /home/qbittorrent-nox + +Чтобы позволить клиенту оперировать файлами в других каталогах, например, с внешним монтированием или файлами общего пользователя family, приложению необходимо расширить стандартный уровень доступа. + + +Для этого, добавляем пользователя qbittorrent-nox в соответствующую группу, указав флаг append: + + +usermod -a -G family qbittorrent-nox + + +Разрешаем bash в файле /etc/passwd + + +qbittorrent-nox:...:/home/qbittorrent-nox:/usr/bin/bash + + +Совместным каталогам группы family назначаем права не ниже 0770 + +===== Общий доступ к файлам ===== + +Помимо раздачи файлов посредством BitTorrent, сидбокс может выполнять функцию домашнего мультимедиа-сервера для общего хранения файлов между устройствами. + +Таким образом, загрузив файл с одного устройства и продолжив его раздачу, можно открыть файл на другом, при этом не занимать дисковое пространство клиентской машины. + + +Файловые менеджеры различных дистрибутивов достаточно удобны в настройке. + +Например в графической среде Gnome, в файловом менеджере переходим в левом меню **+ Other Locations** и указываем в нижнем трее адрес подключения - ftp, ssh, smb или другой. + +Соответственно на файловом сервере должно быть установлен и настроен соответствующий сервис, а также разрешено подключение в правилах iptables. diff --git a/data/pages/yggdrasil/bittorrent/tools.txt b/data/pages/yggdrasil/bittorrent/tools.txt new file mode 100644 index 0000000..40347b9 --- /dev/null +++ b/data/pages/yggdrasil/bittorrent/tools.txt @@ -0,0 +1,76 @@ +====== Утилиты ====== + +В разделе рассмотрены различные утилиты для создания локальных коллекций и оформления торрент-раздач. + +===== GIT ===== + +Собрать только измененные файлы в архив ''.zip'' - удобно для дополнений к раздачам при выпуске обновлений: + + +zip modified-files.zip $(git ls-files --modified) + + +===== YouTube ===== + +==== yt-dlp ==== + +[[https://github.com/yt-dlp/yt-dlp|yt-dlp]] - это форк известной CLI утилиты [[https://github.com/ytdl-org/youtube-dl|youtube-dl]], позволяющий загружать плейлисты и отдельные ролики с YouTube. + +API YouTube постоянно обновляется, и прежде чем приступить к загрузке контента, важно установить последнюю версию из исходников или загрузить готовую сборку в разделе [[https://github.com/yt-dlp/yt-dlp/releases|релизов]]. + +Создадим целевую директорию для загружаемого плейлиста: + + +mkdir NAME + + +cd NAME + + +Загрузка осуществляется одной командой, по-умолчанию используется формат оригинала, на момент написания материала - [[https://ru.wikipedia.org/wiki/WebM|webm]] + + +yt-dlp CHANNEL_URL|PLAYLIST_URL|VIDEO_URL + + +По-умолчанию, будет загружена версия в максимально возможном качестве. Если нужно уменьшить размер файлов в релизе, например до 1080p, нужно указать дополнительный флаг: + + +yt-dlp CHANNEL_URL|PLAYLIST_URL|VIDEO_URL -S res:1080 + + +Чтобы загрузить весь канал и автоматически разложить видео по директориям с названием плей-листа, можно использовать флаг //output// и [[https://github.com/yt-dlp/yt-dlp#output-template-examples|макросы]], например: + + +yt-dlp CHANNEL_URL/playlists -o '%(uploader)s/%(playlist)s/%(title)s.%(ext)s' + + +Если нужно сохранить только аудио-дорожку, указываем флаг //extract-audio// или сокращенно - //x//\\ +По-умолчанию, будет использован оригинальный аудио-кодек или opus, если нужно осуществить пост-конвертацию, например в mp3 или vorbis (ogg), добавляется флаг //audio-format//\\ +Качество аудио указывается параметром //audio-quality// в значении от 0-10 (5 по-молчанию)\\ + + +yt-dlp CHANNEL_URL|PLAYLIST_URL|VIDEO_URL --extract-audio --audio-format vorbis + + +Узнать все доступные опции, можно командой + + +yt-dlp --help + + +В случае, если загрузка была прервана, при повторном запуске будет произведена проверка целостности файлов и загрузка продолжится с последнего успешно загруженного файла в плейлисте. + +==== FreeTube ==== + +[[https://github.com/FreeTubeApp/FreeTube|FreeTube]] - это альтернативный клиент, с открытым исходным кодом, для приватного просмотра и загрузки видео с YouTube. + +Характерной особенностью проекта является возможность создания локальных коллекций и подписок, без передачи данных третьим лицам.\\ +В качестве шлюза, используется случайная инстанция [[https://api.invidious.io/|Invidious]]. + +Интерфейс содержит инструменты для удобной загрузки субтитров, видео и аудео дорожек. + +На момент написания материала, к недостаткам можно отнести отсутствие возможности загружать видео в более высоком качестве, чем 720p/25fps\\ +Поэтому проект больше подойдет для локального просмотра видео YouTube без наличия аккаунта, рекламы а также без географических ограничений. + +~~DISCUSSION~~ diff --git a/data/pages/yggdrasil/bittorrent/transmission.txt b/data/pages/yggdrasil/bittorrent/transmission.txt new file mode 100644 index 0000000..a2578b7 --- /dev/null +++ b/data/pages/yggdrasil/bittorrent/transmission.txt @@ -0,0 +1,50 @@ +====== Transmission ====== + +Популярный [[yggdrasil:bittorrent:bittorrent|BitTorrent]] клиент с открытым исходным кодом, отличающийся простотой интерфейса. + +Для работы в сети [[yggdrasil:yggdrasil|Yggdrasil]] требует дополнительных настроек, так как по-умолчанию прослушивает интерфейс сетевой карты, не имея соответствующих опций в графической оболочке. +Таким образом, при наличии подключения к интернет, вероятной точкой выхода в сеть будет IP провайдера, в то время как подключения Yggdrasil, например, на tun0 - будут недоступны. + +Transmission оптимально использовать в паре с другими клиентами: например, Transmission - для интернет раздач и [[yggdrasil:bittorrent:qbittorrent|qBittorrent]] - для сидирования в локальную сеть Yggdrasil. + +На момент написания материала, Transmission поддерживает работу magnet-ссылок только 1-й версии. + +===== Графический интерфейс ===== + +==== Создание торрент-файлов ==== + +Для создания "раздачи", сначала необходимо сегенерировать torrent-файл, указав в клиенте путь к файлу или директории. Сделать это можно в пункте меню "File" - "New..." + +Файл с расширением .torrent будет включать в себя основной компонент протокола - info-hash - своего рода контрольную сумму файла, разделенного на фрагменты. +Значение этой хеш-суммы позволяет идентифицировать файл в сети BitTorrent, подобно тому, как это реализовано в протоколе IPFS. + +Вычисление info-hash требует некоторого времени, и во многом зависит от мощности процессора и размера файла. + +После того, как torrent-файл был создан, клиент автоматически предложит добавить его в список раздач. + +Теперь, чтобы поделиться файлом с другими, достаточно передать принимающей стороне файл .torrent или скопировать magnet-ссылку в пункте меню "Torrent" - "Copy magnet link to clipboard" +Если идентичный info-hash (то есть файл) уже имеется в реестре DHT принимающего узла, он также будет загружаться с узлов, находящихся в сети. + +После загрузки файла (а также в процессе загрузки его фрагментов), при условии наличия открытого порта или UPnP, принимающий узел также может начинать раздавать файл (или его загруженные фрагменты) другим. + +===== transmission-cli ===== + +**transmission-cli** - набор утилит transmission для работы из командной строки. + +==== Создание торрент-файлов ==== + +transmission-create -o ПутьКФайлу.torrent -c "Комментарий" -t "http://[201:23b4:991a:634d:8359:4521:5576:15b7]:2023/announce" ПутьКфайлу.mkv + +здесь: + * ''%%http://[201:23b4:991a:634d:8359:4521:5576:15b7]:2023/announce%%'' - это адрес трекера, который будет использоваться для анонса + * ''Комментарий'' - опциональный параметр, также используется в протоколе [[wp>Magnet_URI_scheme#Format|Magnet]] для поиска в локальном и P2P реестрах + +По-желанию или при необходимости можно вывести на экран magnet-ссылку, получаемую из torrent-файла: +transmission-show -m ПутьКФайлу.torrent + +Торрент-файлом или полученной magnet-ссылкой можно поделиться с сообществом, разместив их на [[yggdrasil:bittorrent:yggtracker]] или другим удобным вам способом. + + +===== Ссылки ===== + +[[https://transmissionbt.com/|Официальный сайт Transmission]] \ No newline at end of file diff --git a/data/pages/yggdrasil/bittorrent/yggtracker.txt b/data/pages/yggdrasil/bittorrent/yggtracker.txt new file mode 100644 index 0000000..108f0cf --- /dev/null +++ b/data/pages/yggdrasil/bittorrent/yggtracker.txt @@ -0,0 +1,33 @@ +====== YGGtracker ====== + +Проект c открытым исходным кодом для организации раздач BitTorrent в сети Yggdrasil + + * [[archive:yggdrasil:bittorrent:yggtracker:v1|Версия 1]] (архив) + * [[yggdrasil:bittorrent:yggtracker:v2|Версия 2]] + +===== Список узлов ===== + +Каталог проекта: [[ http://[201:23b4:991a:634d:8359:4521:5576:15b7]/yggtracker/ru | Yggdrasil / IPv6 ]] | [[ http://tracker.ygg/ru | tracker.ygg ]]\\ + +===== Востребованные торренты ===== + +[[ftp://[201:23b4:991a:634d:8359:4521:5576:15b7]/yggtracker/]] + +[[yggdrasil:bittorrent:yggtracker:v2#ftp|Подробнее о функции]] + + +===== Ссылки ===== + +[[ https://github.com/YGGverse/YGGtracker | Исходный код на GitHub ]] \\ +[[ https://github.com/YGGverse/YGGtracker/wiki | Рецепты ]] \\ +[[ https://crowdin.com/project/yggtracker | Локализация ]] \\ +[[ https://mastodon.social/@YGGverse | Новости проекта ]] \\ +[[https://github.com/YGGverse/qbittorrent-yggtracker-search-plugin|Поисковый плагин для qBittorrent]]\\ +[[ https://github.com/YGGverse/yggtracker-wanted-torrents-receiver | Утилита для автозагрузки востребованных торрентов]]\\ + +Каналы KevaChat: + + * [[ http://[201:23b4:991a:634d:8359:4521:5576:15b7]/kevachat/room/NWVP1GPp59qEWYGVWWVxGR2JScHHbicWTy#latest | 0200::/7 ]] + * [[ http://kevachat.ygg/room/NWVP1GPp59qEWYGVWWVxGR2JScHHbicWTy#latest | алиас ]] + +~~DISCUSSION~~ diff --git a/data/pages/yggdrasil/bittorrent/yggtracker/v2.txt b/data/pages/yggdrasil/bittorrent/yggtracker/v2.txt new file mode 100644 index 0000000..ed65700 --- /dev/null +++ b/data/pages/yggdrasil/bittorrent/yggtracker/v2.txt @@ -0,0 +1,521 @@ +====== YGGtracker v2 ====== + +Вторая версия каталога BitTorrent c [[https://github.com/YGGverse/YGGtracker|открытым исходным кодом]] для сети Yggdrasil. + +===== Функциональность ===== + + * Добавлена поддержка мультиязычности интерфейса и контента + * Вместо импорта magnet-ссылок, добавлена поддержка загрузки torrent файлов с возможностью экспорта в magnet или torrent форматах + * Максимально упрощено добавление контента: описание и теги генерируются автоматически из содержимого torrent файла + * Подробные информационные страницы о содержимом каждого torrent файла, возможность фильтрации приватных и non-yggdrasil подключений + * Добавлена лента активности пользователей + * Расширены способы подписки по RSS - последние торренты, активность по отдельному торренту, активность пользователей, подписки на поисковые результаты + * Гибкие настройки профиля - фильтры контента по локали, типам активности, фильтрация адресов трекеров и т.д. + * Организация доступа к редактированию контента основана на принципе википедии, где каждый участник может редактировать материалы, с сохранением истории правок + * Доступны уровни доступа - пользователь, автор, модератор. Первый пользователь может создавать новых модераторов, в то время как они - добавлять остальных, формируя ресурс коллективного типа + * Еще не реализованной но одной из основных функций будут мульти-язычные информационные страницы, которые будут автоматически объединять все контекстные файлы для скачивания + * В рамках информационных страниц возможно будет реализовано стриминговое вещание посредством webtorrent, для удобного просмотра видео без загрузки торрент файла. + +==== Обновления ==== + + * 2.1.0 - добавлена поддержка API для интеграции сторонних приложений и плагинов для торрент клиентов - [[yggdrasil:bittorrent:qbittorrent|qBittorrent]] ([[https://github.com/YGGverse/qbittorrent-yggtracker-search-plugin|плагин]]), [[yggdrasil:bittorrent:jackett|Jackett]] и других + * 2.2.0 - добавлена возможность запроса раздач с обычных торрентов в сеть Yggdrasil а также инструменты автоматизации + * 2.3.0 - расширены уровни доступа - авторам и модераторам доступен весь контент вне зависимости от настроек в аккаунте, автором добавлена функция отключения публикаций + * 2.4.0 - добавлена поддержка постеров с возможностью редактирования сообществом; добавлена поддержка транслитерации для поиска по названиям файлов, добавлена поисковая индексация комментариев + * 2.5.0 - добавлены категории торрентов; новый релиз поискового плагина для qBittorrent, с поддержкой фильтра по категориям и следованием сессии настройкам аккаунта + * 2.6.0 - добавлены поисковые фильтры, для настройки выборки по категорям, локали, и другим полям, игнорируя настройки аккаунта по-умолчанию (функция также применима к подпискам RSS и API) +===== Технические отличия ===== + + * Серверная часть переписана с использованием фреймворка Symfony + * Выход обновлений согласно [[https://semver.org/#semantic-versioning-200|Semantic Versioning 2.0.0]] + * Для более простого развертывания и обновления проекта, во второй версии, вместо MySQL и SphinxQL используется база данных SQLite посредством ORM Doctrine + +===== Децентрализация ===== + +С учетом полученной в первой версии аналитики, во второй версии принято решение отказаться от разделения групп пользователей на локальные и распределенные. +Вместо этого, планируется создание инструментов экспорта личных данных в файл и последующего импорта на выбранный пользователем узел. При таком подходе также возможна автоматизация посредством веб-хуков, при подключении внешнего узла в настройках аккаунта. + +Также рассматривается интеграция протокола [[https://ru.wikipedia.org/wiki/ActivityPub|ActivityPub]] для полноценной интеграции с Fediverse. + +===== API ===== + +Для реализации распределенного индекса а также интеграции сторонних приложений, таких как [[yggdrasil:bittorrent:qbittorrent|qBittorrent]] ([[https://github.com/YGGverse/qbittorrent-yggtracker-search-plugin|поисковый плагин]]), [[yggdrasil:bittorrent:jackett|Jackett]] и других, доступны следующие интерфейсы: + +==== Список торрентов ==== + + +GET /api/torrents?search=value&sensitive=0&locales=en|uk&yggdrasil=1&page=1 + + +* **search** - опционально, отображаются последние торренты, если параметр не указан\\ +* **sensitive** - опционально, 0/1 отображать чувствительный контент или отображать любой если параметр не указан\\ +* **locales** - опционально, список локалей разделенных | или отображать все, если параметр не указан\\ +* **yggdrasil** - опционально, 0/1 фильтр yggdrasil-only или не применять фильтр, если параметр не указан\\ +* **page** - опционально, страница результатов, 1 по-умолчанию + +===== Установка ===== + +Для установки актуальной версии, достаточно выполнить несколько команд: + + +composer create-project yggverse/yggtracker + + +Инициализация базы данных: + + +php bin/console doctrine:schema:update --force + + +===== Обновление ===== + +Установка последних обновлений пакетов: + + +composer update + + +Обновление базы данных: + + +php bin/console doctrine:migrations:migrate + + +Очистить кеш в режиме production можно командой: + + +APP_ENV=prod APP_DEBUG=0 php bin/console cache:clear + + +===== Настройка ===== + +==== Nginx ==== + +В зависимости от типа доступа, ниже приведены различные сценарии настроек Nginx: + +=== DNS === + +При использовании доменного имени (на примере tracker.ygg): + + +server { + + listen [::]:80; + + # Ограничить доступ только для сети Yggdrasil + # allow 0200::/7; + # deny all; + + root /var/www/YGGverse/YGGtracker/public; + + index index.html index.htm index.nginx-debian.html index.php; + + server_name tracker.ygg; + + location / { + + try_files $uri /index.php$is_args$args; + } + + location ~ ^/index\.php(/|$) { + + include snippets/fastcgi-php.conf; + + fastcgi_pass unix:/run/php/php8.1-fpm.sock; + + fastcgi_split_path_info ^(.+\.php)(/.*)$; + + fastcgi_param SCRIPT_FILENAME $realpath_root$fastcgi_script_name; + fastcgi_param DOCUMENT_ROOT $realpath_root; + + # Environment variables + # bin/console cache:clear + fastcgi_param APP_ENV prod; + + internal; + } + + location ~ \.php$ { + return 404; + } +} + + +=== Поддиректория === + +Если каталог расположен по IP адресу Yggdrasil в поддиректории, можно использовать следующую инструкцию на стандартной конфигурации Nginx: + + +ln -s /var/www/YGGverse/YGGtracker/public /var/www/html/yggtracker + + + +# /etc/nginx/sites-available/default +server { + + # http / 80 порт / IPv6 + listen [::]:80 default; + + # Ограничить доступ только для сети Yggdrasil + # allow 0200::/7; + # deny all; + + root /var/www/html; + + index index.html index.htm index.nginx-debian.html index.php; + + server_name _; + + location / { + try_files $uri $uri/ /index.php?$args; + } + + location /yggtracker { + root /var/www/YGGverse/YGGtracker/public; + rewrite ^/yggtracker/(.*)$ /$1 break; + try_files $uri @yggtracker; + } + + location @yggtracker { + + # Provide actual php -v + fastcgi_pass unix:/run/php/php8.1-fpm.sock; + + include fastcgi_params; + fastcgi_param SCRIPT_FILENAME /var/www/YGGverse/YGGtracker/public/index.php; + fastcgi_param SCRIPT_NAME /yggtracker/index.php; + fastcgi_param REQUEST_URI /yggtracker$uri?$args; + + # Среда окружения + # При любых изменениях в prod не забываем о команде bin/console cache:clear + # fastcgi_param APP_ENV prod; + } + + +==== Crontab ==== + +Обновление статистики пиров (scrape) + + +* * * * * wget -q -O /dev/null 'http://[address]/crontab/torrent/scrape/{key}' &> /dev/null + + +* где {key} - ключ ограничения доступа для запросов по http, указать можно в файле среды окружения .env / директива APP_KEY + +==== FTP ==== + +В версии 2.2.0 расширена функция "Wanted", которая теперь позволяет автоматизировать запросы на раздачу, а также осуществлять "конвертацию" любой раздачи в сеть Yggdrasil. + +Работает эта функция следующим образом: + +После того, как скрипт crontab обнаруживает торрент с активными личерами, но без сидеров, он автоматически копирует исходный торрент-файл в общедоступную директорию /app/var/ftp\\ +при этом, к торрент файлу добавляются все возможные трекеры как с исходного файла, так и настроек приложения.\\ + +//* К такому файлу также добавляется префикс wanted#torrentId вместо стандартного yggtracker#torrentId, +чтобы отличать файлы и открывать их особым образом, во избежание утечки данных в интернет, например (в отличии от обычной загрузки, которая фильтрует внешние адреса по-умолчанию)// + +Как только файл был загружен и ретранслирован в сеть Yggdrasil, он автоматически удаляется из FTP каталога. + +В прочем, FTP хранилище нужно не столько для ручного доступа, сколько для того, чтобы позволить владельцам [[yggdrasil:bittorrent:seedbox|сид-узлов]] автоматизировать процесс обработки запросов, +например, с помощью функции автосканирования директории, доступной в большинстве современных bittorrent клиентов. + +При этом, сидирующему боту не нужно загружать весь реестр - YGGtracker автоматически копирует только востребованные торренты по тематическим каталогам, +выполняющих функцию фильтра и администратор узла может выбрать для себя интересующий фильтр. + +На данный момент, доступны следующие варианты для прослушивания запросов: + + * /yggtracker/torrents/wanted/all - все торренты с маркером "востребован" + * /yggtracker/torrents/wanted/locale/en|... - торренты с фильтром по локали контента + * /yggtracker/torrents/wanted/sensitive/no|yes - фильтр по чувствительному признаку / NSFW + +Поскольку bittorrent клиенты не умеют сканировать директории по протоколу FTP, в системах Linux можно примонтировать удалённый раздел в локальную директорию сервера с помощью различных утилит +(частично эта тема раскрыта в материале [[http://[222:a8e4:50cd:55c:788e:b0a5:4e2f:a92c]/yggdrasil:bittorrent:seedbox#сетевой_накопитель|Сидбокс - Сетевой накопитель]]) +или использовать [[https://github.com/YGGverse/yggtracker-wanted-torrents-receiver | официальную утилиту ]] для автозагрузки востребованных торрентов со всех узлов YGGtracker. + +Ниже будет рассмотрен пример рабочей конфигурации FTP/API на базе vsftpd, qbittorrent-nox и rclone; корень проекта расположен в директории /var/www/YGGverse/YGGtracker + +=== vsftpd === + +Устанавливаем командой + + +apt install vsftpd + + +Создадим директорию и добавим приложению доступ на запись + + +mkdir /var/www/YGGverse/YGGtracker/var/ftp +chown www-data:www-data /var/www/YGGverse/YGGtracker/var/ftp + + +Редактируем файл /etc/vsftpd.conf + + +listen_ipv6=YES +anonymous_enable=YES +local_enable=NO +anon_root=/var/www/YGGverse/YGGtracker/var/ftp +no_anon_password=YES +hide_ids=YES +pasv_min_port=40000 +pasv_max_port=50000 + + +Разрешаем входящие подключения (Yggdrasil) + + +ufw allow proto tcp from 0200::/7 to any port 21 +ufw allow proto tcp from 0200::/7 to any port 40000:50000 + + +Перезапускаем сервер + + +service vsftpd restart + + +=== rclone === + +Настроим монтирование на целевом сид-сервере, установив rclone + + +apt install rclone + + +Запускаем команду rclone config и отвечаем на вопросы: + + +n) New remote + +name> yggtracker // название подключения +Storage> ftp // указываем FTP +host> [201:23b4:991a:634d:8359:4521:5576:15b7] // официальный узел, если нужен свой, меняем +port> 21 // можно оставить по-умолчанию +user> anonymous // для анонимного подключения - anonymous +password> anonymous +... +// остальные пункты по-умолчанию + + +Создадим точку монтирования и актуализируем права + + +mkdir /home/qbittorrent-nox/yggtracker +chown qbittorrent-nox:qbittorrent-nox /home/qbittorrent-nox/yggtracker + + +Монтирование осуществляется командой + + +rclone mount yggtracker:/yggtracker/torrents/wanted/all /home/qbittorrent-nox/yggtracker & + + +Демонтировать + + +umount /home/qbittorrent-nox/yggtracker + + +=== qbittorrent-nox === + +Лучше всего подключать FTP при запуске клиента, поэтому добавим следующие настройки сервиса в файл +/etc/systemd/system/qbittorrent-nox.service + + +ExecStartPre=/usr/bin/rclone mount --config /home/qbittorrent-nox/.config/rclone/rclone.conf --daemon --read-only yggtracker:/yggtracker/torrents/wanted/all /home/qbittorrent-nox/yggtracker +ExecStop=/usr/bin/umount /home/qbittorrent-nox/yggtracker + + +Затем + + +systemctl daemon-reload +service qbittorrent-nox restart + + +* О том, как настроить [[http://[222:a8e4:50cd:55c:788e:b0a5:4e2f:a92c]/yggdrasil:bittorrent:seedbox#сервер_на_базе_qbittorrent|сервер на базе qbittorrent-nox]] + +Теперь можно перейти в веб-интерфейс и указать локальную директорию для прослушивания запросов на раздачи: + +**Web UI → Preferences → Download → Automatically add torrents from** + +Также желательно копировать торрент-файлы локально для стабильной работы клиента + +**Web UI → Preferences → Download → Saving Management → Copy .torrent files to** + +=== yggtracker-wanted-torrents-receiver === + +Поскольку в работе qbittorrent-nox и rclone замечена проблема синхронизации, которую можно решить только рестартом клиента, +было принято решение отказаться от rclone и создать специальную [[https://github.com/YGGverse/yggtracker-wanted-torrents-receiver|утилиту]], позволяющую также загружать торренты от всех провайдеров YGGtracker, без необходимости вручную добавлять настройки подключения для каждого из них. + +Скрипт написан на языке PHP 8 (возможно будет добавлена альтернатива на Python или Bash) и подразумевает загрузку торрент-файлов **локально**, посредством crontab. + +Установка последней версии выполняется одной командой: + + +git clone https://github.com/YGGverse/yggtracker-wanted-torrents-receiver.git + + +crontab: + + +* * * * * /usr/bin/php src/cli.php > /dev/null 2>&1 + + +В [[https://github.com/YGGverse/yggtracker-wanted-torrents-receiver#yggtracker-wanted-torrents-receiver|README.md]] указаны подробные комментарии по тонкой настройке, хотя сам скрипт достаточно установить как есть - торренты будут загружены в директорию storage. + +Из полезных функций - можно указать собственные условия получения торрентов, возможность обновления реестра провайдеров из репозитория, и т.д. + +При активной опции import.storage.common загруженные торренты будут скопированы в общую директорию storage/_common, что позволяет работать с торрент клиентами, не поддерживающими рекурсивное сканирование или прослушивание нескольких директорий, +а также вручную мониторить и настраивать клиент для каждого провайдера - эта задача теперь делегирована провайдерам в рамках в PR на GitHub. + +Торренты в директории storage/_common защищены от дублирования хешированием содержимого по MD5. +В остальных случаях, торрент файлы копируются в директории провайдеров, например storage/yggtracker/original_name, после чего можно указать нужную директорию в клиенте qBittorrent или другом, без необходимости что либо менять в systemd. +==== Приложение ==== + +Базовые настройки приложения указываются в файлах группы .env + + +# Название проекта +APP_NAME=YGGtracker + +# Локаль по-умолчанию +APP_LOCALE=en + +# Список доступных локалей +APP_LOCALES=en|cs|eo|fr|ka|de|he|it|lv|pl|pt|ru|es|uk + +# Количество записей на страницу +APP_PAGINATION=10 + +# Тема оформления по-умолчанию +APP_THEME=default + +# Список доступных тем оформления +APP_THEMES=default + +# Настройки чувствительного контента для новых пользователей по-умолчанию +APP_SENSITIVE=0 + +# Утверждение новых пользователей для новых пользователей по-умолчанию +APP_APPROVED=0 + +# Фильтрация ресурсов Yggdrasil для новых пользователей по-умолчанию +APP_YGGDRASIL=1 + +# Настройки дополнительных трекеров +APP_TRACKERS=http://[201:23b4:991a:634d:8359:4521:5576:15b7]:2023/announce|... + +# Адреса поисковых ботов, для которых отключены социальные функции на сайте - загрузки, лайки, ведение журнала активности и т.д. +APP_CRAWLERS=30a:5fad::e|... + +# Ограничение на размер загружаемого файла .torrent +APP_TORRENT_FILE_SIZE_MAX=1024000 + +# Ограничение на размер загружаемых постеров +APP_TORRENT_POSTER_FILE_SIZE_MAX=10240000 + +# Включить экспорт запросов на раздачу средствами FTP +APP_TORRENT_WANTED_FTP_ENABLED=1 + +# Директория FTP +APP_TORRENT_WANTED_FTP_FOLDER=/yggtracker + +# Транслировать по FTP только подтвержденные торренты +APP_TORRENT_WANTED_FTP_APPROVED_ONLY=1 + +# Индексировать названия торрентов +APP_INDEX_TORRENT_NAME_ENABLED=1 + +# Индексировать названия info hash v1 +APP_INDEX_TORRENT_HASH_V1_ENABLED=1 + +# Индексировать названия info hash v2 +APP_INDEX_TORRENT_HASH_V2_ENABLED=1 + +# Индексировать названия файлов +APP_INDEX_TORRENT_FILENAMES_ENABLED=1 + +# Индексировать содержимое поля "источник" +APP_INDEX_TORRENT_SOURCE_ENABLED=1 + +# Индексировать содержимое поля "комментарий" +APP_INDEX_TORRENT_COMMENT_ENABLED=1 + +# Минимальная длина слова для индексации +APP_INDEX_WORD_LENGTH_MIN=3 + +# Максимальная длина слова для индексации +APP_INDEX_WORD_LENGTH_MAX=255 + + +===== Обслуживание ===== + +==== Резервное копирование ==== + +Все пользовательские данные расположены в директории приложения /var + + +/var/cache - кеш приложения +/var/log - журналы +/var/ftp - временное хранилище FTP API +/var/posters - каталог с исходными файлами постеров (пост-обработанные файлы кешируются в /public/posters) +/var/torrents - каталог torrent файлов, соответствующих torrent.ID +/var/data.db - база данных SQLite + + +==== Локализация ==== + +В официальной сборке, переводы осуществляются в рамках площадки [[https://crowdin.com/project/yggtracker|Crowdin]]. + +При использовании собственных сборок, для извлечения строк в директорию /translations, можно использовать команду + + +php bin/console translation:extract --clean --domain="messages" --prefix="" --force ru + + +Если используются внешние провайдеры Crowdin, Loco и другие, выгрузка осуществляется командой: + + +php bin/console translation:push --force --domains="messages" + + +Импорт + + +php bin/console translation:pull --force --intl-icu --domains="messages" + + +После внесения изменений в среде prod, не забываем обновить кеш + + +APP_ENV=prod APP_DEBUG=0 php bin/console cache:clear + + +===== Список узлов ===== + +[[ http://[201:23b4:991a:634d:8359:4521:5576:15b7]/yggtracker/ru | Каталог проекта ]] ([[ http://tracker.ygg/ru | tracker.ygg ]]) - включает межверсионные обновления из репозитория +( +[[ http://[201:23b4:991a:634d:8359:4521:5576:15b7]/yggtracker/ru/rss/torrents | RSS ]], +[[ http://[201:23b4:991a:634d:8359:4521:5576:15b7]/yggtracker/api/torrents | JSON ]], +[[ ftp://[201:23b4:991a:634d:8359:4521:5576:15b7]/yggtracker/ | FTP ]] API +) + +===== Ссылки ===== + +[[ https://github.com/YGGverse/YGGtracker | Исходный код на GitHub ]] \\ +[[ https://github.com/YGGverse/YGGtracker/wiki | Рецепты ]] \\ +[[ https://crowdin.com/project/yggtracker | Локализация ]] \\ +[[ https://mastodon.social/@YGGverse | Новости проекта ]] \\ +[[ https://github.com/YGGverse/qbittorrent-yggtracker-search-plugin|Поисковый плагин для qBittorrent ]]\\ +[[ https://github.com/YGGverse/yggtracker-wanted-torrents-receiver | Утилита для автозагрузки востребованных торрентов]]\\ + +Каналы KevaChat: + + * [[ http://[201:23b4:991a:634d:8359:4521:5576:15b7]/kevachat/room/NWVP1GPp59qEWYGVWWVxGR2JScHHbicWTy#latest | 0200::/7 ]] + * [[ http://kevachat.ygg/room/NWVP1GPp59qEWYGVWWVxGR2JScHHbicWTy#latest | алиас ]] + +[[ yggdrasil:bittorrent:yggtracker | Индексная страница проекта ]] \\ + +~~DISCUSSION~~ diff --git a/data/pages/yggdrasil/config_russian.txt b/data/pages/yggdrasil/config_russian.txt new file mode 100644 index 0000000..edae31f --- /dev/null +++ b/data/pages/yggdrasil/config_russian.txt @@ -0,0 +1,349 @@ +====== Конфигурационный файл Yggdrasil на русском ====== + +===== Yggdrasil версии 0.5 ===== + + +{ + # Ваш приватный ключ. НЕ ДЕЛИТЕСЬ этим ключом ни с кем! + PrivateKey: e231c2d650f3739729ac7f95a9832024be334f065a28af905031254ce76fa6826f9e764d7d403edcc922118b6f37fdfab2f9aa9e97c0db459e38bdc4454f6c66 + # C помощью ключа запуска Yggdrasil -exportkey приватный ключ можно экспортировать в формате PEM + # и после этого указать путь к нему с помощью параметра PrivateKeyPath. Пример: + # yggdrasil -exportkey -useconffile /etc/yggdrasil/yggdrasil.conf >/etc/yggdrasil/privatekey.pem + # + # PrivateKeyPath: /etc/yggdrasil/privatekey.pem + # Эту возможность можно использовать для создания шаблона конфигурационного файла, если + # вы используете Yggdrasil на нескольких устройствах. + + # Список строк подключения для исходящих соединений с другими пирами в формате URI, + # например, tls://a.b.c.d:e или socks://a.b.c.d:e/f.g.h.i:j. Эти соединения + # будут подчиняться таблице маршрутизации операционной системы. Этот раздел следует + # использовать, когда в системе несколько интерфейсов, через которые возможно подключение. + Peers: [] + + # Список строк подключения для исходящих соединений с другими пирами в формате URI, + # упорядоченных по исходному интерфейсу, например { "eth0": [ tls://a.b.c.d:e ] }. + # Обратите внимание, что эти параметры НЕ применимы к пирингу через SOCKS и вместо этого + # SOCKS должны указываться в параметре "Peers". + InterfacePeers: {} + + # Адрес прослушивания (ожидания) входящих подключений. Добавить Listener нужно, если вы + # хотите, чтобы к вам могли подключиться другие нелокальные узлы, указав ваш адрес в параметре + # Peers. + # Multicast peer discovery (протокол для обнаружения пиров в локальной сети) будет работать + # независимо от установок в этом разделе. + # Каждый Listener должен быть указан в формате URI, как показано выше, например: + # tls://0.0.0.0:0 or tls://[::]:0 для прослушивания на всех интерфейсах. + # Если не хотите принимать входящие соединения, оставьте пустым. + # Для публичных пиров Listener обязателен. + Listen: [] + + # Адрес прослушивания для административных подключений. По-умолчанию прослушивание локальных + # подключений осуществляется либо на TCP/9001, либо через сокет UNIX, в зависимости от вашей + # платформы. Используйте это значение для yggdrasilctl -endpoint=X. Для отключения + # сокета администратора используйте значение "none". + AdminListen: tcp://localhost:9001 + # + # либо: AdminListen: /var/run/yggdrasil/yggdrasil.sock #в настройках systemd-юнита разрешена + # запись только в /var/run/yggdrasil/ и /run/yggdrasil/ + + # Настройка интерфейсов, для которых Multicast Peer Discovery должно быть + # включено. Каждая запись в списке должна быть объектом json, который может + # содержать Regex, Beacon, Listen и Port. Regex - это регулярное + # выражение, по которому выбирается имя интерфейса; выбирается первый + # соответствующий Regex интерфейс. Beacon определяет должен ли узел + # отправлять link-local многоадресные сигналы для оповещения о своем существовании, + # пока ожидаются входящие соединения на TCP порту Port. + # Listen определяет будет ли узел ожидать/прослушивать многоадресные сигналы (beacons) + # и открывать исходящие соединения. + # ПОДРОБНЕЕ СМ. СТАТЬЮ "MULTICAST PEER DISCOVERY" НА ЭТОМ РЕСУРСЕ + MulticastInterfaces: [ + { + Regex: .* + Beacon: true + Listen: true + Port: 0 + Priority: 0 + Password: "" + } + ] + + # Список открытых ключей узлов, от которых разрешены входящие подключения. + # Если оставлено пустым/неопределенным тогда все соединения + # будут разрешены по-умолчанию. Это не повлияет ни на исходящие соединения, ни на + # локальные соединения с пирами, обнаруженными через multicast (многоадресная рассылка). + AllowedPublicKeys: [] + + # Имя локального сетевого интерфейса TUN-адаптера, или "auto" для выбора + # интерфейса автоматически, или "none" для запуска без TUN. + IfName: Yggdrasil + + # Максимальный размер передаваемого блока (MTU - Maximum Transmission Unit) + # для вашего локального TUN-интерфейса. + # По умолчанию это самый большой поддерживаемый размер для вашей платформы. Наименьшее + # возможное значение - 1280. + IfMTU: 65535 + + # По-умолчанию, nodeinfo содержит некоторые значения, включая название платформы, + # архитектуру и версию Yggdrasil. Эти значения могут помочь при изучении сети, диагностике + # проблем сетевой маршрутизации. Включение приватности + # nodeinfo предотвращает публикацию этих данных и только значения, указанные в + # "NodeInfo" (если указаны) будут отправлены запрашивающему узлу. + NodeInfoPrivacy: false + + # Дополнительная произвольная информация об узле. Знечение должно быть строкой, + # представляющей собой map { "key": "value", ... } или null. + # Это совершенно необязательно, но если значения заданы, они будут видны всем узлам сети + # при выполнении соответствующего запроса. + NodeInfo: {} +} + + + +===== Yggdrasil версии 0.4 ===== + +{ + # Список строк подключения для исходящих соединений с другими пирами в формате URI, + # например, tls://a.b.c.d:e или socks://a.b.c.d:e/f.g.h.i:j. Эти соединения + # будут подчиняться таблице маршрутизации операционной системы. Этот раздел следует + # использовать, когда в системе несколько интерфейсов, через которые возможно подключение. + Peers: [] + + # Список строк подключения для исходящих соединений с другими пирами в формате URI, + # упорядоченных по исходному интерфейсу, например { "eth0": [ tls://a.b.c.d:e ] }. + # Обратите внимание, что эти параметры НЕ применимы к пирингу через SOCKS и вместо этого + # SOCKS должны указываться в параметре "Peers". + InterfacePeers: {} + + # Адрес прослушивания (ожидания) входящих подключений. Добавить Listener нужно, если вы + # хотите, чтобы к вам могли подключиться другие нелокальные узлы, указав ваш адрес в параметре + # Peers. + # Multicast peer discovery (протокол для обнаружения пиров в локальной сети) будет работать + # независимо от установок в этом разделе. + # Каждый Listener должен быть указан в формате URI, как показано выше, например: + # tls://0.0.0.0:0 or tls://[::]:0 для прослушивания на всех интерфейсах. + # Если не хотите принимать входящие соединения, оставьте пустым. + # Для публичных пиров Listener обязателен. + Listen: [] + + # Адрес прослушивания для административных подключений. По-умолчанию прослушивание локальных + # подключений осуществляется либо на TCP/9001, либо через сокет UNIX, в зависимости от вашей + # платформы. Используйте это значение для yggdrasilctl -endpoint=X. Для отключения + # сокета администратора используйте значение "none". + AdminListen: unix:///var/run/yggdrasil.sock + + # Настройка интерфейсов, для которых Multicast Peer Discovery должно быть + # включено. Каждая запись в списке должна быть объектом json, который может + # содержать Regex, Beacon, Listen и Port. Regex - это регулярное + # выражение, по которому выбирается имя интерфейса; выбирается первый + # соответствующий Regex интерфейс. Beacon определяет должен ли узел + # отправлять link-local многоадресные сигналы для оповещения о своем существовании, + # пока ожидаются входящие соединения на TCP порту Port. + # Listen определяет будет ли узел ожидать/прослушивать многоадресные сигналы (beacons) + # и открывать исходящие соединения. + # ПОДРОБНЕЕ СМ. СТАТЬЮ "MULTICAST PEER DISCOVERY" НА ЭТОМ РЕСУРСЕ + MulticastInterfaces: + [ + { + Regex: .* + Beacon: true + Listen: true + Port: 0 + } + ] + + # Список открытых ключей узлов, от которых разрешены входящие подключения. + # Если оставлено пустым/неопределенным тогда все соединения + # будут разрешены по-умолчанию. Это не повлияет ни на исходящие соединения, ни на + # локальные соединения с пирами, обнаруженными через multicast (многоадресная рассылка). + AllowedPublicKeys: [] + + # Ваш публичный (открытый) ключ. Те, с кем вы соединяетесь могут попросить у вас этот ключ + # для указания в разделе AllowedPublicKeys их конфигурации. + PublicKey: a999ccc664e0d645e76ed1fa2cf169806e4674725f3d6213d2c92869976eb01e + + # Ваш приватный ключ. НЕ ДЕЛИТЕСЬ этим ключом ни с кем! + PrivateKey: 711895e5625cc787c06e7e03c49ed71470cf87dfb626985f1cb669a24a479c3ea999ccc664e0d645e76ed1fa2cf169806e4674725f3d6213d2c92869976eb01e + + # Имя локального сетевого интерфейса TUN-адаптера, или "auto" для выбора + # интерфейса автоматически, или "none" для запуска без TUN. + IfName: auto + + # Максимальный размер передаваемого блока (MTU - Maximum Transmission Unit) + # для вашего локального TUN-интерфейса. + # По умолчанию это самый большой поддерживаемый размер для вашей платформы. Наименьшее + # возможное значение - 1280. + IfMTU: 65535 + + # По-умолчанию, nodeinfo содержит некоторые значения, включая название платформы, + # архитектуру и версию Yggdrasil. Эти значения могут помочь при изучении сети, диагностике + # проблем сетевой маршрутизации. Включение приватности + # nodeinfo предотвращает публикацию этих данных и только значения, указанные в + # "NodeInfo" (если указаны) будут отправлены запрашивающему узлу. + NodeInfoPrivacy: false + + # Дополнительная произвольная информация об узле. Знечение должно быть строкой, + # представляющей собой map { "key": "value", ... } или null. + # Это совершенно необязательно, но если значения заданы, они будут видны всем узлам сети + # при выполнении соответствующего запроса. + NodeInfo: {} +} + + +===== Yggdrasil версии 0.3.14 ===== + +{ + # Список строк подключения для исходящих соединений с другими пирами в формате URI, + # например, tcp://a.b.c.d:e или socks://a.b.c.d:e/f.g.h.i:j. Эти соединения + # будут подчиняться таблице маршрутизации операционной системы, поэтому вы должны + # использовать этот раздел, когда вы можете подключаться через различные интерфейсы. + Peers: [] + + # Список строк подключения для исходящих соединений с другими пирами в формате URI, + # упорядоченных по исходному интерфейсу, например { "eth0": [ tcp://a.b.c.d:e ] }. + # Обратите внимание, что эти параметры НЕ применимы к пирингу через SOCKS и вместо этого + # SOCKS должны перейти в раздел "Peers". + InterfacePeers: {} + + # Адрес прослушивания (ожидания) входящих подключений. Добавить слушателей необходимо + # для того, чтобы принимать входящие соединения от нелокальных узлов. + # Multicast peer discovery (протокол для обнаружения пиров в локальной сети) будет работать + # независимо от установок в этом разделе. + # Каждый слушатель должен быть указан в формате URI, как показано выше, например: + # tcp://0.0.0.0:0 or tcp://[::]:0 для прослушивания на всех интерфейсах. + Listen: [] + + # Адрес прослушивания для административных подключений. По-умолчанию прослушивание локальных + # подключений осуществляется либо на TCP/9001, либо через сокет UNIX, в зависимости от вашей + # платформы. Используйте это значение для yggdrasilctl -endpoint=X. Для отключения + # сокета администратора используйте значение "none". + AdminListen: unix:///var/run/yggdrasil.sock + + # Регулярные выражения, в соответствии с которыми будет включено + # multicast peer discovery (см. выше). Если не указано ничего, multicast peer discovery будет + # отключен. Значение по-умолчанию: .*, что соответствует всем интерфейсам. + MulticastInterfaces: + [ + .* + ] + + # Список открытых ключей шифрования пиров, от которых разрешены входящие + # подключения. Если оставлено пустым/неопределенным тогда все соединения + # будут разрешены по-умолчанию. Это не повлияет ни на исходящие соединения, ни на + # локальные соединения с пирами, обнаруженными через multicast (многоадресная рассылка). + AllowedEncryptionPublicKeys: [] + + # Ваш публичный (открытый) ключ шифрования. Те, с кем вы соединяетесь могут попросить у вас этот ключ + # для указания в разделе AllowedEncryptionPublicKeys их конфигурации. + EncryptionPublicKey: a999ccc664e0d645e76ed1fa2cf169806e4674725f3d6213d2c92869976eb01e + + # Ваш приватный ключ шифрования. НЕ ДЕЛИТЕСЬ этим ключом ни с кем! + EncryptionPrivateKey: 711895e5625cc787c06e7e03c49ed71470cf87dfb626985f1cb669a24a479c3e + + # Ваш открытый ключ для подписывания. В общем случае, вам не нужно ни с кем делиться + # этим ключом. + SigningPublicKey: 050a7f72d7ad3917e0e1aa615d605653c9f82d2183b8b43ca97efb7d5cc49c93 + + # Ваш приватный ключ для подписывания. НЕ ДЕЛИТЕСЬ этим ключом ни с кем! + SigningPrivateKey: c2be71a619c9eb498d9fde9792ba7399223773bb063d0d6eefb213f623f387e2050a7f72d7ad3917e0e1aa615d605653c9f82d2183b8b43ca97efb7d5cc49c93 + + # Номер порта, который будет использован локальными TCP слушателями для + # сконфигурированных MulticastInterfaces (многоадресных интерфейсов). + # Эта опция не влияет на слушателей, указанных в параметре Listen. + # Если вы не планируете использовать файервол для локального трафика, + # будет лучше, если вы оставите это значение по-умолчанию равным 0. В настоящее время + # этот параметр не может быть изменен путем перезагрузки конфигурации во время выполнения. + LinkLocalTCPPort: 0 + + # Имя локального сетевого интерфейса TUN-адаптера, или "auto" для выбора + # интерфейса автоматически, или "none" для запуска без TUN. + IfName: auto + + # Максимальный размер передаваемого блока (MTU - Maximum Transmission Unit) + # для вашего локального TUN-интерфейса. + # По умолчанию это самый большой поддерживаемый размер для вашей платформы. Наименьшее + # возможное значение - 1280. + IfMTU: 65535 + + # Межсетевой экран сеанса управляет тем, кто может отправлять/получать исходящий/входящий + # сетевой трафик. Это полезно, если вы хотите защитить узел без использования + # настоящего файервола. Эта настройка не влияет на трафик, идущий через этот узел + # в другое место. Правила имеют следующие приоритеты: + # черный список, белый список, всегда разрешенные исходящие, прямые, удаленные. + SessionFirewall: + { + # Включение или отключение файервола сессии. Если отключено, сетевой трафик + # от любого узла будет разрешен. Если включено, применяются правила, приведенные ниже. + Enable: false + + # Разрешить сетевой трафик от узлов, подключенных напрямую. + AllowFromDirect: true + + # Разрешить трафик с удаленных узлов сети, к которым вы + # не подключены напрямую. + AllowFromRemote: true + + # Разрешить исходящий трафик, независимо от AllowFromDirect или + # AllowFromRemote. Это разрешает удаленному узлу отправлять вам обратно + # незапрашиваемый трафик на протяжении всей сессии. + AlwaysAllowOutbound: true + + # Список открытых ключей узлов, с которых трафик всегда будет разрешен, + # независимо от AllowFromDirect или AllowFromRemote. + WhitelistEncryptionPublicKeys: [] + + # Список открытых ключей узлов, с которых трафик всегда будет отклонен, + # независимо от белого списка, AllowFromDirect or AllowFromRemote. + BlacklistEncryptionPublicKeys: [] + } + + # Разрешить туннелирование не-Yggdrasil трафика через Yggdrasil. Это позволяет + # эффективно использовать Yggdrasil для маршрутизации в другие сети или соединения с другими сетями, + # аналогично VPN-туннелю. Туннелирование работает между любыми двумя узлами и + # не требует их прямого соединения. + TunnelRouting: + { + # Включить или отключить туннельную маршрутизацию. + Enable: false + + # IPv6-подсети, приналежащие удаленным узлам, сопоставленные по публичным + # ключам узлов, например: { "aaaa:bbbb:cccc::/e": "boxpubkey", ... } + IPv6RemoteSubnets: {} + + # IPv6-подсети, принадлежащие этой стороне туннеля этого узла. Трафик только + # из этих диапазонов (или IPv6-адреса/подсети узла Yggdrasil) + # будет туннелирован. + IPv6LocalSubnets: [] + + # IPv4-подсети, приналежащие удаленным узлам, сопоставленные по публичным + # ключам узлов, например: { "a.b.c.d/e": "boxpubkey", ... } + IPv4RemoteSubnets: {} + + # IPv4-подсети, принадлежащие этой стороне туннеля этого узла. Трафик только + # из этих диапазонов будет туннелирован. + IPv4LocalSubnets: [] + } + + # Дополнительные опции настройки коммутатора. Обычно вам не нужно будет + # редактировать эти опции. + SwitchOptions: + { + # Максимальный суммарный размер всех очередей коммутаторов (в байтах). + MaxTotalQueueSize: 4194304 + } + + # По-умолчанию, nodeinfo содержит некоторые значения, включая название платформы, + # архитектуру и версию Yggdrasil. Эти значения могут помочь при изучении сети, диагностике + # проблем сетевой маршрутизации. Включение приватности + # nodeinfo предотвращает публикацию этих данных и только значения, указанные в + # "NodeInfo" (если указаны) будут отправлены запрашивающему узлу. + NodeInfoPrivacy: false + + # Дополнительная произвольная информация об узле. Знечение должно быть строкой, + # представляющей собой map { "key": "value", ... } или null. + # Это совершенно необязательно, но если значения заданы, они будут видны всем узлам сети + # при выполнении соответствующего запроса. + NodeInfo: {} +} + + +~~DISCUSSION~~ \ No newline at end of file diff --git a/data/pages/yggdrasil/configure_peering.txt b/data/pages/yggdrasil/configure_peering.txt new file mode 100644 index 0000000..2215b2e --- /dev/null +++ b/data/pages/yggdrasil/configure_peering.txt @@ -0,0 +1,23 @@ +====== Я установил Yggdrasil, но другие узлы недоступны. Что я упустил? ====== + +Если [[yggdrasil:yggdrasil|Yggdrasil]] не обнаружил узлы автоматически, и вы не добавляли их вручную, вы не сможете выйти за пределы своего собственного узла. Необходимо, чтобы вы [[yggdrasil:public_peer|вручную настроили]] статическое соединение с другим узлом Yggdrasil, либо находились в локальной сети с другими пирами. Устройства, на которых установлен Yggdrasil, автоматически обнаруживают друг друга в локальной сети //([[yggdrasil:mpd|Multicast Peer Discovery]])//. Для обнаружения локальных узлов **необходимо включение IPv6** на сетевых интерфейсах. + +Проверить наличие соединения с другими узлами можно командой: + + # unix-like OS: +sudo yggdrasilctl getPeers + # Windows: +"C:\Program Files\Yggdrasil\yggdrasilctl.exe" getPeers + +Узел на порту 0 - это вы и ваш адрес, на портах 1 и выше -- ваши активные соединения с другими узлами. Пример вывода команды: + + bytes_recvd bytes_sent endpoint port proto uptime +202:78c7:11c7:a287:1463:e978:4561:432 160409 171835 (self) 0 self 00:07:27 +200:a3d2:b6c3:72f3:10f7:a138:7836:ed1f 29876 14547 tcp://[fe80::a00:27ff:fe49:d142%Local]:54977 1 tcp 00:07:27 +201:309c:4893:a318:c104:3cd1:d89b:7420 663488 6038208 tcp://95.79.97.17:50001 2 tcp 00:07:27 + +Первая строка, обозначенная словом ''self'' -- ваш адрес на нулевом порту, вторая строка -- локальное подключение с обозначением сетевого интерфейса, третья строка -- подключение к публичному пиру через интернет. +====== Ссылки ====== +FAQ (EN): https://yggdrasil-network.github.io/faq.html + +~~DISCUSSION~~ \ No newline at end of file diff --git a/data/pages/yggdrasil/conflicts.txt b/data/pages/yggdrasil/conflicts.txt new file mode 100644 index 0000000..56c29ee --- /dev/null +++ b/data/pages/yggdrasil/conflicts.txt @@ -0,0 +1,10 @@ +====== Не вызовет ли Yggdrasil конфликтов в моей сети? ====== + +Yggdrasil использует диапазон 0200::/7, который не рекомендуется к использованию [[wpru>Инженерный_совет_Интернета|IETF]] с 2004 года. + +Разработчиками Yggdrasil было принято решение использовать этот диапазон вместо fc00::/7 (который обычно выделяется для частных сетей), чтобы предотвратить конфликты с существующими диапазонами [[wp>Unique_local_address|ULA]]. + +Таким образом, если вы не используете диапазон 0200::/7 в своей сети, вы не столкнётесь c конфликтами маршрутизации. + +====== Ссылки ====== +FAQ (EN): https://yggdrasil-network.github.io/faq.html \ No newline at end of file diff --git a/data/pages/yggdrasil/connect_through_tor.txt b/data/pages/yggdrasil/connect_through_tor.txt new file mode 100644 index 0000000..a007bcc --- /dev/null +++ b/data/pages/yggdrasil/connect_through_tor.txt @@ -0,0 +1,46 @@ +====== Анонимное подключение к сети ====== +Yggdrasil не обеспечивает анонимность пользователя, поэтому может возникнуть потребность подключения к сети через анонимизирующие цепочки. Это может быть как Tor, I2P, так и любой другой инструмент, поддерживающий прием подключений по протоколу SOCKS.\\ +Данное решение имеет больший смысл при хостинге веб-ресурсов и излишней паранойе, а не использовании обычным пользователем. + +===== Подключение через SOCKS ===== +По умолчанию Tor принимает локальные подключения на порту 9050. Если ваш случай отличается, измените номер порта на свой. Для анонимного подключения, в файле конфигурации yggdrasil.conf (/etc/yggdrasil.conf, c:\programdata\yggdrasil\yggdrasil.conf) укажите подключение к публичному пиру через SOCKS. Для этого в секции ''Peers'' укажите адреса нужных публичных пиров следующим образом: + + Peers: [ + socks://127.0.0.1:9050/public_node_ip:port + ] + +Таким образом можно указать неограниченное количество нод с подключением по tcp. + +===== Дополнительные настройки анонимности ===== + * Локальные мультикасты +Анонимус должен помнить, что Yggdrasil -- не только оверлейная, но в первую очередь меш-сеть. Это значит, что клиент сети [[yggdrasil:mpd|прослушивает]] все сетевые интерфейсы в поисках локальных пиров и всегда готов к ним подключиться. Чтобы часть трафика не шла через возможных соседей, необходимо в том же файле конфигурации полностью отключить прослушивание всех интерфейсов. Для этого секцию ''MulticastInterfaces'' необходимо оставить пустой. По умолчанию в ней прописано ".*", что означает прослушивать все сетевые интерфейсы устройства. В итоге должно получиться так: + +MulticastInterfaces: [] + + + * Уникальный адрес пользователя (не применимо к публичным ресурсам) +Вне зависимости от цепочки подключения, пользователь имеет один адрес. Адрес генерируется случайным образом и хранится в файле конфигурации в виде значений ''PrivatePublicKey'' и ''EncryptionPublicKey''. Следовательно, после замены конфига, адрес также изменится. Для генерации нового файла конфигураций можно удалить сущетсвующий конфиг и перезапустить службу Yggdrasil, либо выполнить следующую команду:\\ +**Windows**: + +"С:\Program Files\Yggdrasil\updateconfig.bat" + +**Linux (Debian)**: + +yggdrasil -genconf | sudo tee /etc/yggdrasil.conf + +**Linux (Ubuntu)**: + +yggdrasil -genconf | sudo tee /etc/yggdrasil/yggdrasil.conf + +===== Перезапуск службы ===== + +После изменения конфигурации, необходим перезапуск службу Yggdrasil.\\ +**Windows**: +Нажмите "Выполнить" и укажите программу "services.msc". В списке служб найдите Yggdrasil Service. Кликните по службе правой кнопкой мыши и нажмите "Перезапустить", или выполните в командной строке: + +net.exe stop "Yggdrasil Service" && net.exe start "Yggdrasil Service" + +**Linux (Debian)**: + +sudo systemctl restart yggdrasil + \ No newline at end of file diff --git a/data/pages/yggdrasil/crawler.txt b/data/pages/yggdrasil/crawler.txt new file mode 100644 index 0000000..ca34caf --- /dev/null +++ b/data/pages/yggdrasil/crawler.txt @@ -0,0 +1,26 @@ +====== Как получить информацию обо всех узлах сети ====== + +^ :!: Внимание! ^ +| Начиная с версии 0.5 RC1 [[Yggdrasil]] больше не использует DHT. Информация в этой статье не актуальна для последних версий Yggdrasil.| + +[[Yggdrasil]] использует распределенную хеш-таблицу ([[wpru>Распределённая_хеш-таблица|DHT]]), в которой содержится вся необходимая информация для работы автоматической маршрутизации. + +Обращаясь к этой хеш-таблице можно получить нужную нам информацию и далее, обращаясь к узлам с использованием [[https://yggdrasil-network.github.io/admin.html|Admin API]], можно получить дополнительную информацию об узле. + +На основе этого реализованы DHT-crawler'ы, собирающие информацию обо всех узлах. [[https://github.com/Arceliar/yggdrasil-map/blob/master/scripts/crawl.py|Реализация]] на Python. Наглядный пример: официальная [[http://[21e:e795:8e82:a9e2:ff48:952d:55f2:f0bb]/|карта сети]]. + +Реализация crawler'a на go: https://github.com/Arceliar/yggdrasil-map/blob/master/scripts/crawler.go (или [[https://github.com/Jorropo/fc00.org/blob/newer-crawller/scripts/crawler.go|тут]]). + +===== Собранная информация ===== + +В сети есть ресурсы, которые предоставляют с определенными интервалами собираемые crawler'ами данные. + +Один из таки ресурсов: http://[316:c51a:62a3:8b9::2]/ (данные в формате json: http://[316:c51a:62a3:8b9::2]/result.json). + +Эти данные можно любым удобным (или необходимым) способом трансформировать, анализировать и т.п. + +Так, для примера, ниже приведена команда, с помощью которой можно вывести отсортированную по ключам (и адресам) табличку узлов, получаемую из этого файла. + +jq -r --sort-keys '.[]|with_entries(.value = .value.address)' result.json | jq -r 'to_entries[] | "\(.key), \(.value)"' | more + +(если ''%%jq%%'' еще нет в системе, её нужно установить: ''%%sudo apt install jq%%'') \ No newline at end of file diff --git a/data/pages/yggdrasil/crxn.txt b/data/pages/yggdrasil/crxn.txt new file mode 100644 index 0000000..d7a6478 --- /dev/null +++ b/data/pages/yggdrasil/crxn.txt @@ -0,0 +1,16 @@ +====== CRXN: Андерграундный децентрализованный африканский Интернет-провайдер ====== + + +CRXN (Community Run eXpansive Network), по-сути, небольшая частная экспериментальная IPv4 сеть. Подключившись, пользователь получает в свое владение блок адресов из пространства 10.0.0.0/8 и волен сам стать пиром для новых пользователей. + +Есть куча вариантов как подключиться к сети, в основном это происходит через меш-сеть Yggdrasil. Пиры подключаются друг к другу используя легковесный VPN сервер fastd, договариваются об IPv4 диапазонах и обмениваются маршрутами с помощью протокола маршрутизации babel. Адреса из своего CRXN диапазона уже можно использовать для подключения других компов, допустим, раздавать по DHCP в беспроводной сети. + +===== Кому оно нужно? ===== + +Основная причина - запуск в мешах приложений, которые понимают только IPv4. Например, можно поднять свой сервак контры 1.6 или WoW. +Это полезно, поскольку в версии Yggdrasil v0.4 планируется убрать фичу Crypto Key Routing. По сравнению с CKR, где маршруты задаются статически, babel в CRXN распределяет маршруты динамически. Получается более гибкое и децентрализованное решение. + +Сеть была основана в ЮАР, но уже стала интерконтинентальной - узлы есть в Африке, Европе, Азии. В России сейчас работает 2 узла. +Более продробную инфу можно найти на официальном сайте проекта https://deavmi.github.io/projects/crxn/ + +~~DISCUSSION~~ \ No newline at end of file diff --git a/data/pages/yggdrasil/dns/alfis.txt b/data/pages/yggdrasil/dns/alfis.txt new file mode 100644 index 0000000..2f037e7 --- /dev/null +++ b/data/pages/yggdrasil/dns/alfis.txt @@ -0,0 +1,251 @@ +====== ALFIS - распределенная система доменных имен ====== + +ALFIS (Alternative Free Identity System - альтернативная свободная система идентификации) - распределенная система доменных имен. + +Преимущества ALFIS перед [[archive:yggdrasil:dns:wyrd|Wyrd]] и другими системами DNS: + * Система распределенная, нет центрального сервера, при выходе из строя которого, вся система перестанет работать + * Резолв внутрисетевых адресов происходит быстрее, т.к., обращение идет к локальному резолверу, встроенному в ALFIS + * DNS запросы не подвержены перехвату + * Предполагаются все возможности по работе с DNS, как в обычных (централизованных) системах + * Относительно малый объем [[wpru>блокчейн|блокчейна]], в сравнении с другими подобными системами + * Открытый исходный код + +К недостаткам можно отнести относительно долгий процесс "регистрации" доменного имени, передачи доменного имени другому пользователю, внесения изменений в записи доменных имен. Всё это связано с особенностями технологии блокчейн на принципе [[wpru>Доказательство выполнения работы|PoW]] и необходимостью [[wpru>майнинг|майнинга]] для внесения изменений в блокчейн, который, собственно, содержит записи доменных имен. Кроме того, особенностью ALFIS является то, что, на данный момент, с одним персональным ключом блок с новым доменом можно майнить не чаще, чем раз в сутки. + +С версии 0.4.34 в ALFIS добавлено ограничение на максимальное количество зон - 10 шт. (это, в общем-то, не является недостатком, ввод ограничений связан с тем, что некоторые пользователи начали злоупотреблять возможностью майнить зоны и намайнили несколько бессмысленных зон). + +===== Установка ===== + +==== DNS-сервис, без GUI (Debian / Ubuntu) ==== + +Эта версия подойдет тем, кто хочет установить ALFIS только в качестве DNS-резолвера. + +Скачиваем ключ репозитория и добавляем его в [[wpru>Advanced_Packaging_Tool|APT]]: +wget -O - https://deb.revertron.com/key.txt | sudo apt-key add - +Добавляем репозиторий в список источников APT: +echo 'deb http://deb.revertron.com/ debian alfis' | sudo tee /etc/apt/sources.list.d/alfis.list +Обновляем информацию о доступных пакетах и устанавливаем ALFIS: +sudo apt update && sudo apt install alfis + +Конфигурационный файл ALFIS будет располагаться в /etc/alfis.conf, блокчейн будет сохранен в директорию /var/lib/alfis. + +Если у вас запущен другой DNS-сервер, работающий на TCP-порту 53, ALFIS не сможет корректно запуститься. Либо измените в конфигурационном файле порт ALFIS, либо измените порт ранее установленного DNS-cервера и укажите его в качестве upstream-сервера для ALFIS. + +Пропишите ALFIS в качестве резолвера в /etc/resolv.conf или другим способом, используемым в вашей ОС. + +==== Версия с GUI (Windows / Linux / MacOS) ==== + +Для регистрации новых и управления уже зарегистрированными доменными именами вам потребуется версия ALFIS с GUI. + +Скачать готовые бинарные сборки под распространенные ОС и архитектуры можно со [[https://github.com/Revertron/Alfis/releases|страницы релизов]] репозитория проекта на GitHub (нужна версия без nogui в наименовании архива). + +Скачайте архив с нужной сборкой и распакуйте его в любую удобную вам директорию. + +После распаковки в Linux сделайте файл исполняемым командой: + + +chmod +x alfis + + +В Windows для запуска ALFIS необходимо наличие установленного Microsoft VC Redistributable (набор динамических библиотек Microsoft Visual C++). Скачать установщик можно по этой ссылке: [[https://www.microsoft.com/ru-RU/download/details.aspx?id=52685|Microsoft Visual C++ 2015 Update 3 RC]]. Установка выполняется довольно просто, проблем вызвать не должно. + +Для запуска ALFIS под Windows версии ниже 8.1 требуется наличие библиотеки api-ms-win-shcore-scaling-l1-1-1.dll. Скачать библиотеку можно по [[https://www.dll.ru/files/api-ms-win-shcore-scaling-l1-1-1-dll|этой ссылке]]. Библиотеку необходимо разместить в том же каталоге, где находится alfis.exe. + +Далее просто запустите исполняемый файл. + +В Linux: ./alfis \\ +В Windows: alfis.exe + +По-умолчанию, ALFIS ищет конфигурационный файл в директории, где находится исполняемый файл, в этой же директории создаётся база данных с блокчейном blockchain.db. + +Чтобы указать ALFIS другой путь к конфигурационному файлу, можно запустить его с параметром -с: +alfis -c /etc/alfis.conf +Для того, чтобы указать путь к рабочей директории (куда будет сохранен блокчейн) можно использовать параметр -w: +alfis -w /home/elf/alfis/ + + +===== Как "зарегистрировать" доменное имя в ALFIS ===== + +Для "регистрации" доменного имени в системе, необходимо добавить блок с DNS-записями в блокчейн. Делается это путем майнинга блока. + +Но перед майнингом самого блока с доменными именами необходимо, так сказать, "зарегистрироваться" в системе - намайнить персональный ключ, который будет использоваться для управления своими DNS-записями. + +==== Генерирование персонального ключа ==== + +GUI ALFIS прост и интуитивно понятен. + +{{ yggdrasil:dns:alfis_article.pic0.png }} + +Для майнинга ключа в разделе Credentials просто нажимаем Mine new key. Этот процесс может занять от нескольких часов до нескольких дней в зависимости от мощности процессора. + +После того как ключ будет готов, рекомендую сохранить его в файл для дальнейшего использования (Save key). + +==== Регистрация доменного имени ==== + +Для добавления DNS записей, в разделе Credentials выбираем свой ключ (Load key), в разделе Domains нажимаем "New Domain", далее вводим желаемое доменное имя, выбираем зону (например, .ygg (в зонах, помеченных звездочкой, возможен майнинг доменных имен, связанных только с адресами [[Yggdrasil:Yggdrasil]])), жмем Add record. + +В открывшейся формочке необходимо будет указать параметры DNS-записи. +Для простоты можно указать имя @, тип AAAA (соответствует IPv6) и ваш IP-адрес. @ означает root (корень). Этого будет достаточно для того, чтобы поставить в соответствие IP-адрес и выбранное доменное имя. Если планируется использовать домены третьего уровня (например, %%www.dname.ygg%%), то нужно будет их сразу прописать, чтобы не майнить каждую запись отдельно. Чтобы не прописывать каждый домен третьего уровня отдельно, в поле name можно указать *. + +Должно получиться так, как на картинке ниже. + +{{ yggdrasil:dns:alfis_article.pic.png }} + + +По кнопке с подменю "Advanced" можно указать дополнительную информацию по домену: Set owner contacts - контактные данные владельца, Set domain info - дополнительная информация, связанная с доменом; Change domain owner - используется для передачи домена другому пользователю. + +После того, как всё заполнено, нажимаем Mine domain и ждем, когда процесс майнинга завершится. Процесс может занять продолжительное время. + +Если, вдруг, после нажатия Mine domain вы увидите сообщение "You have cooldown, just xxx more minutes!", это означает, что вы пытаетесь запустить майнинг блока чаще, чем раз в сутки. Придется подождать указанное количество минут. + +{{ yggdrasil:dns:cooldown_alfis.png }} + +===== Как остановить майнинг ===== + +Остановить майнинг можно нажав на красный мерцающий индикатор майнинга в левом нижнем углу окна ALFIS. + +===== Где хранится блокчейн ===== + +Блокчейн локально хранится в базе SQLite (файл blockchain.db). Просмотреть содержимое базы можно, например, с помощью [[https://sqlitebrowser.org/|DB Browser for SQLite]]. Домены не содержатся в базе в открытом виде, только их хэши. + +Кроме того, [[user:cofob]] разработал красивый web-blockchain-viewer: https://viewer.alfis.name/. Исходный код: https://git.sr.ht/~cofob/AlfisViewer + +===== Как использовать ALFIS в качестве резолвера ===== + +Запущенный ALFIS с графическим интерфейсом может корректно резолвить доменные имена. + +Для использования ALFIS исключительно, как резолвера, без отрисовки графического интерфейса, нужно запустить его с параметром -n. + +Резолвер начнет работать на адресе и порте, указанными в конфигурационном файле alfis.toml. + +Кроме того, можно скачать специальную версию ALFIS без графического интерфейса. На странице релизов такие версии имеют имена с добавлением nogui. + +Адреса вышестоящих DNS-серверов указываются в конфигурационном файле - параметр forwarders. + +==== Linux ==== + +Если вы запускаете ALFIS на Linux имейте ввиду: в большинстве современных дистрибутивов для того, чтобы использовать для прослушивания TCP-порты от 0 до 1024 необходимо обладать правами суперпользователя, т.к. эти номера портов зарезервированы для нужд системы и используются различными системными службами/демонами. DNS, по-умолчанию работающая на порту 53, относится к таким системным службам, поэтому, запуская ALFIS в качестве системного резолвера DNS на порту 53, вы должны запускать его с правами супервользователя (либо с соответствующими Capability в systemd-юните), иначе этот порт вами зарезервирован не будет. Так же, учитывайте то, что на этом же порту уже могут работать другие системные службы (systemd-resolved, dnsmasq, BIND, etc.). Убедитесь, что запускаете ALFIS, резервируя порт на таком IP-адресе, на котором он еще не занят. Скорее всего, ваш IPv6-адрес Yggdrasil будет не занят, и его можно указать в конфигурационном файле ''%%alfis.toml%%'' так: +[dns] +# Your DNS resolver will be listening on this address and port (Usual port is 53) +listen = "[2xx:xxx:xxxx:xxxx:xxxx:xxxx:xxxx:xxxx]:53" + +Также можно использовать для сервиса ALFIS [[ http://[222:a8e4:50cd:55c:788e:b0a5:4e2f:a92c]/yggdrasil:subnet_setting#практическая_часть | адрес подсети ]]\\ +Ниже указан пример для запуска на 53 порту (по-умолчанию) где постфикс ::53 в адресе - выделенный для службы адрес из свободного диапазона. + + - yggdrasilctl getself -> 3xx:xxxx:xxxx:xxxx::/64 + - ifconfig lo inet6 add 3xx:xxxx:xxxx:xxxx::53 (не сохраняется при рестарте системы) + - в listen /etc/alfis.conf указываем [3xx:xxxx:xxxx:xxxx::53]:53 + - в /etc/systemd/resolved.conf DNS=3xx:xxxx:xxxx:xxxx::53 + - systemctl restart alfis и systemctl restart systemd-resolved + +Далее, ознакомьтесь с тем, как прописать этот адрес в качестве системного резолвера: [[yggdrasil:dns:dns_sys_configure]]. + +===== Как проверить работу резолвера ALFIS ===== + +Примеры: + +dig AAAA @127.0.0.1 -p 5300 gostcoin.ygg +dig AAAA @127.0.0.1 -p 5300 nnmclub.ygg +short + +Здесь 127.0.0.1 - адрес, на котором работает резолвер, 5300 - порт резолвера (см. alfis.toml). + +Если резолвер ALFIS уже прописан в качестве системного резолвера и если он прослушивает порт 53 (DNS), то команда может быть такой: +dig AAAA rutor.ygg +dig AAAA nnmclub.ygg +short + +В результате выполнения команд вы должны будете увидеть IP-адреса указанных доменов. + +===== Описание конфигурационного файла ALFIS ===== + + +# Хэш первого блока в цепи, чтобы знать с какими узлами работать +origin = "0000001D2A77D63477172678502E51DE7F346061FF7EB188A2445ECA3FC0780E" +# Пути к файлам ваших ключей для их автоматической загрузки +key_files = ["key1.toml", "key2.toml", "key3.toml", "key4.toml", "key5.toml"] +# Какое количество блоков проверять при старте +check_blocks = 8 + +# Сетевые настройки +[net] +# Бутстрап-узлы (узлы, к которым вы подключитесь в первую очередь, чтобы получить информацию о других узлах) +peers = ["peer-v4.alfis.name:4244", "peer-v6.alfis.name:4244", "peer-ygg.alfis.name:4244"] +# Адрес и порт, на которых ваш узел будет ожидать подключения от других узлов +listen = "[::]:4244" +# Если вы хотите участвовать в обмене пирами, установить здесь true, false - если не хотите +public = true +# Разрешить подключения только внутри сети Yggdrasil (входящие и исходящие) (https://yggdrasil-network.github.io) +yggdrasil_only = false + +# Настройки DNS-резолвера +[dns] +# DNS-резолвер будет ожидать подключения на этом адресе и TCP-порте (обычно это порт 53) +listen = "127.0.0.1:53" +# Сколько потоков породит DNS-сервер +threads = 20 +# DNS-серверы AdGuard (для фильтрации рекламы и отслеживающих трэкеров) +forwarders = ["https://dns.adguard.com/dns-query"] +#forwarders = ["94.140.14.14:53", "94.140.15.15:53"] +# Серверы Cloudflare +#forwarders = ["https://cloudflare-dns.com/dns-query"] +#forwarders = ["1.1.1.1:53", "1.0.0.1:53"] + +# DNS-серверы для резолва доменов провайдеров DoH +bootstraps = ["9.9.9.9:53", "94.140.14.140:53"] + +# Поддержка файла hosts (/etc/hosts) (для разрешения локальных имен или блокировки рекламы) +#hosts = ["system", "adblock.txt"] + +#Настройки майнинга +[mining] +# Количество потоков CPU для майнинга, ноль = количество ядер CPU +threads = 0 +# Установить низкий приоритет для потоков майнинга +lower = true + + +===== Параметры командной строки ===== + + +Опции: + -h, --help Вывод этой подсказки + -n, --nogui Запуск без графического интерфейса (используется по-умолчанию для сборок без GUI) + -v, --version Вывод версии и выход + -d, --debug Выводить еще больше отладочной информации + -b, --blocks Показать содержимое блоков в базе данных и завершить работу + -g, --generate Генерировать новый конфигурационный файл (будет выведен в консоль) + -k, --gen-key FILE Генерирование (майнинг) новых ключей и сохранение их в файл + -l, --log FILE Записывать лог в файл + -s, --status FILE Записывать статус в файл (информация о количестве узлов, блоков, ключей, доменов) + -c, --config FILE Путь к конфигурационному файлу + -w, --work-dir DIRECTORY + Путь к рабочей директории + -u, --upgrade FILE Путь к конфигурационному файлу, который вы хотите обновить. Обновлённый файл будет выведен в консоль. + + +===== Публичные серверы DNS ALFIS ===== +ALFIS предназначен для локального разворачивания с использованием сервиса DNS на адресе ''127.0.0.1:53''. Однако существуют общедоступные серверы, использование которых избавляет от запуска ALFIS на своем устройстве. Такие серверы собраны на странице: [[yggdrasil:dns:internal_dns]]. + +===== Дополнительно ===== + +==== Домен .at ==== + +Благодаря [[user:ufm]] все Yggdrasil-адреса, для которых есть доменное имя ALFIS (оканчивающееся на ''%%.ygg%%''), доступны [//без дополнительных настроек//] через домен ''%%.at%%''. Т.е., ресурс с доменным именем ALFIS, вида ''%%domain.ygg%%'' будет доступен и по доменному имени ''%%domain.ygg.at%%''. При этом, нет необходимости менять свои настройки DNS, прописывать DNS-сервера ALFIS и т.п. + +Для примера: + * эта wiki доступна по адресу: http://howto.ygg.at; + * список сайтов доступен по адресу: http://sites.ygg.at. + +''%%.ygg.at%%'' резолвится в Yggdrasil-IPv6-адрес. + +==== Настройка браузеров ==== + +По-умолчанию, браузеры интерпретируют неизвестные доменные зоны как поисковую фразу. + +Чтобы добавить поддержку новых доменных зон, необходимо добавить соответствующие настройки для [[ yggdrasil:web-browsers:chrome_with_yggdrasil | Chrome ]] и [[ yggdrasil:web-browsers:firefox_with_yggdrasil | Firefox ]]. +====== Ссылки ====== + +Репозиторий ALFIS на Github: https://github.com/Revertron/alfis \\ +Описание ALFIS от разработчика (RU): https://github.com/Revertron/Alfis/tree/master/docs \\ +Канал поддержки пользователей ALFIS в telegram: https://t.me/ALFIS_RU \\ +Сообщение [[user:ufm]] о домене .at: [[https://matrix.to/#/!lAbIGDMfTUNreAuBOl:matrix.org/$lIglLUwoRAhU88fZpQ8ISElHR7xTOwijlJ4U0Zp-SyQ?via=matrix.org&via=t2bot.io&via=twinkle.lol|Сообщение в matrix]] + diff --git a/data/pages/yggdrasil/dns/dns.txt b/data/pages/yggdrasil/dns/dns.txt new file mode 100644 index 0000000..b4a9238 --- /dev/null +++ b/data/pages/yggdrasil/dns/dns.txt @@ -0,0 +1,11 @@ +{{indexmenu_n>2}} +====== DNS ====== +DNS - Domain Name System - Cистема доменных имён. + +===== Статьи внутри раздела ===== + +{{indexmenu>:yggdrasil:dns}} + +====== Ссылки ====== + +[[wpru>DNS|https://ru.wikipedia.org/wiki/DNS]] \ No newline at end of file diff --git a/data/pages/yggdrasil/dns/dns_sys_configure.txt b/data/pages/yggdrasil/dns/dns_sys_configure.txt new file mode 100644 index 0000000..64236ec --- /dev/null +++ b/data/pages/yggdrasil/dns/dns_sys_configure.txt @@ -0,0 +1,95 @@ +====== Настройка DNS в различных операционных системах ====== + +Для корректного разрешения в системе доменных имен, необходимо прописать в ней адреса DNS-серверов. +В различных ОС это делается по-разному. Ниже приведены примеры с указанием [[yggdrasil:dns:alfis#список_публичных_серверов|публичных серверов]] [[yggdrasil:dns:alfis|ALFIS]]. + +===== Системы c systemd-resolved ===== + +Этот способ подойдет для [[wp>https://ru.wikipedia.org/wiki/Ubuntu|Ubuntu]] 15.10+, [[wp>https://ru.wikipedia.org/wiki/Linux_Mint|Mint]] 18.0+ и других дистрибутивов на базе [[wp>https://ru.wikipedia.org/wiki/Debian|Debian]] версии 8 и выше, а так же, дистрибутивов, в которых [[wp>https://ru.wikipedia.org/wiki/Systemd|systemd]] установлен по-умолчанию ([[wp>https://ru.wikipedia.org/wiki/Red_Hat_Enterprise_Linux|RHEL]] 7+, [[wp>https://ru.wikipedia.org/wiki/CentOS|CentOS]] 7+, [[wp>https://ru.wikipedia.org/wiki/Fedora|Fedora]] 15+ и др.). + +В файл ''%%/etc/systemd/resolved.conf%%'' нужно прописать следующее: +[Resolve] +DNS=302:db60::53 300:6223::53 302:7991::53 300:170::53 +Domains=~. + +здесь перечислены адреса DNS-серверов через пробел, //без указания номеров портов//. + +в отдельных случаях можно отключить директиву + +DNSStubListener=no + + +Далее нужно выполнить перезапуск службы systemd-resolved: +sudo systemctl restart systemd-resolved + +===== Системы без systemd ===== + +Способ подойдет для систем, где для конфигурирования основного системного резолвера используется файл ''%%/etc/resolv.conf%%'' ([[wp>https://ru.wikipedia.org/wiki/Slackware|Slackware]] и др.). + +В файл ''%%/etc/resolv.conf%%'' нужно прописать следующее: + +nameserver 302:db60::53 +nameserver 300:6223::53 +nameserver 302:7991::53 +nameserver 300:170::53 + +**Примечание:** в некоторых случаях может потребоваться отключить для [[wp>https://ru.wikipedia.org/wiki/NetworkManager|NetworkManager]] управление резолвером (если NetworkManager присутствует в системе):\\ +В файле ''%%/etc/NetworkManager/NetworkManager.conf%%'', в секции ''%%[main]%%'' добавляется строка: +dns=none +После этого внесенные изменения в ''%%/etc/resolv.conf%%'' не будут перезаписываться при перезагрузке (перезапуске NetworkManager). + +==== dhcp/resolvconf ==== + +Если в системе используется динамическая конфигурация dhcp/resolvconf, следует обратить внимание на файл ''%%/etc/dhcp/dhclient.conf%%'' и закомментировать строки: + +# domain-name, domain-name-servers, domain-search, host-name, +# dhcp6.name-servers, dhcp6.domain-search, dhcp6.fqdn, dhcp6.sntp-servers, + + +Затем, добавить соответствующие nameserver в ''%%/etc/resolvconf/resolv.conf.d/base%%'' и перезагрузить настройки: + + +resolvconf -u + + +Проверить результат можно командой ''%%dig%%'', в результирующем файле ''%%/etc/resolv.conf%%'' необходимый сервер должен быть расположен в начале списка. + + + + +===== Windows ===== + +Щёлкаем ПКМ по иконке "Сеть" в [[wp>https://ru.wikipedia.org/wiki/%D0%9E%D0%B1%D0%BB%D0%B0%D1%81%D1%82%D1%8C_%D1%83%D0%B2%D0%B5%D0%B4%D0%BE%D0%BC%D0%BB%D0%B5%D0%BD%D0%B8%D0%B9|системном трее]], выбираем "Центр управления сетями и общим доступом". В открывшемся окне нажимаем "Изменение параметров адаптера", щёлкаем ПКМ на адаптере Yggdrasil, выбираем "Свойства", в открывшемся окне выделяем "Протокол Интернета версии 6", нажимаем кнопку "Свойства", в поле "Предпочитаемый DNS-сервер" прописываем: 302:db60::53, в поле "Альтернативный DNS-сервер" прописываем 300:6223::53, нажимаем ОК во всех окнах, где есть эта кнопка. + +Так же, в Windows настроить DNS можно из командной строки: +netsh interface ip set dns name="Имя подключения" static 302:db60::53 +netsh interface ip set dns name="Имя подключения" 300:6223::53 index=2 + +Можно использовать такой [[wpru>VBScript|VB-скрипт]]: +Set oShell = CreateObject("Shell.Application") +oShell.ShellExecute "netsh.exe", "interface ip set dns name=""Подключение по локальной сети"" static 302:db60::53", "", "runas", 0 +oShell.ShellExecute "netsh.exe", "interface ip add dns name=""Подключение по локальной сети"" 300:6223::53 index=2", "", "runas", 0 + +'возврат к значениям, устанавливаемым DHCP +'oShell.ShellExecute "netsh.exe", "interface ip set dnsservers name=""Подключение по локальной сети"" source=dhcp", "", "runas", 0 + + +Пример [[wpru>PowerShell|PowerShell]]-скрипта: +Set-DnsClientServerAddress -InterfaceAlias "Yggdrasil" -ServerAddresses ("302:7991::53", "302:db60::53", "300:6223::53", "324:71e:281a:9ed3::53") + +Если [[yggdrasil:Yggdrasil]] запускается, как системная служба, и вы хотите прописать DNS на адаптер Yggdrasil, то с помощью планировщика Windows можно создать задание, из которого будет запускаться нужный скрипт при активации нужного сетевого подключения. Пример можно посмотреть здесь: [[https://superuser.com/questions/262799/how-to-launch-a-command-on-network-connection-disconnection|How to launch a command on network connection/disconnection?]] + +====== Очистка кэша DNS ====== + +В некоторых случаях, когда меняется IP-адрес, к которому привязано доменное имя (например, если в [[yggdrasil:dns:alfis|ALFIS]] перемайнили домен на новый адрес), система продолжает выдавать старый IP-адрес. Это связано с [[wpru>Кэш|кешированием]] данных DNS в вашей системе. В таких случаях нужно просто очистить кэш DNS. + +Linux c systemd-resolved: + +sudo systemd-resolve --flush-caches + +Windows: +ipconfig /flushdns + +Так же, может потребоваться очистить кэш браузера, которым вы пользуетесь. + +Подробнее об этом можно почитать [[https://www.google.com/search?q=%D0%BA%D0%B0%D0%BA+%D0%BE%D1%87%D0%B8%D1%81%D1%82%D0%B8%D1%82%D1%8C+%D0%BA%D1%8D%D1%88+dns+%D0%B2+linux|здесь]] или [[https://www.google.com/search?q=%D0%BA%D0%B0%D0%BA+%D0%BE%D1%87%D0%B8%D1%81%D1%82%D0%B8%D1%82%D1%8C+%D0%BA%D1%8D%D1%88+dns+%D0%B2+windows|здесь]]. \ No newline at end of file diff --git a/data/pages/yggdrasil/dns/docker.txt b/data/pages/yggdrasil/dns/docker.txt new file mode 100644 index 0000000..5a27502 --- /dev/null +++ b/data/pages/yggdrasil/dns/docker.txt @@ -0,0 +1,62 @@ +====== EmerDNS, ALFIS через Docker ====== + +Ниже описана установка [[wpru>Docker|docker]]-контейнеров, в которые добавлена работающая связка [[yggdrasil:dns:emerdns|EmerDNS]], [[yggdrasil:dns:alfis|ALFIS]] и [[wp>Unbound_(DNS_server)|Unbound]] сервера. + +Предполагается, что запрос DNS будет приходить на Unbound и далее перенаправляться согласно правилам на ALFIS или EmerDNS. + +===== Установка ===== +Клонируем git-репозиторий: + +git clone https://github.com/RNDpacman/blockchain_dns_system.git + + +Переходим в директорию: + +cd ./blockchain_dns_system + + +Запускаем контейнеры через compose-файл: + +sudo docker-compose up -d + + +После выполнения этой команды все необходимые образы будут собраны, загружены и запущены. + +После запуска контейнеров необходимо дождаться загрузки блокчейнов децентрализованных DNS. + +Блокчейн ALFIS загружается быстро, так как у него небольшой размер, EmerDNS будет загружаться дольше, около 2 часов. + +По-умолчанию будет прослушиваться порт 53 на всех локальных интерфейсах. + +===== Проверка работы ===== + +Проверить, что БЧ загрузился можно сделав запрос на разрешение доменного имени. + +Alfis: + +host howto.ygg 127.0.0.1 + + +EmerDNS: + +host rtfm.emc 127.0.0.1 + + +Интернет: + +host iana.org 127.0.0.1 + + +Следить за процессом закачки БЧ Emercoin можно при помощи команды: + +docker exec emer-dns emercoin-cli -datadir=/emc getinfo + + +====== Ссылки ====== + +Репозиторий проекта на GitHub: https://github.com/RNDpacman/blockchain_dns_system \\ +Репозиторий проекта alfis на GitHub: https://github.com/cofob/containers/tree/master/dns/alfis \\ +Репозиторий проекта emercoin на GitHub: https://github.com/RNDpacman/emercoin_docker \\ +Репозиторий проекта unbound на GitHub: https://github.com/MatthewVance/unbound-docker \\ + +~~DISCUSSION~~ diff --git a/data/pages/yggdrasil/dns/emerdns.txt b/data/pages/yggdrasil/dns/emerdns.txt new file mode 100644 index 0000000..7263285 --- /dev/null +++ b/data/pages/yggdrasil/dns/emerdns.txt @@ -0,0 +1,78 @@ +====== EmerDNS ====== + +**EmerDNS** - это децентрализованная система доменных имен, поддерживающая полный спектр [[wpru>Типы_ресурсных_записей_DNS|записей DNS]] и базирующаяся на распределенном блокчейнe [[https://emercoin.com/ru/|Emercoin]]. + +Блокчейн Emercoin имеет значительно больший объем по сравнению с распределенной системой доменных имен [[yggdrasil:dns:|ALFIS]], однако EmerDNS более функционален, более распространен в Интернет, и назначение самого блокчейна Emercoin не ограничивается только EmerDNS. На 26.03.2022 объем блокчейна Emercoin составляет около 943 МБ. + +В EmerDNS у обычного пользователя отсутствует необходимость майнинга для создания или редактирования записей о доменных именах, однако, при этом, для внесения изменений в DNS-записи требуется потратить 0,0006 EMC, что на 26.03.2022 меньше российской копейки. + +Технически EmerDNS может поддерживать любую [[wpru>Доменное_имя#Доменная_зона|DNS-зону]] или [[wpru>Домен_верхнего_уровня|TLD]]. Однако для бесшовной интеграции в стандартное дерево DNS и предотвращения конфликтов с существующими DNS-зонами в настоящее время рекомендуется создавать записи EmerDNS в следующих зонах: + +^ Зона ^ Целевое назначение ^ +|.coin |веб-сайты цифровой валюты и торговли| +|.emc |сайты, связанные с проектом Emercoin| +|.lib |от слов library (библиотека) и liberty (свобода) | +|.bazar |рынки, маркеты| + +[[http://howto.lib/|howto.lib]] - доменное имя данного ресурса в EmerDNS. + +===== Как получить доступ к доменным именам EmerDNS ===== + +Доступ к доменам EmerDNS можно получить различными способами: + +==== Расширения для браузеров ==== + +Существуют сторонние плагины для браузеров, которые позволяют посещать домены EmerDNS: + + * Расширение [[https://peername.org/|Peername.org]] (Firefox, Chrome, Opera) + * Расширение [[https://fri-gate.org/|friGate]] (Chrome, Opera) + +Более полный и актуальный список расширений браузеров, поддерживающих EmerDNS, можно найти [[https://emercoin.com/documentation/links-resources|здесь]]. + +Не все плагины подойдут для использования с [[yggdrasil:yggdrasil|Yggdrasil]], т.к., они используют прокси-сервера, на которых может не быть Yggdrasil. + +==== Публичные резолверы OpenNIC ==== + +Emercoin поддерживает пиринговое соглашение с провайдером DNS [[wpru>OpenNIC|OpenNIC]], что означает, что домены, зарегистрированные в EmerDNS, доступны по умолчанию для всех пользователей DNS-серверов OpenNIC. Таким образом, можно воспользоваться одинм из публичных серверов OpenNIC c этой страницы: https://servers.opennicproject.org/ (о том, как изменить DNS-сервер в операционной системе читайте в статье [[yggdrasil:dns:dns_sys_configure]]). + +==== Локальный DNS, встроенный в клиент EmerDNS ==== + +Для активации встроенного DNS-резолвера нужно внести в конфигурационный файл ''%%emercoin.conf%%'' такие строки: +EmerDNS=1 # Активация DNS-сервера. Значение по-умолчанию: 0 (выключено) +EmerDNSport=nnnn # Порт DNS-резолвера, значение по-умолчанию: 5335 + +==== DNSCrypt c резолвером altername ==== + +Можно использовать [[pi-hole:dnscrypt|DNSCrypt]] с публичным резолвером [[https://github.com/DNSCrypt/dnscrypt-resolvers/blob/master/v3/public-resolvers.md#altername|altername]]. + +==== OpenNIC- или EmerDNS-proxy ==== + +//**Важно:** этот способ не годится для использования с сайтами внутри Yggdrasil и добавлен просто для сведений.// + + * http://proxy.opennicproject.org/ + +===== Как зарегистрировать доменное имя EmerDNS ===== + +Официальная документация на руссокм языке: [[https://emercoin.com/ru/documentation/blockchain-services/emerdns/emerdns-introduction/#create|Создание и поддержка записи DNS]]. + +===== Где взять монеты Emercoin (EMC) ===== + +Монеты Emercoin, как и многию других криптовалют, добываются путём майнинга (минтинга) и обмениваются на нескольких криптовалютных биржах. + +Список обменников, в которых можно поменять рубли на криптовалюту: https://www.bestchange.ru/sberbank-to-bitcoin.html + +//**Совет:** рубли лучше менять на наиболее ликвидный биткоин, а биткоин уже на бирже на Emercoin (в обменниках Emercoin, скорее всего, не будет). В списке обменников обращайте внимание на примечание от скольки рублей принимаются переводы.// + +Биржи, на которых есть Emercoin перечислены на этой странице: https://emercoin.com/ru/for-coinholders +\\ + +Для экспериментов вы можете использовать бесплатные монеты из сети [[https://habr.com/ru/companies/emercoin/articles/335338/|Testnet]] +\\ + +Монеты так же можно попросить у сообщества в телеграм чате: https://t.me/emernews +======Ссылки====== + * Офиц. сайт Emercoin: https://emercoin.com/ru/ + * Офиц. документация EmerDNS: https://emercoin.com/ru/documentation/blockchain-services/emerdns/emerdns-introduction/ + * Переформатированная документация: https://rtfm.emercoin.com/ https://rtfm.emc/ (EmerDNS) + + diff --git a/data/pages/yggdrasil/dns/internal_dns.txt b/data/pages/yggdrasil/dns/internal_dns.txt new file mode 100644 index 0000000..7daa898 --- /dev/null +++ b/data/pages/yggdrasil/dns/internal_dns.txt @@ -0,0 +1,58 @@ +====== Внутрисетевые DNS ====== + +Имена сайтов, к которым мы привыкли, называются доменами и не имеют непосредственного отношения к серверу, на котором расположен сайт. Если IP можно сравнить с реальным адресом: город, улица, дом, то домен - имя в телефонном справочнике. В качестве телефонных справочников выступают DNS-сервера, к которым обращаются пользовательские устройства и получают в ответ адрес целевого ресурса. + +Существует множество доменных зон вроде .ru, .com, .us. Все они содержатся крупными компаниями и являются частью их бизнеса. В подавляющем количестве доменных регистраторов предусмотрена исключительно платная регистрация домена. Как известно, благотворительностью корпорации не занимаются. + +Несмотря на то, что традиционные домены могут резолвить //(разрешать, сообщать)// адреса [[yggdrasil:Yggdrasil]], их использование нецелесообразно, т.к. обращение к ним происходит через интернет. Некоторые из таких DNS-серверов, можно найти на официальной странице проекта в разделе "Public Services" (см. [[#Ссылки|ссылки]]). Зачастую это просто зеркала традиционных DNS-серверов. В таком сценарии просматривается некоторая неполноценность: происходит "зеркалирование" платного централизованного домена в меш-сеть, которая призвана стать новым этапом в развитии технологий. В децентрализованной сети логично использовать децентрализованную систему доменных имен. Такие системы есть, их несколько. Внутри Yggdrasil можно использовать [[yggdrasil:dns:alfis|ALFIS]] или [[yggdrasil:dns:emerdns|EmerDNS]]. Для регистрации доменного имени в этих системах вам не потребуется фотография паспорта, обращение в офис, или оплата каких-то счетов. Все, что нужно - добавить запись о доменном имени в блокчейн, в соответствии с документацией к конкретной системе. + +[[#Список_серверов|Ниже, на этой странице]] собраны публичные исключительно внутрисетевые адерса DNS, которые можно использовать без установки дополнительного ПО. + +Адрес этих серверов (либо адрес собственного резолвера (ALFIS, EmerDNS)) нужно указать в вашей системе в качестве дополнительного DNS-сервера. + +Механизм настойки DNS в вашей системе зависит от самой ОС. В Windows эти адреса указываются в свойствах протокола IPv6 адаптера сетевого подключения, в Linux - в конфигурационных файлах systemd-resolved или resolv.conf. Подробнее о настройке разрешения имен в различных ОС читайте в статье [[yggdrasil:dns:dns_sys_configure|Настройка DNS в различных операционных системах]]. + +Узнать вручную какой IP-адрес соответствует определенному доменному имени можно с помощью утилит dig или nslookup.\\ +Примеры использования (без указания в параметрах утилит адреса резолвера адрес ресурса будет возвращен, если резолвер уканаз в настройках ОС):\\ + + +dig AAAA rutor.ygg +short +nslookup -type=AAAA rutor.ygg +ping rutor.ygg + + +====== Список серверов ====== + +Публичные внутрисетевые сервера DNS, которые можно использовать без дополнительного ПО, перечислены в таблице ниже. + +//**Важно:** пожалуйста, публикуйте свои сервера, если они располагаются на достаточно производительном оборудовании, подключены к быстрым пирам и работают 24/7. В противном случае их массовое использование будет проблематичным. // + +^ IP сервера ^ Размещение ^ Администратор ^ Примечание ^ +| 302:db60::53 | Франкфурт, Германия | [[user:rev|Revertron]] | [[yggdrasil:dns:alfis|ALFIS]], OpenNIC, AdGuard, Clearnet | +| 300:6223::53 | Братислава, Словакия | [[user:rev|Revertron]] | [[yggdrasil:dns:alfis|ALFIS]], OpenNIC, AdGuard, Clearnet | +| 302:7991::53 | Амстердам, Нидерланды | [[user:rev|Revertron]] | [[yggdrasil:dns:alfis|ALFIS]], OpenNIC, AdGuard, Clearnet | +| 301:1088::53 | Буффало, США | [[user:rev|Revertron]] | [[yggdrasil:dns:alfis|ALFIS]], OpenNIC, AdGuard, Clearnet +|300:4b63:bc3e:f090:babe::0|Нидерланды| [[user:vpn.anon]] |[[yggdrasil:dns:alfis|ALFIS]], [[yggdrasil:dns:emerdns|EMERDNS]], ClearNet| +|303:71a7:ae08:b479::53|Украина| [[user:ufm]] |.ygg, ClearNet| +|301:5eb5:f061:678e::53|Латвия| YGGverse |.ygg, ClearNet| +====== Дополнительно ====== + +Также, сопоставление доменного имени IP-адресу можно вручную прописать в файле ''%%/etc/hosts%%'' (''%%c:\windows\system32\drivers\etc\hosts%%'').\\ +Этот способ подойдёт тем, кто по каким-то причинам не хочет использовать DNS-сервер и пользуется только теми сервисами, которые сам прописал в hosts. + +Читайте так же о настройках Mozilla Firefox для корректной работы с адресами Yggdrasil: [[yggdrasil:web-browsers:firefox_with_yggdrasil|Настройки Firefox для Yggdrasil]] + +====== Доступ через .ygg.at ====== + +Ко всем записям в домене .ygg есть доступ через "белый" домен [[yggdrasil:dns:alfis#дополнительно_домен_at|.ygg.at]] - т.е. например, howto.ygg и howto.ygg.at - это, по сути, одна и та же запись. + +====== Доступ через интернет ====== + +Список бесплатных DNS серверов для доступа к ресурсам из Интернет, подключения сертификатов Let's Encrypt и других целей + + * https://www.duckdns.org - максимум 5 доменов, только записи A/AAAA + * https://desec.io - максимум 15 доменов, поддерживает NS и другие записи +====== Ссылки ====== +Официальный список сервисов Yggdrasil: https://yggdrasil-network.github.io/services.html + +~~DISCUSSION~~ diff --git a/data/pages/yggdrasil/dns/meshname.txt b/data/pages/yggdrasil/dns/meshname.txt new file mode 100644 index 0000000..f3114c7 --- /dev/null +++ b/data/pages/yggdrasil/dns/meshname.txt @@ -0,0 +1,18 @@ +====== meshname ====== + +**meshname** - система доменных имен, предназначенная для использования в децентрализованных mesh-сетях с IPv6-адресацией и не требующая регистрации доменных имен. Доменное имя формируется автоматически, путем base32-кодирования бинарного представления IP-адреса. Сервис meshnamed реализован на языке программирования [[go:go|Go]]. + +На данный момент в meshname используются две зоны: ''.meshname'' и ''.meship''. + +''.meshname'' требует наличие запущенного meshnamed на сервере, IP-адрес которого необходимо определить. Позволяет использовать субдомены. + +''.meship'' - это просто закодированный IPv6-адрес, который будет возвращен локально запущенным meshnamed. + +Доменные имена meshname не являются легко читаемыми и запоминаемыми, но позволяют работать с ПО, которое требует наличия доменного имени. + +Для примера, так выглядит доменное имя meshname этой wiki: airkrzcqzucvy6eowcsu4l5jfq.meship + +====== Ссылки ====== + +Репозиторий проекта на GitHub: https://github.com/zhoreeq/meshname \\ +Meshname – DNS судного дня (RU): https://habr.com/ru/post/550688/ diff --git a/data/pages/yggdrasil/dns/popuradns.txt b/data/pages/yggdrasil/dns/popuradns.txt new file mode 100644 index 0000000..c78ba03 --- /dev/null +++ b/data/pages/yggdrasil/dns/popuradns.txt @@ -0,0 +1,18 @@ +====== PopuraDNS: Полнофункциональный DNS сервер с поддержкой meshname протокола ====== + + +https://github.com/popura-network/PopuraDNS + + + * Из коробки поддерживает meshname протокол, универсальную систему имен для всех IPv6 mesh сетей ([[yggdrasil:yggdrasil|Yggdrasil]] и [[wpru>Cjdns|cjdns]]) + * Полнофункциональный, работает и как рекурсивный и как авторитативный DNS сервер + * Защищает DNS запросы шифрованием DNS-over-TLS + * Резолвит крутые децентрализованные блокчейн домены [[yggdrasil:dns:alfis|ALFIS]] + +По сути, является кастомной сборкой известного в узких кругах сервера [[https://coredns.io/|CoreDNS]] (его используют в CERN, AdGuard и еще много где). + +===== Использование ===== + +Конфиг подтягивается из рабочей директории программы, либо можно указать путь конфига аргументом ''%%-conf%%'' + +Посмотреть все аргументы: ''%%coredns -help%%'' diff --git a/data/pages/yggdrasil/dns/unbound_wyrd.txt b/data/pages/yggdrasil/dns/unbound_wyrd.txt new file mode 100644 index 0000000..da9291c --- /dev/null +++ b/data/pages/yggdrasil/dns/unbound_wyrd.txt @@ -0,0 +1,40 @@ +====== Настройка Unbound с Alfis и Wyrd DNS ====== + +^ :!: **Внимание!** ^ +| **Проект Wyrd устарел и не рекомендуется к использованию.** Crawler остановлен навсегда, новые домены более не добавляются автоматически ([[https://github.com/Revertron/wyrd/blob/master/README.md|readme.md]]).\\ Автором Wyrd предлагается перейти на использование DNS на основе блокчейна - [[yggdrasil:dns:alfis|ALFIS]]. | + +Unbound — кэширующий DNS-сервер и рекурсор для Unix-систем. Unbound может работать отличным локальным кэширующим сервером, при этом форвардя на Wyrd DNS только запросы к внутрисетевым доменам ''.ygg'' и ''.null''. Это можно сделать следующим конфигом: + + +server: + interface: ::0 # будем слушать на всех адресах IPv6 (и IPv4 в Linux) + access-control: 0.0.0.0/0 allow + access-control: ::0/0 allow + hide-identity: yes + hide-version: yes + hide-trustanchor: yes + +# у этих зон нет DNSSEC-подписей, поэтому их проверку нужно отключить +domain-insecure: "ygg." +domain-insecure: "null." + +forward-zone: + name: "." + forward-addr: 1.1.1.1 # если используете другой ресолвер для остальных сетей, укажите свой + +forward-zone: + name: "ygg." + forward-addr: 301:2522::53 # желательно указать несколько forward-addr с различными адресами Wyrd + +forward-zone: + name: "null." + forward-addr: 301:2522::53 + + +Данная конфигурация предполагaает, что Unbound находится на машине за файрволлом; если это не так, следует более тщательно настроить ACL. + +====== Настройка с Alfis ====== + +Unbound можно также направить на уже запущенный локальный резолвер Alfis (указать в конфигурации ''forward-zone'' выше адрес, на котором запущен резолвер Alfis, по умолчанию это ''127.0.0.1:53''). В таком случае необходимо добавить для всех зон, поддерживаемых Alfis, в конфигурацию Unbound соответствующие им директивы ''domain-insecure'' и ''forward-zone'', указывая им ''forward-addr'', на котором запущен DNS-сервер Alfis. На текущий момент (июль 2021) это 10 доменных зон, указанных в [[https://github.com/Revertron/Alfis/blob/6c837c0f45fd136814abf6f0523811a945d3175c/README.md#how-it-works/README.md|документации]] Alfis: + +> There are 10 domain zones available to get domain in: ''.anon'', ''.btn'', ''.conf'', ''.index'', ''.merch'', ''.mirror'', ''.mob'', ''.screen'', ''.srv'', ''.ygg''. But, ''.anon'' and ''.ygg'' are bound to have IP-addresses from Yggdrasil Network only. diff --git a/data/pages/yggdrasil/email.txt b/data/pages/yggdrasil/email.txt new file mode 100644 index 0000000..1a1597e --- /dev/null +++ b/data/pages/yggdrasil/email.txt @@ -0,0 +1,10 @@ +====== Электронная почта ====== + +**Электронная почта** (англ. email, e-mail [iˈmeɪl], от англ. electronic mail) — технология и служба по пересылке и получению электронных сообщений (называемых «письма», «электронные письма» или «сообщения») между пользователями компьютерной сети. + +===== Статьи внутри раздела ===== +{{indexmenu>:yggdrasil:email}} + +====== Ссылки ====== + +[[wpru>Электронная_почта|Электронная почта]] \ No newline at end of file diff --git a/data/pages/yggdrasil/email/home_email_server.txt b/data/pages/yggdrasil/email/home_email_server.txt new file mode 100644 index 0000000..6166dd9 --- /dev/null +++ b/data/pages/yggdrasil/email/home_email_server.txt @@ -0,0 +1,96 @@ +====== Домашний почтовый сервер ====== +Пример конфигурации почтового сервера для одного пользователя с доступом из Yggdrasil на базе [[wpru>Dovecot|Dovecot]] и [[wpru>Postfix|Postfix]]. + +===== Создаем пользователя почты ===== + +useradd -m -d /home/franco -s /bin/false franco +echo "root: franco@corelli.ygg" >> /etc/aliases + + +=====Настройка Dovecot===== +Конфигурационный файл: ''/etc/dovecot/dovecot.conf'' + +mail_location = maildir:~/Maildir:LAYOUT=fs +protocols = imap +disable_plaintext_auth = no + +userdb { + driver = passwd +} +auth_username_format = %n +passdb { + driver = pam +} + +service auth { + unix_listener /var/spool/postfix/private/auth { + mode = 0666 + user = postfix + group = postfix + } +} + +ssl = no + +namespace inbox { + inbox = yes + mailbox Drafts { + special_use = \Drafts + auto = subscribe + } + mailbox Junk { + special_use = \Junk + auto = subscribe + } + mailbox Trash { + special_use = \Trash + auto = subscribe + } + mailbox Sent { + special_use = \Sent + auto = subscribe + } +} + + +=====Настройка Postfix===== +Конфигурационный файл: ''/etc/postfix/main.cf'' + + +smtpd_banner = $myhostname ESMTP MS_Exchange/OpenVMS +biff = no +appenddot_mydomain = no +readme_directory = no +compatibility_level = 2 +smtpd_use_tls = no + +smtpd_relay_restrictions = permit_mynetworks permit_sasl_authenticated defer_unauth_destination +myhostname = corelli.ygg +mydomain = corelli.ygg +alias_maps = hash:/etc/aliases +alias_database = hash:/etc/aliases +myorigin = $mydomain +mydestination = corelli.ygg, localhost.localdomain, localhost +relayhost = +mynetworks = 127.0.0.0/8 [::ffff:127.0.0.0]/104 [::1]/128 +mailbox_size_limit = 0 +recipient_delimiter = + +inet_interfaces = all +inet_protocols = all + +smtpd_sasl_auth_enable = yes +smtpd_sasl_type = dovecot +smtpd_sasl_path = private/auth + +home_mailbox = Maildir/ +mailbox_command = + + +Почтовый клиент [[wpru>Mozilla_Thunderbird|Thunderbird]] подключается к нему автоматически (хоть красочно ругается на отсутствие шифрования).\\ +Дельта Чат[[#Ссылки|[см. ссылки]]] требует задания параметров подключения явно, но подключается. + +====== Ссылки ====== +DOVECOT. The Secure IMAP server (EN): https://www.dovecot.org/ \\ +The Postfix Home Page (EN): http://www.postfix.org/ \\ +Мессенджер Delta Chat: https://delta.chat/ru/ \\ +Thunderbird: https://www.thunderbird.net/ru/ diff --git a/data/pages/yggdrasil/email/yggmail.txt b/data/pages/yggdrasil/email/yggmail.txt new file mode 100644 index 0000000..8631af2 --- /dev/null +++ b/data/pages/yggdrasil/email/yggmail.txt @@ -0,0 +1,186 @@ +====== Yggmail ====== + +Это [[yggdrasil:email|электронная почта]], но немного не такая, какой вы ее знаете. + +В мире существует множество всевозможных служб обмена сообщениями, но асинхронная связь по-прежнему востребована и широко распространена. Yggmail разработан в соответствии со стандартами, которые большинству людей хорошо знакомы и понятны. + +[[Yggdrasil:Yggdrasil]] хорошо подходит для доставки электронной почты и позволяет Yggmail работать даже в закрытых сетях, где Интернет или другие возможности подключения ограничены или просто недоступны. Yggmail гарантирует сквозное шифрование и достаточно хорошо работает в сетях с изменчивой топологией. + +===== Введение ===== + +**Yggmail** - это агент электронной почты, реализованный в одном бинарном файле, который может отправлять и получать сообщения через сеть [[Yggdrasil:Yggdrasil]]. + + * Yggmail можно запустить где угодно — ваш почтовый ящик сохраняется прямо на вашей машине; + * Реализованы протоколы IMAP и SMTP для отправки и получения почты, таким образом, вы можете использовать свои любимые почтовые клиенты; + * Для обмена сообщениями Yggmail использует подключения встроенного в него узла Yggdrasil; + * Обмен сообщениями между двумя узлами Yggmail всегда защищен сквозным шифрованием; + * Узлы Yggdrasil и Yggmail в одной и той же сети могут обнаруживаются автоматически с помощью отправки широковещательных пакетов ([[yggdrasil:mpd|multicast]]), либо вы можете настроить статическое подключение к желаемым узлам Yggdrasil. + * Yggmail содержит в себе собственный узел Yggdrasil, но не использует отдельный TUN-адаптер, таким образом, Yggmail можно без проблем запускать на машине, где уже установлен и настроен сам Yggdrasil, а так же на машинах, где Yggdrasil не установлен (Yggmail не использует IP-пакеты, поэтому TUN не нужен; встроенный узел Yggdrasil используется в качестве транспорта, SMTP использует uTP). + +Адреса электронной почты формируются на основе ваших публичных ключей. Пример: \\ ''%%617b5772c6d10feda41fc6e0e43b976c4cc9383d3729310d3dc9e1332f0d9acd@yggmail%%''. + +===== Быстрый старт ===== + +Используйте последнюю версию [[go:go|Go]] для установки Yggmail: + +go install github.com/neilalexander/yggmail/cmd/yggmail@latest + +(подробнее об установке или обновлении Go можно прочесть [[go:go_installation|здесь]]) + +Yggmail будет установлен в директорию, указанную в переменной окружения GOPATH, для удобства вы можете указать этот путь в переменной PATH: + +export PATH=$PATH:`go env GOPATH`/bin + +Создайте свой почтовый ящик и установите пароль. База данных Yggmail будет автоматически создана в вашей рабочей директории, если она еще не существует: + +yggmail -password + +Запустите Yggmail, используя созданную в рабочей директории базу данных, указав при запуске либо multicast, либо статический узел Yggdrasil, либо и то и другое: + +yggmail -multicast +yggmail -peer=tls://... +yggmail -multicast -peer=tls://... + +Адрес вашей электронной почты будет выведен в log при запуске Yggmail. Так же, этот адрес необходимо будет использовать в качестве имени пользователя для подключений SMTP/IMAP. + +Подключитесь к Yggmail с помощью вашего почтового клиента. Примеры параметров подключения: + + * SMTP прослушивает TCP-порт 1025, имя пользователя - ваш адрес, аутентификация по паролю простым текстом, не использовать SSL/TLS + * IMAP прослушивает TCP-порт 1143, имя пользователя - ваш адрес, аутентификация по паролю простым текстом, не использовать SSL/TLS + +Теперь вы можете попробовать отправить электронное письмо другому пользователю Yggmail! + +===== Параметры запуска ===== + +Поддерживаются следующие параметры командной строки: + + * ''%%-peer=tls://... or -peer=tcp://...%%'' — подключение к указанному узлу Yggdrasil, подобно тому, как настраивается подключение к [[yggdrasil:public_peer|публичному пиру]]; + * ''%%-multicast%%'' - задействовать multicast peer discovery (автоматическое обнаружение) для узлов Yggdrasil в вашей локальной сети; + * ''%%-database=/path/to/yggmail.db%%'' — использовать указанный файл базы данных; + * ''%%-smtp=listenaddr:port%%'' — ожидать подключения SMTP на указанных адресе/порте; + * ''%%-imap=listenaddr:port%%'' — ожидать подключения IMAP на указанных адресе/порте; + * ''%%-password%%'' — установить IMAP/SMTP пароль (не имеет значения запущен Yggmail или нет, просто убедитесь, что Yggmail работает с нужной базой данных или что вы находитесь в нужной рабочей директории). + +===== Пример ===== + +При запуске на локальном компьютере без Yggdrasil, достаточно указать один [[https://publicpeers.neilalexander.dev/|пир]] (а в настройках почтового клиента - localhost): + +yggmail -peer=tls://94.140.114.89:4708 + +Так можно запустить Yggmail, чтобы он был доступен для подключения по SMTP / IMAP из локальной сети: + +yggmail -peer=tls://192.168.1.4:22953 -database=/home/user/go/bin/yggmail.db -smtp=192.168.1.4:1025 -imap=192.168.1.4:1143 +Здесь: + * 192.168.1.4 - адрес в локальной сети устройства, на котором запускается Yggmail (в моём случае, это RaspberryPi); на этом же устройстве запущен пир Yggdrasil, который принимает подключения на порту 22953. + * ''%%/home/user/go/bin/yggmail.db%%'' - путь к локальной базе Yggmail (см. выше) + +Таким образом мы подключаем Yggmail к нашему пиру Yggdrasil и открываем на этом устройстве в локальной сети порты 1025 и 1143. + +На любом другом устройстве в этой локальной сети настраиваем почтовый клиент (например, Thunderbird (notebook) или Почта (iPhone)) для подключения к получившемуся мини почтовому серверу, указав в настройках адрес 192.168.1.4 и соответствующие порты для SMTP и IMAP протоколов: 1025 и 1143. + +В дальнейшем работаем, как с любой другой почтой на других серверах. + +В этом примере ''%%-peer=tls://192.168.1.4:22953%%'' можно заменить на ''%%-multicast%%'', тогда Yggmail будет пытаться сам найти Yggdrasil в локальной сети с помощью отправки широковещательных пакетов. + +Пример systemd-unit'a для запуска yggmail: + +[Unit] +Description=Yggmail +Documentation=https://github.com/neilalexander/yggmail +After=network-online.target + +[Service] +Type=simple +ExecStart=/home/user/go/bin/yggmail -peer=tcp://192.168.1.4:22953 -database=/home/user/go/bin/yggmail.db -smtp=192.168.1.4:1025 -imap=192.168.1.4:1143 2>&1 +Restart=always +RestartSec=1 +TimeoutStopSec=0 + +[Install] +WantedBy=multi-user.target + + +Unit нужно сохранить в файл ''%%/lib/systemd/system/yggmail.service%%'' и выполнить команду: ''%%sudo systemctl enable --now yggmail%%'' (не забудьте указать корректные пути к yggmail и yggmail.db).\\ +Если все сделано правильно ''%%systemctl status yggmail%%'' покажет: "Active (running)". + +Таким же образом можно установить и запустить Yggmail на [[:VPS]] [cо статическим ("белым") IP-адресом], тогда этот почтовый сервер может стать доступным не только из локальной сети, но и через Интернет, и вы сможете отправлять и получать почту Yggmail со смартфона, находясь, где угодно, имея любое подключение к Интернет. Дополнительно соединения и аутентификацию на SMTP / IMAP можно защитить c помощью VPN. + +C учетом описанных ниже [[.:yggmail#Замечания|ограничений]] Yggmail [на данный момент] больше подходит для использования с мессенджером [[https://delta.chat/ru/|Delta Chat]], однако другие e-mail клиенты так же можно настроить для работы с ним. + +==== Пример настроек Delta Chat ==== + +Мессенджер доступен для популярных настольных операционных систем, а так же для [[wpru>IOS|iOS]] и [[wpru>Android]]. Ниже пример настроек клиента iOS, с учетом описанного выше. + + +^ Параметр ^ Значение ^ +| Адрес эл. почты | 36ef9bc3a91ffbcc511b33faa3bb72b31c140f18e3ef143559a0128be440de49@yggmail| +| Пароль | %%***%% (ваш пароль) | +| **Дополнительные параметры** || +| Параметры безопасности IMAP | Выкл.| +| IMAP логин | 36ef9bc3a91ffbcc511b33faa3bb72b31c140f18e3ef143559a0128be440de49@yggmail | +| IMAP сервер | 192.168.1.4 | +| IMAP порт | 1143 | +| Параметры безопасности SMTP | Выкл. | +| SMTP логин | 36ef9bc3a91ffbcc511b33faa3bb72b31c140f18e3ef143559a0128be440de49@yggmail | +| SMTP пароль | %%***%% (ваш пароль) | +| SMTP сервер | 192.168.1.4| +| SMTP порт |1025 | +| Проверка сертификатов| Принимать недействительный | + + + +{{ yggdrasil:email:deltachat_settings.png?183&direct|Настройки Delta Chat }} + + +==== Пример настроек аккаунта электронной почты в Mozilla Thunderbird ==== + +{{yggdrasil:email:yggmail_tb_acc_settings.png?350&direct|Настройки аккаунта Yggmail в Mozilla Thunderbird}} + +Для настроенного аккаунта можно в его свойствах задать отображаемое имя (Account Name), чтобы выглядело примерно так: + +{{yggdrasil:email:yggmail_tb_acc_view.png?350&direct|Как выглядит аккаунт в Thunderbird}} + +===== Резервные копии ===== + +Чтобы полностью сохранить копию аккаунта и почтовые сообщения для переноса или восстановления - достаточно скопировать файл, указанный при инициализации сервера: + +yggmail -database=/path/to/yggmail.db + +Если данный путь не указан явно, файл можно найти в домашней директории профиля. + +Приватный ключ (private_key) и хеш пароля (password) расположены в таблице config. + +Также нужно отдельно сохранить пароль инициализации базы данных (при выполнении команды yggmail -password), поскольку в исходном виде он не сохраняется. + +===== Замечания ===== + +Несколько важных замечаний: + + * Yggmail должен быть запущен, чтобы была возможность получать входящие сообщения. По этой причине важно запускать Yggmail там, где он будет запущен постоянно, 24/7 [ //возможно, информация [[https://github.com/neilalexander/yggmail/issues/1#issuecomment-1930768430|устарела]]// ]; + * Yggmail пытается гарантировать, что отправители - это те, за кого они себя выдают, поэтому заголовок 'From address' в отправляемых сообщениях должен соответствовать вашему Yggmail-адресу; + * Вы можете обмениваться сообщениями только с другими пользователями Yggmail, обычные адреса электронной почты в Интернет и других сетях не поддерживаются; + * Вы должны настроить свой почтовый клиент так, чтобы он использовал "insecure" (небезопасную) или "plaintext" (простым текстом) аутентификацию для IMAP/SMTP — это потому, что мы не используем SSL/TLS для IMAP/SMTP-протоколов, трафик Yggdrasil зашифрован; + * На данный момент Yggmail поддерживает отправку сообщений, объемом не более 1MB. + * Попытка отправить тестовое письмо на собственный адрес приведет к ошибке ([[https://github.com/neilalexander/yggmail/issues/33|#33]], [[https://github.com/neilalexander/yggmail/issues/35|#35]]) + +===== Известные проблемы ===== + +Вероятно, Yggmail содержит большее количество багов, ниже упомянуты пара из них: + + * Поведение IMAP может не вполне соответствовать спецификации в некоторых случаях, таким образом, в различных почтовых клиентах могут наблюдаться различные проблемы; + * Поиск в IMAP на данным момент не реализован полностью и вместо этого будет возвращать все известные адреса. + +Так же, код немного запутан, простите нас за это ;) ([[https://github.com/neilalexander|neilalexander]]) + +===== Адреса пользователей ===== + +Желающие могут оставить здесь свой адрес, чтобы другие пользователи могли его найти и связаться с вами. \\ +(если в таблице наберется большое количество контактов, перенесём её на отдельную страницу, а здесь оставим ссылку) + +^ Никнейм / Имя ^ Адрес ^ +| TomasGl | f6065c4d768d5b40e40c942ca77bd40079ed3cc2df266562b9f4546ebe2c13d6@yggmail | +| BiGLapa | b6c2beb9ed1d8847bd5dba85d0623200435625fb2f9e155b8dd703a53b8c734d@yggmail | + +====== Ссылки ====== + +Репозиторий проекта на GitHub: https://github.com/neilalexander/yggmail \ No newline at end of file diff --git a/data/pages/yggdrasil/firewall_setup.txt b/data/pages/yggdrasil/firewall_setup.txt new file mode 100644 index 0000000..3d24832 --- /dev/null +++ b/data/pages/yggdrasil/firewall_setup.txt @@ -0,0 +1,58 @@ +====== Установка firewall на yggdrasil сервер ====== + +===== Введение ===== + +Сеть [[yggdrasil:Yggdrasil]] открывает много возможноcтей. Однако, иногда она открывает даже то, что хотелось бы не открывать. +Не всякий сразу сообразит о дырах в защите, которые предоставляет эта сеть. Запустив Yggdrasil вы +открываете все порты на своей машине для доступа из сети Yggdrasil (tun-интерфейс), даже если она закрыта файрволом где-то +на уровне роутера или провайдера. Вот понятная инструкция по установке защиты. Все команды ниже нужно выпулнять с правами суперпользователя. + +//**Примечание:** приведенные ниже правила применяются ко всем IPv6, не только Yggdrasil. Укажите ''%%dev tun0%%'', чтобы ограничения работали только для указанного интефейса (tun0 - интерфейс Yggdrasil (в вашей конфигурации имя может отличаться)).// + + +**1.** Убираем все правила, если надо. Если не знаете - тоже убираем. + +ip6tables -P INPUT ACCEPT +ip6tables -P FORWARD ACCEPT +ip6tables -P OUTPUT ACCEPT +ip6tables -t nat -F +ip6tables -t mangle -F +ip6tables -F +ip6tables -X + +**2.** Устанавливаем защиту. В данном случае мы оставляем открытыми +только ssh и http порты. Все остальные закрываем. + +ip6tables -P INPUT DROP +ip6tables -P FORWARD DROP +ip6tables -P OUTPUT ACCEPT +ip6tables -A INPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT +ip6tables -I INPUT 1 -i lo -j ACCEPT +ip6tables -A INPUT -p icmpv6 -j ACCEPT +ip6tables -A INPUT -p tcp --dport 80 -j ACCEPT +ip6tables -A INPUT -p tcp --dport 22 -j ACCEPT + +**3.** Проверяем. Должно показать примерно то же самое, но в других выражениях. + +ip6tables -L + +**4.** Теперь эту конфигурацию нужно сохранить. + +ip6tables-save > /etc/ip6tables.conf + +**5.** Готово. Для того, чтобы поднять защиту, сразу после старта системы нужно +выполнить команду + +ip6tables-restore < /etc/ip6tables.conf + + +===== Заключение ===== + +В ОС на базе [[wpru>Debian|Debian]] для автоматического применения правил iptables при загрузке можно использовать пакет [[https://packages.debian.org/ru/sid/iptables-persistent|iptables-persistent]]. + +Некоторые системы, например Федора или RH имеют сервис iptables.service или firewalld.service, который стартует при загрузке и устанавливает файрвол по своему усмотрению. +Если вы за NATом, то это дело можно смело отключить. Можно также дополнить этот стандартный сервис тем, что я написал выше. + +====== Ссылки ====== + +Просто об управлении iptables: https://www.digitalocean.com/community/tutorials/how-to-list-and-delete-iptables-firewall-rules-ru diff --git a/data/pages/yggdrasil/games.txt b/data/pages/yggdrasil/games.txt new file mode 100644 index 0000000..421db23 --- /dev/null +++ b/data/pages/yggdrasil/games.txt @@ -0,0 +1,7 @@ +====== Игры ====== + +===== Статьи внутри раздела ===== + +{{indexmenu>:yggdrasil:games}} + +~~DISCUSSION~~ diff --git a/data/pages/yggdrasil/games/chesslablab_game_server.txt b/data/pages/yggdrasil/games/chesslablab_game_server.txt new file mode 100644 index 0000000..071d3be --- /dev/null +++ b/data/pages/yggdrasil/games/chesslablab_game_server.txt @@ -0,0 +1,297 @@ +====== Шахматный сервер ChesslaBlab ====== + +[[https://github.com/chesslablab |ChesslaBlab]] - это набор программных инструментов с открытым кодом для организации полноценного шахматного сервера с поддержкой [[wpru>Stockfish|Stockfish]]. + +Данный комплекс может быть свободной альтернативой проприетарной площадке [[wpru>Lichess|Lichess]]: для игры в шахматы с друзьями или тренировок с ИИ. + +В материале рассмотрены тонкости настройки для сети IPv6 и Yggdrasil в частности. + +Программный комплекс включает в себя множество компонентов, ниже будет рассмотрен необходимый для игры минимум. + +===== chess-server ===== + +[[https://github.com/chesslablab/chess-server|chess-server]] написан на языке PHP, поэтому работа с ним не составит трудностей для веб-разработчиков. + +Понадобится: + +apt install git php composer stockfish + + +для запуска вебсокет-сервера, также лучше создать отдельного пользователя в системе: + + +useradd -m chesslablab + + +устанавливаем последнюю версию из репозитория: + + +git clone https://github.com/chesslablab/chess-server.git +cd chess-server +composer install + + +скопируем файл настройки среды окружения + + +cp .env.example .env +nano .env + + +для работы с yggdrasil, приводим конфигурацию к следующему виду, где адрес IPv6 заменяем адресом сервера (yggdrasilctl getSelf) + + +JWT_ISS=[xxx:xxxx:xxxx:xxxx:xxxx:xxxx:xxxx:xxxx] +JWT_SECRET=super_password + +UID=1000 +GID=1000 + +TCP_PORT=8085 + +WS_PORT=8085 +WS_ADDRESS=[::] + + +Остальные параметры из файла example можно удалить или закомментировать. + +Поскольку сервер будет работать только в сеть Yggdrasil, открываем порт 8085 для диапазона 0200::/7 + + +ufw allow from 0200::/7 to any port 8085 + + +//* порт можно выбрать любой свободный// + +После этого, chess-server можно запустить: + + +php cli/dev.php + + +* Запуск сервера подразумевает несколько режимов, описанных [[https://github.com/chesslablab/chess-server#run-the-chess-server|README]]. В нашем случае подойдёт именно dev, так как он не требует наличия SSL сертификатов. + +Чтобы сервер запускался при старте системы, можно добавить его в systemd: + + +nano /etc/systemd/system/chesslablab.service + + + +[Unit] +Description=chesslablab +After=network.target + +[Service] +Type=simple +User=chesslablab +ExecStart=/usr/bin/php /home/chesslablab/chess-server/cli/dev.php +StandardOutput=file:/home/chesslablab/chess-server-debug.log +StandardError=file:/home/chesslablab/chess-server-error.log +Restart=on-failure + +[Install] +WantedBy=multi-user.target + + +Обновляем реестр systemd, добавляем службу в автозапуск и стартуем сервис: + + +systemctl daemon-reload +systemctl enable chesslablab +systemctl start chesslablab + + +В завершение, проверяем наличие работающей службы: + + +netstat -tulpn | grep LISTEN + + +если сервер есть в списке на интерфейсе IPv6, можем к нему подключаться любым совместимым клиентом и играть по сети или с компьютером. + +===== react-chess ===== + +[[https://github.com/chesslablab/react-chess|react-chess]] - это клиентский веб интерфейс, написанный с использованием фреймворка [[wpru>React|React.js]] + +Для компиляции приложения потребуется: + + +apt install npm + + +Устанавливаем последнюю версию клиента из репозитория: + + +git clone https://github.com/chesslablab/react-chess.git +cd react-chess +npm install + + +Копируем пример конфигурации и делаем как указано ниже, заменив значения своими параметрами: + + +cp .env.example .env +nano .env + + + +HOST=[yyy:yyyy:yyyy:yyyy:yyyy:yyyy:yyyy:yyyy] +HTTPS=false +PORT=9443 + +REACT_APP_WS_SCHEME=ws +REACT_APP_WS_HOST=[xxx:xxxx:xxxx:xxxx:xxxx:xxxx:xxxx:xxxx] +REACT_APP_WS_PORT=8085 + + +//* [yyy:yyyy:yyyy:yyyy:yyyy:yyyy:yyyy:yyyy] - адрес клиента react-chess, указывать его не обязательно при использовании нижеуказанных примеров nginx //\\ +//* [xxx:xxxx:xxxx:xxxx:xxxx:xxxx:xxxx:xxxx] - адрес веб-сокета chess-server //\\ +//*8085 - порт веб-сокет сервера// + +В оригинальной инструкции используются примеры виртуальных хостов /etc/hosts, следовать им не нужно, в случае подключения Yggdrasil-only. + +Запускаем веб-клиент: + + +npm start + + +автоматически должно открыться окно браузера с веб интерфейсом для игры. + +Для production, клиент компилируется командой: + + +npm run build + + + +При развертывании клиента на VPS, целесообразно компилировать приложение локально, и на сервер выгрузить лишь директорию build, без исходников node. +Это позволит сэкономить порядка 300 Мб дискового пространства на сервере. + + +==== Nginx ==== + +Веб-клиент можно настроить различными способами (еще один вариант для локального развертывания указан в официальной документации) + +В примерах ниже, директория build будет установлена по адресу: + + +/var/www/chesslablab/react-chess/build + + +Выполнение программы будет осуществляться пользователем www-data, поэтому не забываем дать соответствующие права: + + +chown -R www-data:www-data /var/www/chesslablab/react-chess/build + + +=== Домен === + +На примере используется домен chesslablab.ygg в системе [[yggdrasil:dns:alfis|Alfis DNS]], при этом доступ ограничен только сети Yggdrasil: + + +nano /etc/nginx/sites-available/chesslablab.ygg.conf + + + +server { + listen [::]:80; + + allow 0200::/7; + deny all; + + root /var/www/chesslablab/react-chess/build; + + index index.html; + + server_name chesslablab.ygg chesslablab.ygg.at; + + location / { + try_files $uri $uri/ =404; + } +} + + +Включаем сайт, тестируем и перезагружаем конфигурацию Nginx: + + +ln -S /etc/nginx/sites-available/chesslablab.ygg.conf /etc/nginx/sites-enabled/chesslablab.ygg.conf +nginx -t +service nginx reload + + +=== Адрес подсети === + +Поскольку не все пользователи Yggdrasil используют DNS, важно предоставить возможность прямого доступа по IP. + +Для Chesslablab удобнее всего создать выделенный [[yggdrasil:subnet_setting|адрес подсети]] и настроить по аналогии с доменом. + + +При использовании команды ifconfig lo inet6 add нужно учитывать, что адрес сбрасывается после перезагрузки системы, этот вопрос решается отдельно. + + +=== Поддиректория === + +Расположение клиента в подкатегории вида http://[0200::/7]/chesslablab/ удобно тем, что к сайту удобно обращаться из адресной строки браузера без DNS, поскольку в истории посещений к поддиректории подставляется IP ресурса. + +Чтобы заставить клиент работать в такой конфигурации без модификации кода react-chess, можно использовать следующий вариант: + +создаем ссылку в корневом каталоге сервера: + + +ln -S /var/www/chesslablab/react-chess/build /var/www/html/chesslablab + + +//*при условии, что корневая веб директория Nginx расположена по адресу /var/www/html// + +открываем стандартный файл конфигурации для корня (обычно default): + + +nano /etc/nginx/sites-available/default + + +и добавляем новую секцию: + + + location /chesslablab { + + index index.html; + + # чтобы не патчить код клиента, делаем замену веб-корня в ответе сервера с помощью sub_filter + + sub_filter_once off; + sub_filter_types *; + + sub_filter 'action="/' 'action="/chesslablab/'; + sub_filter 'href="/' 'href="/chesslablab/'; + sub_filter 'src="/' 'src="/chesslablab/'; + + sub_filter 'static/media/' 'chesslablab/static/media/'; + + try_files $uri $uri/ =404; + } + + +Тестируем и перезагружаем конфигурацию Nginx: + + +nginx -t +service nginx reload + +===== Узлы ===== + +==== Клиенты ==== + + * [[http://[201:23b4:991a:634d:8359:4521:5576:15b7]/chesslablab/]] - работает в тестовом режиме, могут быть ошибки, просьба сообщать в [[http://[201:23b4:991a:634d:8359:4521:5576:15b7]/kevachat/room/Nj3UDaQ89rF5W5dGUbMSgb1C84cHW2562j#latest|канал KevaChat]] + * [[http://chesslablab.ygg]] - алиас + * [[https://github.com/d47081/react-chess/tree/ygg|используемый инстансом форк react-chess]] - настройки чата в dot/env, список ожидающих онлайн партий в меню и т.д. + +==== Сервера ==== + + * [201:23b4:991a:634d:8359:4521:5576:15b7]:8085 +===== Ссылки ===== + +Проект на GitHub: https://github.com/chesslablab \\ + +~~DISCUSSION~~ diff --git a/data/pages/yggdrasil/games/half_life_on_xash3d.txt b/data/pages/yggdrasil/games/half_life_on_xash3d.txt new file mode 100644 index 0000000..e74f840 --- /dev/null +++ b/data/pages/yggdrasil/games/half_life_on_xash3d.txt @@ -0,0 +1,406 @@ +====== Half-Life на базе Xash3D ====== + +Недавно появился [[yggdrasil:sites_and_services:other_network_services#half-life|внутрисетевой сервер Half-Life]] на базе движка Xash3D FWGS. + +Стало интересно разобраться в особенностях IPv6 / Yggdrasil и создать этот материал для тех, кто захочет поднять внутрисетевой сервер с нуля и кастомизировать его в дальнейшем. + +===== Half-Life ===== + +Half-Life - всем известный шутер от первого лица, за 20 лет не утративший свою популярность. + +Технические требования минимальны, игра работает даже на компьютерах без предустановленных видео-драйверов. + +===== Xash3D FWGS ===== + +[[https://github.com/FWGS/xash3d-fwgs|Xash3D FWGS]] - это мульти-платформенный движок с открытым кодом для запуска файлов игры Half-Life 1, с некоторыми доработками оригинального [[https://www.moddb.com/engines/xash3d-engine|Xash3D]]. + +Файлы самой игры Half-Life нужно приобрести отдельно, затем скопировать в директорию valve с установленным Xash3D FWGS. + +Для сборки и запуска необходимо добавить поддержку библиотек архитектуры ''i386'': + + +dpkg --add-architecture i386 +apt update +apt install build-essential gcc-multilib g++-multilib python3 libsdl2-dev:i386 libfontconfig-dev:i386 libfreetype6-dev:i386 + + +При возникновении ошибки запуска в последних версиях + +Host_InitError: Can't initialize cl_dlls/client.so: vgui.so: cannot open shared object file: No such file or directory + + +нужно скопировать файл ''vgui.so'' уровнем выше директории valve + +~/.steam/steam/steamapps/common/Half-Life/ + + +===== Xash3D FWGS / YGGverse Edition ===== + +[[https://github.com/YGGverse/xash3d-fwgs/branches|Xash3D FWGS YGGverse Edition]] основан на ветке master от Xash3D FWGS, целью проекта является создание сборки, ориентированной на сеть Yggdrasil. + +В рамках разработки осуществляются обратно-совместимые контрибуции. + + + +==== Ветки ==== + + * [[https://github.com/YGGverse/xash3d-fwgs/tree/master|master]] - зеркало официальной master от Xash3D FWGS для обновлений + * [[https://github.com/YGGverse/xash3d-fwgs/tree/sv-downloadurl-ipv6|sv-downloadurl-ipv6]] - поддержка параметра sv_downloadurl_ipv6 в server.cfg, поскольку sv_downloadurl работает только с IPv4 (PR #1577) + * [[https://github.com/YGGverse/xash3d-fwgs/tree/master-hl-ygg|master-hl-ygg]] - замена mentality.rip на внутрисетевой master.hl.ygg (в паре с yggdrasil-masters удобен на случай обновления IP без повторной сборки клиентов) + * [[https://github.com/YGGverse/xash3d-fwgs/tree/yggdrasil-masters|yggdrasil-masters]] - дополнительные мастер-сервера в формате 0200::/7 (на случай отсутствия [[yggdrasil:dns:alfis|Alfis DNS]]) + * [[https://github.com/YGGverse/xash3d-fwgs/tree/yggdrasil-only|yggdrasil-only]] - ветка предусматривает сборку Xash3D работающей только в рамках сети Yggdrasil, исключая запросы в клирнет (в разработке) + * [[https://github.com/YGGverse/xash3d-fwgs/tree/yggdrasil-inclusive|yggdrasil-inclusive]] - ветка расширяет совместимость master с Yggdrasil, удобна для игрового сервера, работающего в обе сети, включая клирнет + +==== Сборка ==== + +Сборка не отличается от инструкций Xash3D FWGS, достаточно указать адрес репозитория (или использовать нужную ветку для слияния с официальным xash3d-fwgs): + + +git clone --recursive https://github.com/YGGverse/xash3d-fwgs.git +cd xash3d-fwgs +git checkout yggdrasil-only +./waf configure -T release +./waf build +./waf install --destdir=/path/to/game + + +В рамках [[https://github.com/YGGverse/xash3d-fwgs/releases|релизов]], публикуются бинарные пакеты для Linux что может быть удобным для начинающих пользователей. + +===== Клиент ===== + +При использовании сборок [[https://github.com/YGGverse/xash3d-fwgs/tree/yggdrasil-only|yggdrasil-only]] или [[https://github.com/YGGverse/xash3d-fwgs/tree/yggdrasil-inclusive|yggdrasil-inclusive]] от Xash3D FWGS / YGGverse Edition, в списке "интернет игры" будут доступны все доступные внутрисетевые сервера Yggdrasil. + +В остальных случаях, клиент будет работать с IPv6, но по-умолчанию ориентирован на сеть IPv4 и мастер сервер от FWGS - mentality.rip:27010 + +Можно вручную подключиться к заведомо известному узлу Yggdrasil из консоли с помощью тильды: + + +connect [201:5eb5:f061:678e:7565:6338:c02c:5251]:27015 + + +С недавних пор, удалось портировать [[#pymaster]] для работы с IPv6, также имеется [[https://github.com/YGGverse/xash3d-fwgs/commit/afec7161842e928a5627d724e4fd7445fb7c3ee6|патч для xash3d-fwgs]], позволяющий принимать IPv6 адреса от мастера. + +Чтобы удалить IPv4 сервера из списка, открываем консоль и пишем: + + +clearmasters + + +затем добавляем внутрисетевой мастер сервер или несколько по очереди: + + +addmaster [201:5eb5:f061:678e:7565:6338:c02c:5251]:27010 + + +проверяем + + +listmasters + + +Данные настройки сохраняются после перезагрузки в файле /valve/xashcomm.lst, также можно добавить сервера вручную, по одному на строку. + +//* тильда работает только в режиме игры, вызов консоли также доступен из главного меню при запуске Xash3D с флагом -dev.// + +==== Лаунчер ==== + +Для удобного запуска клиента, можно добавить его в меню приложений: + + +[Desktop Entry] +Encoding=UTF-8 +Name=Half-Life +Exec=/path/to/xash3d +Comment=Half-Life on Xash3D +Terminal=false +Icon=/path/to/hl.png +Type=Application +StartupNotify=false +Categories=Games + + +Затем активировать: + +xdg-desktop-menu install ~/.local/share/half-life.desktop + + +Для разных сборок Xash3D, удобно использовать [[https://github.com/YGGverse/hl-customs|тематические иконки]], например для сборки Yggdrasil: + +{{:yggdrasil:half_life_on_xash3d:hl-icon-ipv6.png?128|}} +{{:yggdrasil:half_life_on_xash3d:hl-icon-yggdrasil.png?128|}} +===== Сервер ===== + +При наличии установленного клиента с файлами игры, запуск сервера в сети Yggdrasil/IPv6 осуществляется командой: + + +xash3d -dedicated -port6 27015 -ip6 xxx:xxxx:xxxx:xxxx:xxxx:xxxx:xxxx:xxxx -noip +maxplayers 8 +map crossfire + + +// * ''-noip'' отключает режим IPv4, если у сервера есть "белый IP" - можно разрешить подключение игроков из Clearnet: ''-ip xx.xx.xx.xx''//\\ +// * * не забываем открыть порт 27015 (указать можно любой) // + +Дополнительные настройки можно указать в файлах + + * /valve/server.cfg - базовые настройки, такие как имя сервера (hostname) + * /valve/skill.cfg - спецификация сервера + * /valve/listip.cfg - настройки ограничения доступа + * /valve/banned.cfg + +Чтобы сервер был доступен в списке мастер сервера, важно указать: + + +sv_lan 0 +public 1 + + +//* стандартный мастер сервер mentality.rip фильтрует по -game valve// + +==== systemd ==== + +Конфигурация: + + +[Unit] +Description=Half-Life Server +After=network.target + +[Service] +Type=simple +User=halflife +ExecStart=/home/halflife/xash3d -dedicated -port6 27015 -ip6 xxx:xxxx:xxxx:xxxx:xxxx:xxxx:xxxx:xxxx -noip +maxplayers 8 +map crossfire +StandardOutput=file:/home/halflife/server-debug.log +StandardError=file:/home/halflife/server-error.log +Restart=on-failure + +[Install] +WantedBy=multi-user.target + + +Автозапуск: + + +systemctl daemon-reload +systemctl enable half-life-server +systemctl start half-life-server + + + +==== FastDL ==== + +FastDL - сокр. "быстрая загрузка", способ передачи дополнительных ресурсов игры клиенту сервером. + +Обычно, реестр организуется средствами сервера nginx таким образом, чтобы файловая структура соответствовала структуре в директории ''valve'': + + +/maps +/models +/sound +/materials + + +В файле ''server.cfg'' указывается URL к данным директориям: + + +sv_downloadurl "http://xx.xx.xx.xx/fastdl/half-life/" +sv_allowdownload 1 + + +где ''/fastdl/half-life/'' - путь к структуре файлов на сервере. + +//* на данный момент поддержки IPv6 для ''sv_downloadurl'' [[https://github.com/FWGS/xash3d-fwgs/issues/1559|нет]]//\\ +//* в рамках форка [[https://github.com/YGGverse/xash3d-fwgs/tree/sv-downloadurl-ipv6|sv-downloadurl-ipv6]] добавлена поддержка новой опции для server.cfg - sv_downloadurl_ipv6="[IPv6]:port/path" позволяющая секурно загружать модели при подключении Yggdrasil// + +==== RESGen ==== + +Утилита используется для создания файла дополнительных зависимостей в формате ''.res'' для загрузки клиентом из сервера при инициализации карты. + +Может быть полезна, если требуется отправить клиенту дополнительные модели игроков, при этом не создавая форки локаций. + +Есть [[https://github.com/kriswema/resgen|исходники]] и рабочая [[https://github.com/kriswema/resgen/releases|сборка для Linux]]. + +**Принцип работы** + +Извлекаем зависимости карты: + +Linux.64-bit /valve/maps/crossfire.bsp + + +В этой же директории будет создан одноименный файл с расширением ''.res'', который можно открыть текстовым редактором и добавить нужную зависимость: + +// crossfire.res - created with RESGen v2.0.3. +// RESGen is made by Jeroen "ShadowLord" Bogers, +// with serveral improvements and additions by Zero3Cool. +// For more info go to http://resgen.hltools.com + +// .res entries (9): +halflife.wad +sound/ambience/jetflyby1.wav +sound/ambience/siren.wav +sound/debris/beamstart11.wav +sound/weapons/electro5.wav +sound/weapons/mortarhit.wav +sound/weapons/sbarrel1.wav +sprites/muzzleflash1.spr +sprites/steam1.spr +models/player/... // добавляем в конец файла логический путь к новому файлу (на примере модели FastDL) + + +Файл ''.res'' должен находится в той же директории что и файл карты - ''/valve/maps''. + +Перезагружаем сервер и переподключаем клиент - кастомнный скин должен быть автоматически загружен клиентом и добавлен в директорию ''/valve/downloaded/models/player/...'' +===== Мастер ===== + +Мастер-сервер нужен для удобного поиска игровых серверов через интерфейс игры, иначе нужно каждый раз вводить адрес/порт сервера вручную. + +==== pymaster ==== + + +Официальный pymaster считается устаревшим, но силами сообщества в отдельных форках есть активность. Разработчики официальной версии обещают версию на Rust, но дата публикации не известна. + +Для работы с Yggdrasil, рекомендуется [[https://github.com/YGGverse/pymaster/tree/v2|версия от YGGverse]], включающая в себя поддержку IPv6 и обновления протокола Xash3D. + + + +[[https://github.com/FWGS/pymaster|pymaster]] - это Python реализация мастер-сервера [[https://github.com/ezhangle/hlmaster|HLMaster]], в рамках проекта FWGS. + +Для запуска необходимо открыть порт 27010 и выполнить команду: + + +pymaster.py -i :: -p 27010 + + +//* в репозитории также есть [[https://github.com/FWGS/pymaster/blob/master/etc/systemd/system/pymaster.service|пример конфигурации systemd]] // + +Чтобы pymaster начал отдавать игровые сервера клиентам, обе стороны должны быть скомпилированы или настроены на данный мастер-сервер. + +В Xash3D исходники находятся в файле engine/common/netchan.h строки MASTERSERVER_ADR или в файле конфигурации /valve/xashcomm.lst\\ +При использовании клиента с графическим интерфейсом, можно динамически указывать мастер сервер в консоли, командами listmasters/clearmasters/addmaster адрес:порт\\ +Обновление типичных конфигураций valve - steamcomm.lst и valvecomm.lst игнорируется при запуске в оболочке Xash3D. + +==== xash3d-master ==== + +[[https://git.mentality.rip/numas13/xash3d-master|xash3d-master]] - недавний релиз мастер сервера для Xash3D, написанного на языке Rust. + +===== Боты ===== + +Чтобы оживить сервер и сделать ожидание игроков интереснее, в игру можно добавить ботов с помощью [[https://github.com/FWGS/xash3d-fwgs/issues/1556#issuecomment-1876014868|сторонних плагинов]]. + +==== Bot Number 10 ==== + +Самый простой способ - установка последней версии [[http://hpb-bot.bots-united.com/downloads.html|Bot Number 10]]. + +Загружаем архив для [[http://hpb-bot.bots-united.com/releases/bot10_linux.tgz|Linux]] и распаковываем содержимое в корневую директорию с бинарником xash3d таким образом, чтобы директория ''bot'' была рядом с ''valve''. +Поскольку плагин являет собой расширение, он не перезаписывает файлы игры, и запускать сервер необходимо указав новый путь к директории игры: + + +xash3d -game bot + + +Важно учитывать, что при запуске из нестандартной директории, сервер будет отфильтрован большинством мастер серверов, в виду фильтрации по valve.\\ +Чтобы решить эту проблему, можно: + * сменить пути DLL в файле gameinfo.txt + * скопировать содержимое директории bot в valve и перезапустить сервер без флага -game bot + +Также, чтобы сервер удалял ботов при подключении игроков, важно указать явно минимальное + +min_bots 1 # не ставить в 0, интерпретируется как false +max_bots 4 + + +После запуска, настроенные в ''bot.cfg'' персонажи будут добавлены в игру. Плагин является частью проекта [[https://github.com/FWGS/hlsdk-portable/commits/bot10|hlsdk-portable]], при возникновении проблем, возможно потребуется собрать файл ''/valve/dlls/hl.so'' и заменить им оригинальный, хотя в случае с последней версией Steam - все работает без дополнительных действий. + +=== Сборка из исходников === + +На сайте есть [[http://hpb-bot.bots-united.com/releases/bot10src.zip|архив с исходниками]], но последнюю версию можно собрать из репозитория с файлами SDK: + + +git clone --recursive https://github.com/FWGS/hlsdk-portable.git +git checkout bot10 +cmake -B build -S . +cmake --build build + + +После компиляции ветки, будет доступен только файл bot.so - остальные файлы нужно собирать отдельно.\\ +Если для остальных файлов не нужна особая сборка, можно переименовать bot.so в bot_i486.so и смержить с официальным архивом для Linux, пока что это работает. + +==== Bot Number 10 by YGGverse ==== + +Открытая модификация Bot Number 10 для сервера YGGverse + +**1.0.0** + + * добавлена возможность установки min_bots=0 (PR #423) + * респавн ботов с конфигурации bot.conf (PR #422) + * поддержка дополнительных скинов + +**сборка** + + +git clone --recursive https://github.com/YGGverse/hlsdk-portable.git +git checkout bot10-yggverse +cmake -B build -S . +cmake --build build + + +Есть [[https://github.com/YGGverse/hlsdk-portable/releases|бинарные релизы]] для более ранних систем. + +===== Графити ===== + +В сетевой игре можно использовать графити, с помощью кнопки T. Изображение выбирается в настройках клиента, раздел "Multiplayer" - "Customize". + +Чтобы создать свой логотип, изображение должно быть размером 64х64 пикселя, в палитре Grayscale и формате .BMP + +Ниже рассмотрен пример обработки изображения PNG из коллекции [[https://raw.githubusercontent.com/YGGverse/hl-customs/main/icons/ipv6/128x128.png|hl-customs]] в редакторе GIMP: + +1. Image → Scale Image → 64x64 / Quanlity: Linear\\ +2. Layer → Transparency → Remove Alpha Channel\\ +3. Colors → Components → Decompose\\ +4. Colors → Invert (черный цвет считается прозрачным)\\ +5. File → Export As.. → сохраняем по адресу /valve/logos/filename.bmp\\ + +Результат на данном примере будет иметь следующий [[https://raw.githubusercontent.com/YGGverse/hl-customs/main/icons/ipv6/valve/logos/ipv6.bmp|вид]] + +Следует заметить, что создание Ч/Б графики обусловлено возможностью выбора цвета в интерфейсе игры. + +{{:yggdrasil:half_life_on_xash3d:hl-ipv6-wall-graffiti.png?400|HL IPv6 Graffiti}} + +===== Игровые сервера ===== + +==== Skunky ==== + + * ''%%[300:eaff:7fab:181b::e949]:7588%%'' - без ботов, только Yggdrasil + +==== YGGverse ==== + +Имеется [[https://github.com/YGGverse/half-life-server|открытая конфигурация]] сервера, можно вносить свои предложения или использовать для организации нового сервера. + + * ''%%[201:5eb5:f061:678e:7565:6338:c02c:5251]:27015%%'' - карта Crossfire с ботами + * ''%%hl.ygg:27015%%'' - короткий алиас для Alfis + * ''%%hl.ygg.at:27015%%'' - универсальный алиас для 0200::/7 + * ''%%94.140.114.89:27015%%'' - алиас Clearnet + * ''%%tls://94.140.114.89:4708%%'' - ускорить пинг, актуально для всех алиасов выше + +===== Мастер сервера ===== + + * [201:23b4:991a:634d:8359:4521:5576:15b7]:27010 - только Yggdrasil подключения + * hl.ygg:27010 + * hl.ygg.at:27010 + * [200:eaff:7fab:181b:dba8:1f83:1e5:d07b]:27010 - by Skunky + +===== Статистика ===== + + * http://[201:5eb5:f061:678e:7565:6338:c02c:5251]/hl/ ([[http://hl.ygg|hl.ygg]]) - статистика по серверам Yggdrasil, с рейтингами игроков и оповещениями RSS (добавить сервер можно подключившись к мастеру в футере) +===== Ссылки ===== + +[[https://github.com/FWGS/xash3d-fwgs|Xash3D FWGS]] / [[https://github.com/YGGverse/xash3d-fwgs/branches|YGGverse Edition]]\\ +[[https://store.steampowered.com/app/70/HalfLife/|Half-Life в Steam]]\\ +[[https://www.svencoop.com/manual/server-config.html|Параметры конфигурации сервера]]\\ +[[https://github.com/FWGS/pymaster|официальный pymaster]] | [[https://github.com/xdettlaff/pymaster|более чистая версия от @xdettlaff]] | [[https://github.com/YGGverse/pymaster/tree/v2|адаптация от YGGverse на базе @xdettlaff]] \\ +[[https://git.mentality.rip/numas13/xash3d-master|xash3d-master на rust]] | [[http://[316:c51a:62a3:8b9::4]/YGGverse/xash3d-master|зеркало Yggdrasil]]\\ +[[https://developer.valvesoftware.com/wiki/Master_Server_Query_Protocol:ru|Информация о мастер-сервере]]\\ +[[https://developer.valvesoftware.com/wiki/Server_queries|Серверные запросы с множеством полезных ссылок]]\\ +[[http://hpb-bot.bots-united.com/index.html|Боты, совместимые с Xash3D]] | [[https://github.com/YGGverse/hlsdk-portable/tree/bot10-yggverse|Bot Number 10 by YGGverse]]\\ +[[https://github.com/YGGverse/hl-php|Библиотека PHP 8 для веб разработчиков]]\\ +[[https://gamebanana.com/mods/cats/7734|Каталог скинов]] | [[https://raw.githubusercontent.com/YGGverse/hl-customs/main/icons/yggdrasil/valve/logos/yggdrasil.bmp|Графити Yggdrasil]] | [[https://raw.githubusercontent.com/YGGverse/hl-customs/main/icons/ipv6/valve/logos/ipv6.bmp|Графити IPv6]] + +~~DISCUSSION~~ diff --git a/data/pages/yggdrasil/internet_radio.txt b/data/pages/yggdrasil/internet_radio.txt new file mode 100644 index 0000000..bf1bc88 --- /dev/null +++ b/data/pages/yggdrasil/internet_radio.txt @@ -0,0 +1,231 @@ +====== Интернет-радио ====== + +В Yggdrasil очень легко и быстро можно создать собственное радио из локальной коллекции, не имея выделенного IP адреса. + +Есть много инструкций по конфигурации эфирного времени, включая различные скрипты автоматизации плей-листов и взаимодействие с участниками стримов по расписанию.\\ +Ниже рассмотрен базовый пример организации сервера на Yggdrasil / IPv6, возможно в процессе материал будет дополнен. + +===== Icecast ===== + +[[https://icecast.org/|Icecast]] - популярный сервер потокового мультимедиа, с поддержкой потоков Ogg (Vorbis и Theora), Opus, WebM и MP3. + +Поддерживает открытые стандарты общения и взаимодействия, распространяется под лицензией GNU GPL версии 2. + +Простыми словами, он выполняет ту же функцию, что nginx для веб-сайтов, но ориентирован на работу с потоковым контентом. + +Установка доступна из репозиториев: + + +apt install icecast2 + + +Стартуем сервис, чтобы создать базовую конфигурацию + + +systemctl start icecast2 + + +Пример конфигурационного файла: + + + + Yggdrasil + icemaster@localhost + 100 + 2 + 524288 + 30 + 15 + 10 + 1 + 65535 + + + пароль + пароль + admin + + + [xxx:xxxx:xxxx:xxxx:xxxx:xxxx:xxxx:xxxx] + + 8000 + :: + + +
+ + 1 + + /usr/share/icecast2 + /var/log/icecast2 + /usr/share/icecast2/web + /usr/share/icecast2/admin + + + + access.log + error.log + 3 + 10000 + + + 0 + + nobody + nogroup + + + + + +Добавляем в автозагрузку и перезапустим сервис: + + +systemctl enable icecast2 +systemctl restart icecast2 + + +Разрешаем подключения только Yggdrasil: + +ufw allow from 0200::/7 to any port 8000 + + +===== Ezstream ===== + +[[https://icecast.org/ezstream/|Ezstream]] — это клиент командной строки для медиапотоков, в первую очередь для передачи на серверы Icecast. + +Используется непосредственно для работы с файлами, предварительно обеспечивая их формат. В отличии от популярного Ices2, из коробки работает с ogg, mp3 а также видео форматами. + +Установка: + + +apt install ezstream + + +Ezstream запускается отдельными потоками для каждой позиции stream, для этого удобно создать отдельного пользователя: + + +useradd -m radio + + +Файловую структуру можно организовать следующим образом: + + +mkdir /home/radio/collection - библиотека файлов для стрима +mkdir /home/radio/ezstream - файлы конфигурации ezstream +mkdir /home/radio/playlist - файлы плейлистов + + +Базовые варианты конфигурации ezstream расположены в директории: + + +ls /usr/share/doc/ezstream/examples/ + + +Для начала, можно скопировать минимальный набор: + + +cp /usr/share/doc/ezstream/examples/ezstream-minimal.xml /home/radio/ezstream/gta/vice-city.xml + + +Работающий пример конфигурации для [[http://[201:23b4:991a:634d:8359:4521:5576:15b7]/yggwave/radio/gta/vice-city|радио GTA Vice City]]: + + + + + + + YGGwave + 127.0.0.1 + пароль к серверу Icecast + + + + + YGGwave + GTA Vice City + /gta/vice-city + MP3 + Yes + No + No + YGGwave - GTA Vice City + http://[201:23b4:991a:634d:8359:4521:5576:15b7]:8000/gta/vice-city + OST + GTA Vice City Radio Stations + + + + + GTA Vice City + /home/radio/playlist/gta/vice-city.txt + + + + GTA - Vice City Radio + GTA Vice City + -1 + Yes + No + + + + +Копируем нужные медиа файлы в директорию /home/radio/collection + +Плейлисты для директории можно сделать простой командой: + + +find /home/radio/collection -name *.mp3 > /home/radio/playlist/gta/vice-city.txt + + +Не забываем дать права пользователю: + + +chmod -R radio:radio /home/radio + + +В завершение, создадим для каждого стрима настройки systemd + + +[Unit] +Description=ezstream-gta-vice-city +After=network.target + +[Service] +Type=simple +User=radio +ExecStart=/usr/bin/ezstream -c /home/radio/ezstream/gta/vice-city.xml +StandardOutput=file:/home/radio/ezstream-gta-vice-city-debug.log +StandardError=file:/home/radio/ezstream-gta-vice-city-error.log +Restart=on-failure + +[Install] +WantedBy=multi-user.target + + +и добавим в автозапуск: + + +systemctl enable ezstream-gta-vice-city +systemctl start ezstream-gta-vice-city + + +===== Nginx ===== + +Если есть желание стримить на 80 порту, но он занят nginx, можно сделать проксирование: + + +location /yggwave/radio/gta/vice-city { + proxy_pass http://localhost:8000/gta/vice-city; +} + + +===== Ссылки ===== + + * [[https://icecast.org/|Icecast]] - сервер для организации мультимедиа потоков + * [[https://icecast.org/ices/|Ices]] - клиент для Icecast + * [[https://icecast.org/ezstream/|Ezstream]] - альтернатива Ices с поддержкой дополнительных форматов + * [[http://[201:23b4:991a:634d:8359:4521:5576:15b7]/yggwave/|YGGwave]] ([[http://wave.ygg|wave.ygg]]) - каталог радио станций для Yggdrasil + +~~DISCUSSION~~ diff --git a/data/pages/yggdrasil/ip_address.txt b/data/pages/yggdrasil/ip_address.txt new file mode 100644 index 0000000..98c8481 --- /dev/null +++ b/data/pages/yggdrasil/ip_address.txt @@ -0,0 +1,33 @@ +====== Как узнать IP-адрес своего узла Yggdrasil ====== + +[[Yggdrasil:Yggdrasil|Yggdrasil]] использует [[wpru>IPv6]]-адреса из диапазона 0200::/7. + +Ниже перечислены различные способы узнать адрес своего узла. + +===== Linux ===== + +ip a | grep inet6 + +Или + +ifconfig | grep inet6 + +Если AdminListen в [[yggdrasil:config_russian|конфиге]] не none, а, например, ''%%unix:///var/run/yggdrasil.sock%%'': +sudo yggdrasilctl getself + +Так же, IP-адрес выводится в консоль после запуска Yggdrasil. \\ Сразу после запуска systemd-демона (позже будет не видно) можно выполнить: +systemctl status yggdrasil + +===== Windows ===== + +В интерпретаторе командной строки c правами администратора: +yggdrasilctl getself + +Или +ipconfig + +===== Универсально ===== + +Можно зайти на web-странички внутри сети, которые выводят ваш адрес: http://[200:6223::d35b:1fd8:be0d:2841]/ или http://[301:d060:fb10:ae5b::2]/ + +Из консоли можно использовать [[wpru>Links]], wget или curl для загрузки сайтов. diff --git a/data/pages/yggdrasil/matrix_server.txt b/data/pages/yggdrasil/matrix_server.txt new file mode 100644 index 0000000..46bc89d --- /dev/null +++ b/data/pages/yggdrasil/matrix_server.txt @@ -0,0 +1,153 @@ +====== Установка собственного matrix сервера ====== + +Данная статья описывает установку собственного сервера matrix, который будет работать в общей федеративной сети серверов матрикс, но к которому доступ клиентов будет только из сети yggdrasil. При этом все фишки типа "Персональных сообщений" и "Шифрованных комнат" также будут работать + +:!: **Если вам не нужна связность с другими серверами - ставьте сервер в режиме standalone и не мучайтесь** + +===== Почему всё так сложно-то? ===== + * Во первых **Matrix** является федеративной сетью. Т.е. подразумевается что каждый из серверов может напрямую общаться с другими, при этом никаких Relay серверов не предусмотрено. Т.е. сервер должен иметь "белый" адрес (заметка на полях - людей, у которых есть **только** "белый" IPv6 адрес, ждут примерно аналогичные страдания). + * Во вторых **обязательно** используются SSL сертификаты. + * Соответственно, в третьих, **обязательно** используются "белые" домены (т.е. домены, на который такой сертификат может быть выписан). +То есть, если вы хотите поднять сервер, который будет иметь возможность общаться с другими серверами в сети - он должен соответствовать этим трём требованиям. + +К счастью, предусмотрена ситуация когда есть домен **example.com** но сервер разместить под этим именем возможности нет. Зато есть возможность разместить его под именем **server.example.com**. Вот, собственно, этой возможностью мы и воспользуемся. + +===== Требуемые инструменты и материалы ===== +И так, что нам потребуется: + +==== Сервер ==== +Ну, собственно, потребуется машина для установки самого сервера Matrix. + +У этой машины должен быть выход в клирнет. Доступ к этой машине нужен только со стороны прокси, т.е. она вполне может сидеть где-то внедрах сети за NAT. + +==== Домен ==== +Домен может быть любым, который Вам доступен. Главное - он должен быть "белым" (т.е. резолвиться из клирнета) и у Вас должна быть возможность вносить туда записи. Я использовал для этого **twinkle.ygg.at** + +Так же Вам потребуется имя для прокси сервера с белым адресом. Если вы использовали как основной домен **.ygg.at** вас ждёт неприятность - в этом домене нельзя указать какой либо IP кроме yggdrasil. Если вы используете что-то типа **mybestowndomain.com** - вам никто не мешает сделать для этого имя **server.mybestowndomain.com**. Я использовал **ygg.twinkle.lol** + +==== "Серый" (ygg) адрес ==== +Этот адрес дожен быть прописан на основном домене, который вы выбрали в прошлом пункте. У меня это **300:dada:feda:f443::12** + +==== Белый IP адрес ==== +Этот адрес должен быть назначен как "внешний" на прокси сервере. Никаких особенных требований, ну кроме того, что как минимум должен быть открыты порты 443 и 8448 на вход. У меня это **193.111.115.214** + +==== SSL сертификат ==== +Так как у нас на основном домене используется "серый" адрес, получить SSL по простому - не получится. Нужно будет получать через "DNS авторизацию". Я пользуюсь для этого вот этим [[https://github.com/joohoi/acme-dns-certbot-joohoi/|плагином для certbot]]. +^:!: ВАЖНО^ +|Если вы будете пользоваться этим плагином - он вам выведет строчку, которую нужно прописать в DNS. Если, при этом, вы пользуетесь доменом **.ygg.at**, при прописывании его в Alfis от имени оставьте только **_acme-challenge** а в самом CNAME уберите последнюю точку (должно получиться **.auth.acme-dns.io** в конце). От этой точки alfis шизеет.| + + +===== Собираем всё в кучу ===== + * Ставим сервер Matrix. Подробности я опущу - весь интернет завален описанием этой процедуры + * Прописываем для основного домена "серый" IP адрес. + * Прописываем для прокси "белый" IP адрес. + * Получаем тем или иным способом SSL сертификат на основной домен. + * :!: **Не обязательно, но лучше сделать** - получаем SSL сертификат на прокси сервер. Я ниже расскажу зачем. + * Добавляем в основной домен такие строки (у Вас они, понятно, будут другие): +_matrix._tcp SRV 1 1 8448 ygg.twinkle.lol +_matrix-fed._tcp SRV 1 1 8448 ygg.twinkle.lol +Обратите внимание, тут должно быть указанно именно имя а не адрес. Именно по этому у прокси сервера должно быть имя. Почему их две? Потому что первая - depricated. + * Настраиваем прокси сервер. Нам нужно прописать конфиг для двух хостнеймов, основного и прокси. У меня это выглядит так (у меня nginx, если у Вас что-то другое - делайте по аналогии): Основной домен +server { + listen [300:dada:feda:f443::12]:443 ssl; + listen [300:dada:feda:f443::12]:8448 ssl; + server_name twinkle.ygg.at; + + ssl_certificate /etc/letsencrypt/live/twinkle.ygg.at/fullchain.pem; + ssl_certificate_key /etc/letsencrypt/live/twinkle.ygg.at/privkey.pem; + client_max_body_size 1000M; + + location /_matrix { + proxy_pass http://127.0.0.1:8008; + proxy_set_header X-Forwarded-For $remote_addr; + proxy_set_header X-Forwarded-Proto $scheme; + proxy_set_header X-Real-IP $remote_addr; + proxy_set_header Host $host; + client_max_body_size 500M; + } + + location /.well-known/matrix/client { + return 200 '{"m.homeserver": {"base_url": "https://twinkle.ygg.at"}}'; + add_header Content-Type application/json; + add_header Access-Control-Allow-Origin *; + } +} + +server { + listen 193.111.115.214:443 ssl; + listen 193.111.115.214:8448 ssl; + server_name twinkle.ygg.at; + + ssl_certificate /etc/letsencrypt/live/twinkle.ygg.at/fullchain.pem; + ssl_certificate_key /etc/letsencrypt/live/twinkle.ygg.at/privkey.pem; + client_max_body_size 1000M; + + location /_matrix/client { + return 404; + } + + location /_matrix { + proxy_pass http://127.0.0.1:8008; + proxy_set_header X-Forwarded-For $remote_addr; + proxy_set_header X-Forwarded-Proto $scheme; + proxy_set_header X-Real-IP $remote_addr; + proxy_set_header Host $host; + client_max_body_size 500M; + } + + location /.well-known/matrix/client { + return 200 '{"m.homeserver": {"base_url": "https://twinkle.ygg.at"}}'; + add_header Content-Type application/json; + add_header Access-Control-Allow-Origin *; + } +} + +Прокси: +server { + listen 193.111.115.214:443 ssl; + listen 193.111.115.214:8448 ssl; + listen [300:dada:feda:f443::12]:443 ssl; + listen [300:dada:feda:f443::12]:8448 ssl; + server_name ygg.twinkle.lol; + + ssl_certificate /etc/letsencrypt/live/ygg.twinkle.lol/fullchain.pem; + ssl_certificate_key /etc/letsencrypt/live/ygg.twinkle.lol/privkey.pem; + client_max_body_size 1000M; + + location /_matrix/client/ { + return 404; + } + + location /_matrix { + proxy_pass http://[322:a76c:9a9e:5085:1::8]:8008; + proxy_set_header X-Forwarded-For $remote_addr; + proxy_set_header X-Forwarded-Proto $scheme; + proxy_set_header X-Real-IP $remote_addr; + proxy_set_header Host $host; + client_max_body_size 500M; + } + + location /.well-known/matrix/client { + return 200 '{"m.homeserver": {"base_url": "https://twinkle.ygg.at"}}'; + add_header Content-Type application/json; + add_header Access-Control-Allow-Origin *; + } +} + + +Собственно - на этом можно было-бы ставить точку. **Правильно собранное устройство в дополнительной настройке не нуждается.** Но я обещал рассказать зачем SSL на имя прокси, да и вобще стоит описать происходящее. И так... + +===== Как оно должно работать в идеальной стране розовых пони ===== + +Сервер приходит в домен twinkle.ygg.at за srv записью, получает её и идёт на прокси сервер ygg.twinkle.lol (с основным доменом в урле, кстати, а вовсе не с проксёвым). И дальше сервера спокойно между собой общаются. Соответственно на прокси не должен никто приходить с его именем. +Клиент из белой сети приходит в домен twinkle.ygg.at, получает ygg адрес и плача уходит. +Клиент из ygg приходит в домен twinkle.ygg.at, получает ygg адрес и радостно работает. + +===== Как оно работает на самом деле ===== +Сервер приходит в домен twinkle.ygg.at и сначала пытается получить **/.well-known/matrix/server**. Не может. Пытается получить новый вариант SRV. Если не может - пытается получить старый. Дальше он идёт на указанный прокси, и общается с ним, в основном, по правильному имени основного домена. Но иногда, некоторые серверы, некоторые запросы шлют на доменное имя прокси сервера. Именно по этому лучше получить SSL на это имя и обрабатывать запросы и на него. Но так как мы не хотим, что-бы клиенты из белой сети могли заходить на наш сервер - мы рубим на корню клиентское API. + +---- + +Вот теперь - действительно всё. + +~~DISCUSSION~~ diff --git a/data/pages/yggdrasil/mesh_setup.txt b/data/pages/yggdrasil/mesh_setup.txt new file mode 100644 index 0000000..e64f7f3 --- /dev/null +++ b/data/pages/yggdrasil/mesh_setup.txt @@ -0,0 +1,147 @@ +====== Mesh посредством радио-линка ====== + +==== Введение ==== +В общем случае, технология Mesh Networking подразумевает ячеистую топологию, в которой устройства соединяются друг с другом, и каждое устройство может выступать в роли коммутатора для остальных устройств. Одним из очевидных преимуществ этой технологии является высокая отказоустойчивость организуемой сети. +До появления протоколов Cjdns (предшественник [[Yggdrasil]]) и Yggdrasil такая организация сети являлась достаточно сложной в настройке. Упомянутые же протоколы практически полностью освобождают администраторов сети от настройки маршрутизации. Всё, что остаётся сделать -- это соединить устройства на первом и втором уровнях сетевой модели OSI и установить на них Yggdrasil.\\ Первый (физический) уровень модели OSI предполагает физическое соединение устройств посредством кабеля, радио или оптики (лазера). На втором уровне модели OSI (канальном) посредством протоколов канального уровня обеспечивается логическое взаимодействие устройств с контролем возможных ошибок физической передачи данных. Полученные с физического уровня данные, представленные в битах, упаковываются в кадры, проверяются на целостность и, если обнаружены ошибки, исправляются (формируется повторный запрос поврежденного кадра). Затем информация передается на следующий, сетевой уровень (в нашем случае Yggdrasil). + +Ниже описан простой способ организации сети на канальном уровне (802.11s), посредством радио-линка (Wi-Fi). + +==== Создание беспроводной точки доступа Mesh к сети Yggdrasil ==== + +Потребуется: + * компьютер (можно использовать одноплатный компьютер, например RaspberryPi) + * беспроводной маршрутизатор с поддержкой стандарта [[wpru>IEEE_802.11s|IEEE 802.11s]] и возможностью прошивки в него [[https://openwrt.org/|OpenWrt]] (подробнее см. [[yggdrasil:mesh_setup#Ссылки|Ссылки]]) +// Примечание:// это требуется в данном конкретном примере, но возможно подключение с использованием только маршутизатора или только компьютера (см. [[yggdrasil:mesh_setup#Заключение|ниже]]). + +=== Подготовка === +1. Устанавливаем и запускаем Yggdrasil на компьютере\\ +2. Чтобы пользователи имели доступ ко всей сети Yggdrasil, в конфигурационном файле необходимо указать [[yggdrasil:public_peer|публичные пиры]], к которым будет подключен наш узел. Пример: + Peers: [ + tcp://a.b.c.d:xxxx + socks://e.f.g.h:xxxx/a.b.c.d:xxxx + tls://a.b.c.d:xxxx + ] + +3. Соединяем компьютер и беспроводной маршрутизатор\\ +4. Устанавливаем в беспроводный маршрутизатор прошивку [[https://openwrt.org/|OpenWrt]]\\ +5. Подключаем маршрутизатор к Интернету, чтобы Yggdrasil на компьютере смог подключиться к публичным пирам Yggdrasil\\ + +=== Точка доступа Wi-Fi Mesh === +В интерфейсе конфигурации установленной прошивки OpenWrt перейдите в раздел Network - Wi-Fi, выберите интерфейс, нажмите "Add", в поле "Mode" установите "802.11s (Wi-Fi Mesh)". + +Чтобы пользователи понимали, что это точка доступа к сети Yggdrasil, назовите SSID примерно так: "Yggdrasil Mesh 802.11s". + +==== Создание беспроводной точки доступа AP (Access Point) к сети Yggdrasil ==== + +Поднять [[https://wiki.archlinux.org/title/Software_access_point_(Русский)|программную точку доступа]] можно и используя внутренний или внешний (usb) wifi-модуль компьютера. Проверить поддержку режима AP для устройства можно следующей командой: + + +$ iw list +Wiphy phy0 +... + Supported interface modes: + * IBSS + * managed + * AP + * AP/VLAN + * WDS + * monitor + * mesh point +... + + +=== Опционально: создание виртуального интерфейса === + +Беспроводное устройство можно использовать одновременно в режиме клиента и точки доступа. Для этого необходимо [[https://wiki.archlinux.org/title/Software_access_point_(Русский)#Беспроводной_клиент_и_программная_точка_доступа_на_одном_Wi-Fi_устройстве|создать отдельные виртуальные интерфейсы на основе физического]]: + + +$ iw dev wlan0 interface add wlan0_sta type managed addr 12:34:56:78:ab:cd +$ iw dev wlan0 interface add wlan0_ap type managed addr 12:34:56:78:ab:ce + +// Примечание:// для автоматизации запуска это можно реализовать в виде скрипта инициализации (hostapd должен быть запущен после создания виртуального интерфейса), либо отредактировав конфигурационный файл сервиса hostapd (для OpenRC это /etc/conf.d/hostapd), либо просто использовав планировщик [[https://wiki.gentoo.org/wiki/Cron/ru|cron]] (например, fcron) следующим образом: + +$ fcrontab -e +@reboot <список команд через ;> + +==== ==== + +Для поднятия беспроводной точки доступа используется программа hostapd(([[https://wireless.wiki.kernel.org/en/users/Documentation/hostapd|Документация по hostapd]])). Примеры использования можно найти [[https://wiki.gentoo.org/wiki/Hostapd|на этой интернет-странице]]. +Внесите в конфигурационный файл следующую запись: + +///etc/hostapd/hostapd.conf// + +interface=wlan0 +ssid2="Yggdrasil network" +driver=nl80211 +country_code=RU +hw_mode=g +channel=1 +ieee80211n=1 + + +Запустить hostapd можно скриптом инициализации или командой: + +$ hostapd -B /etc/hostapd/hostapd.conf + +//Примечание:// если init-скрипт не запускается ввиду неактивности интерфейса, отредактируйте конфигурационный файл сервиса (для OpenRC ///etc/conf.d/hostapd//) + +После успешного запуска hostapd точка доступа будет поднята, и с ней могут ассоциироваться клиенты, - при помощи multicast и broadcast запущенные yggdrasil найдут друг друга. Однако, из-за отсутствия присвоенного ip-адреса сетевые менеджеры клиентов будут сбрасывать подключение. Чтобы этого не происходило, нужно выдать клиенту ip-адрес. Сделать это можно с помощью [[https://wiki.gentoo.org/wiki/Dnsmasq/ru|dnsmasq]], присвоив ipv4 адрес посредством DHCP, или же можно раздавать клиентам ipv6 адреса из подсети yggdrasil, дополнительно открывая доступ к сети клиентам без установленного приложения. Настроить раздачу адресов ipv6 можно с помощью radvd(([[https://wiki.archlinux.org/title/IPv6_(Русский)#Шлюз|Пример настройки radvd]])). + +///etc/radvd.conf// + +interface wlan0 +{ + ## (Send advertisement messages to other hosts) + AdvSendAdvert on; + # Без этой строчки сбоит подключение для windows-устройств (задаёт MTU) + AdvLinkMTU 1280; + MinRtrAdvInterval 300; + MaxRtrAdvInterval 600; + AdvHomeAgentFlag off; + prefix ::/64 + { + AdvOnLink on; + AdvAutonomous on; + # Без этой строки подключаются не все android-устройства; строка "route 200::/7 {};" не требуется + AdvRouterAddr on; + }; + #route 200::/7 {}; + ## (Advertise a DNS Server) + RDNSS ::53 {}; +}; + + +Укажите в строке prefix вашу подсеть из **$ yggdrasilctl getself**, а в строке RDNSS можно указать [[yggdrasil:dns:internal_dns#список_серверов|внутренний DNS]]. После запуска клиенты смогут успешно подключиться к точке доступа. + +Вывести список подключенных к точке доступа клиентов можно так: + +$ hostapd_cli all_sta +$ iw dev wlan0 station dump + + +==== Подключение устройств к беспроводной точке доступа ==== + +Подключение к точке доступа по Wi-Fi осуществляется так же, как к любой другой Wi-Fi точке доступа. Важно заметить, что на подключаемых устройствах необходимо установить Yggdrasil. В небольших масштабах об этом можно говорить устно, а в промышленных можно подумать над веб-заглушкой с ссылкой на Yggdrasil и кратким описанием сути необходимых действий. + +Для увеличения площади покрытия важно правильно подобрать антенну - круговую, секторную для охвата определенного угла или узконаправленную (параболическую) для создания wi-fi моста на несколько километров(([[https://kroks.ru/useful-articles/stati/how-to-select-the-antenna-for-wifi|Как выбрать антенну для Wi-Fi]])). Антенну можно изготовить и самостоятельно(([[https://www.youtube.com/watch?v=YBDd9SFv_lo|How to make a long range wifi antenna up to 3km]]))(([[https://www.youtube.com/watch?v=0GwhShwBmDE|Простая WiFi антенна за 15 минут]]))(([[https://www.youtube.com/watch?v=s-MKhffuPzM|Антенна для wi-fi сигнала своими руками]]))(([[https://www.youtube.com/watch?v=UpbdwG-zvnE|Самодельная Wi-Fi пушка]])), например Yagi(([[https://ru.wikipedia.org/wiki/Волновой_канал|Антенна Yagi]])). Анализируйте диаграмму направленности антенны. Также важно учитывать поглощение различными материалами(([[https://fantasylab.ru/tekhno-blog/6-fantasylab/2011-03-20-02-19-00/72-zatukhanie-wi-fi-v-razlichnykh-materialakh.html|Затухание сигнала Wi-Fi в различных материалах]])). Можно приобрести усилитель на 4W или 8W, например на AliExpress(([[https://aliexpress.ru/item/4001145704450.html|AliExpress: Усилитель мощности Wi-Fi 4/8W 2.4/5GHz]]))(([[https://aliexpress.ru/item/1005002070402052.html|AliExpress: Усилитель мощности Wi-Fi 4/8W 2.4/5GHz]]))(([[https://aliexpress.ru/item/1005002637720376.html|AliExpress: Усилитель мощности Wi-Fi 4/8W 2.4/5GHz]])), однако от такого мощного излучения нужно экранироваться. + +Подключенные узлы обнаружат себя сами благодаря технологии Local Peer Discovery. Если этого не произошло, убедитесь, что [[wpru>Пакет_(сетевые_технологии)|пакеты]] не блокируются [[wpru>Межсетевой_экран|файерволом]]. + +Подключившись таким образом к нашей Wi-Fi точке, пользователь получит доступ в глобальный сегмент сети Yggdrasil. + +==== Заключение ==== + +Описан простой способ соединения устройств с использованием технологии Wi-Fi Mesh и Yggdrasil. Соединив таким образом между собой несколько маршрутизаторов со всеми подключенными к ним устройствами, можно организовать полностью независимую сеть с автоматической маршрутизацией и сквозным шифрованием. Например, так можно организовать сеть в жилом многоквартирном доме. + +Компьютер в описанной схеме можно не использовать, если возможности самого беспроводного маршрутизатоа позволяют установить на него Yggdrasil. Так же, и наоборот - беспроводной маршрутизатор можно не использовать, если к компьютеру подключить Wi-Fi адаптер с поддержкой 802.11s (см. [[yggdrasil:mesh_setup#Ссылки|Ссылки]]) + +Проверить поддержку устройством стандарта 802.11s в Linux можно с помощью команд по ссылке: https://openwrt.org/docs/guide-user/network/wifi/mesh/80211s#wireless_hardware_support + +====== Ссылки ====== +[[wpru>Ячеистая_топология|Ячеистая топология]]\\ +[[wpru>Сетевая_модель_OSI|Сетевая модель OSI]] + +Перечень адептеров, поддерживающих 802.11s (EN): https://github.com/phillymesh/802.11s-adapters \\ +Драйверы беспроводных устройств Linux (в таблице есть колонка mesh) (EN): https://wireless.wiki.kernel.org/en/users/drivers \\ +Перечень устройств, поддерживающих прошивку OpenWrt (EN, офиц. документация): https://openwrt.org/supported_devices \\ +Конфигурирование 802.11s в OpenWrt (EN, офиц. документация): https://openwrt.org/docs/guide-user/network/wifi/mesh/80211s \ No newline at end of file diff --git a/data/pages/yggdrasil/mobile_clients.txt b/data/pages/yggdrasil/mobile_clients.txt new file mode 100644 index 0000000..3f17ba2 --- /dev/null +++ b/data/pages/yggdrasil/mobile_clients.txt @@ -0,0 +1,117 @@ +====== Yggdrasil на смартфонах ====== + + +===== iOS ===== + +[[yggdrasil:yggdrasil|Yggdrasil]] для iOS поддерживается разработчиками Yggdrasil, в частности, [[https://neilalexander.dev/|neilalexander]]. +На данный момент бета-версия Yggdrasil для iOS доступна для тестирования на платформе [[https://apps.apple.com/ru/app/testflight/id899247664|TestFlight]]. + +Необходимо установить платформу [[https://apps.apple.com/ru/app/testflight/id899247664|TestFlight]] для тестирования бета-версий приложений под iOS: в AppStore вводиим соответствующий поисковый запрос "TestFlight", у нужного приложения нажимаем кнопку "Загрузить" (прямая ссылка на приложение TestFlight: https://apps.apple.com/ru/app/testflight/id899247664). + +Далее, в браузере (напр., Safari) переходим по ссылке: https://testflight.apple.com/join/jZNsIkRr, ссылка автоматически перехватится приложением TestFlight и откроет страничку приложения Yggdrasil c кнопкой "Установить". + +При первом запуске Yggdrasil на iOS будет предложено установить новый профиль [[wpru>VPN|VPN]] - необходимо согласиться. Этот профиль будет активирован при нажатии переключателя "Enable" в приложении Yggdrasil. + +Как и в PC-версии приложения, необходимо указать пиры, к которым вы будете подключены, либо задействовать [[yggdrasil:mpd|Multicast Peer Discovery]] для поиска узлов Yggdrasil в вашей локальной сети. Настройка соответствующих параметров предусмотрена в GUI: Configuration -> Peers. + +Можно вручную отредактировать конфигурационный файл Yggdrasil для iOS - для этого необходимо его экспортировать, отредактировать любым способом, а затем импортировать. Экспорт и импорт делается с помощью GUI (Configuration -> Settings -> Export (или Import)). + +{{yggdrasil:mobile_clients:ios1.jpg?150 }} {{yggdrasil:mobile_clients:ios2.jpg?150 }} {{yggdrasil:mobile_clients:ios4.jpg?150 }} {{yggdrasil:mobile_clients:ios3.jpg?150 }} {{yggdrasil:mobile_clients:ios5.jpg?150 }} +===== Android ===== +Клиент поддерживается пользователем [[https://github.com/vikulin/|vikulin]]. Исходный текст приложения на языке Kotlin доступен в [[https://github.com/vikulin/yggdrasil-android|GitHub-репозитории]] проекта. Установочный .apk файл находится там же в [[https://github.com/vikulin/yggdrasil-android/releases|списке релизов]] и доступен для скачивания. Работа Android-приложения основана на [[https://developer.android.com/reference/kotlin/android/net/VpnService|VpnService]]. + +На данный момент поддерживаются следующие функции: + * Подключение к сети Yggdrasil при активации кнопки ''Ygg me!'' + * Установка статического адреса (Static IP) + * Вывод информации о текущих пирах + * Редактирование подключаемых пиров (кнопка Edit) + * Просмотр настроек DNS + * Редактирование текущих DNS + * Загрузка списка пиров с онлайн базы данных: https://publicpeers.neilalexander.dev/publicnodes.json + * Тест доступности и времени отклика от пиров + * Тест доступности и времени отклика от DNS + +{{yggdrasil:mobile_clients:android2.jpg?150 }} {{yggdrasil:mobile_clients:android3.jpg?150 }} {{yggdrasil:mobile_clients:android4.jpg?150 }} {{yggdrasil:mobile_clients:android1.png?150 }} {{yggdrasil:mobile_clients:android6.jpg?150 }} +===== Android (root+termux)===== +Также можно установить Yggdrasil на рутированный Android с помощью эмулятора терминала. При первой установке и настройке использовался [[https://termux.com/|Termux]], так что тут и будет описана процедура установки и запуска через него. + +Преимущество такого способа установки в отсутствии занимаемого vpn подключения, что позволяет накидывать vpn поверх Yggdrasil, а также в полном функционале, в точности, в настройке своего YGGv6 адреса, открытии портов для работы публичным или приватным пиром, создании личного nodeinfo и т.п. + +Итак, для установки потребуются права root пользователя на вашем смартфоне. Как их получить, можно почитать на соответствующих ресурсах [[https://4pda.ru/forum/index.php|4PDA]] и [[https://www.xda-developers.com/root/|XDA]]. Также стоит установить терминал, рекомендуется [[https://termux.com/|Termux]]. + +Что же нам нужно сделать? + + - Установка root доступа в Termux: ''pkg install tsu'' + - Сборка бинарников под linux arm64 на компьютере: + * + git clone https://github.com/yggdrasil-network/yggdrasil-go.git /tmp/yggdrasil + cd /tmp/yggdrasil + GOOS=linux GOARCH=arm64 ./build + mkdir ~/ygg_build + cp ./yggdrasil ~/ygg_build/ + cp ./yggdrasilctl ~/ygg_build/ + cd ~/ygg_build + ./yggdrasil -genconf > ./yggdrasil.conf + rm -rf /tmp/yggdrasil + - Настройка конфига (yggdrasil.conf) под требуемые параметры + - Добавление [[https://github.com/yggdrasil-network/public-peers|пиров]] в секцию ''Peers'' + - Исправление значения секции ''IfName'' на YOUR_TUNTAP (например, на ygg0) + - Исправление значений ''EncryptionPublicKey'' и ''EncryptionPrivateKey'' на [[https://notabug.org/acetone/SimpleYggGen-CPP|желаемые]] + - Правим значение ''AdminListen'' на ''/data/data/com.termux/files/usr/var/yggdrasil.sock'' + - Перенос всех файлов из ''~/ygg_build'' на телефон + * Необходимо сказать, что лучше класть бинарные файлы (yggdrasil и yggdrasilctl) в папку ''/data/data/com.termux/files/usr/bin'', а конфигурационный (yggdrasil.conf) в ''/data/data/com.termux/files/usr/bin'' + === Создание скрипта запуска и маршрутизации Yggdrasil === + * Если хотите, чтобы Yggdrasil запускался вместе с системой, переходите ниже к "службе с автозапуском" + * Если нужны логи работы Yggdrasil, то перед запуском скрипта выполните команду mkdir /data/data/com.termux/files/usr/var/log/yggdrasil + * Не забудьте заменить в файле ''YOUR_IP'' и ''YOUR_TUNTAP'' + termux-wake-lock + mkdir -p /dev/net + sudo ln -s /dev/tun /dev/net/tun + sudo yggdrasil -useconffile /data/data/com.termux/files/usr/etc/yggdrasil.conf > /data/data/com.termux/files/usr/var/log/yggdrasil/yggdrasil.log & + disown %1 + sleep 5 + sudo ip -6 ru add to 200::/7 lookup 200 prio 1000 + sudo ip -6 ru add from YOUR_IP lookup 200 prio 999 + sudo ip r add 200::/7 dev YOUR_TUNTAP metric 128 table 200 + + * Лучше скрипт размещать в папке ''/data/data/com.termux/files/home/'', чтоб запускать сразу при открытии терминала. + === Служба с автозапуском === +Если у вас установлен Termux Boot (а если нет, то лучше поставьте), будет удобно сделать службу, благодаря чему yggdrasil будет запускаться автоматически при загрузке телефона. Копируем любую службу, например, sshd, в качестве шаблона для нашей новой службы +cd /data/data/com.termux/files/usr/var/service +cp -r sshd yggdrasil + +Правим файл run: +vim yggdrasil/run +всё стираем и вносим, заменив значения на свои: +mkdir -p /dev/net +sudo ln -s /dev/tun /dev/net/tun +sudo yggdrasil -useconffile /data/data/com.termux/files/usr/etc/yggdrasil.conf + +Включаем и запускаем службу: +sv-enable yggdrasil +sv start yggdrasil + + + +Создаём файл в автозапуске: + +vim ~/.termux/boot/ygg-route.sh +вносим: +#!/data/data/com.termux/files/usr/bin/sh +sudo ip -6 ru add to 200::/7 lookup 200 prio 1000 +sudo ip -6 ru add from YOUR_IP lookup 200 prio 999 +sudo ip r add 200::/7 dev YOUR_TUNTAP metric 128 table 200 + +Даём права на исполнение: +chmod +x ~/.termux/boot/ygg-route.sh + + + * Теперь Yggdrasil работает в фоне, потребляя порядка 10 МБ памяти. + * Не забудьте настроить правила файрвола! + +Поздравляю, вы герой! Удачи в освоении сети Yggdrasil, и её сервисов! + +====== Ссылки ====== +Installing on iOS (EN): https://yggdrasil-network.github.io/installation-ios-app.html + +~~DISCUSSION~~ \ No newline at end of file diff --git a/data/pages/yggdrasil/mpd.txt b/data/pages/yggdrasil/mpd.txt new file mode 100644 index 0000000..44f5e87 --- /dev/null +++ b/data/pages/yggdrasil/mpd.txt @@ -0,0 +1,61 @@ +====== Multicast Peer Discovery ====== + +**Multicast Peer Discovery** - это технология автоматического обнаружения пиров [[yggdrasil:yggdrasil|Yggdrasil]] в локальной сети. + +Когда в локальной сети [[yggdrasil:yggdrasil|Yggdrasil]] запущен на нескольких устройствах благодаря этой технологии все эти узлы обнаружат друг друга и автоматически установят соединение между собой, [[yggdrasil:public_peer|прописывать]] их в секции ''%%Peers%%'' [[yggdrasil:config_russian|конфиграционного файла]] нет необходимости. + +**ВАЖНО:** //Multicast Peer Discovery в Yggdrasil работает только с link-local IPv6 адресами устройств в локальной сети (диапазон ''%%fe80::/10%%''), с IPv4 не работает! Т.е., на интерфейсах вашей локальной сети должна быть включена поддержка IPv6 и устройства должны иметь IPv6 link-local адреса в локальной сети (между ними дожен работать ping). Если настроить IPv6 в локальной сети для вас затруднительно, вы можете вручную прописывать в конфигурационном файле Yggdrasil IPv4 локальные адреса устройств в качестве пиров (листенеры настраиваются в секции ''%%Listen%%'').// + +Multicast Peer Discovery включено по-умолчанию. Окрывает UDP порт 9001 (для прослушивания сигналов о существовании от других узлов). Настраивается MPD в параметре ''%%MulticastInterfaces%%'' [[yggdrasil:config_russian|конфигурационного файла]]. + +По-умолчанию параметр выглядит так: + + +MulticastInterfaces: + [ + { + Regex: .* + Beacon: true + Listen: true + Port: 0 + Priority: 0 + Password: "" + } + ] + + * **Regex** - здесь задается регулярное выражение для имени интерфейса, на котором будет задействован Multicast Peer Discovery. Будет выбрано одно первое имя, соответствующее регулярному выражению. + * **Beacon** - если true, узел будет отправлять в сеть "уведомления" о своем сущестовании + * **Listen** - если true, узел будет ожидать (прослушивать) сигналы ("уведомления") о присутствии от других узлов + * **Port** - TCP-порт, который будет открыт для установки соединения с обнаруженными пирами. Если указано ''%%0%%'', порт будет назначен случайным образом. + * **Priority** (не обязательно, доступно с версии 0.4.6) - приоритет для соединения с одним и тем же узлом, если у узла несколько интерфейсов (число 0 до 254). + * **Password** (не обязательно, доступно с версии 0.5 RC1) - пароль, используемый в "рукопожатии" TLS. + +Объектов json в массиве MulticastInterfaces может быть несколько (т.е., для каждого интерфейса свой объект). Пример: + + +MulticastInterfaces: + [ + { + Regex: eth0 + Beacon: true + Listen: false + Port: 0 + }, + { + Regex: wlo1 + Beacon: false + Listen: true + Port: 0 + } + ] + +Для примера, если вы хотите, чтобы в локальной сети все узлы подключались к одному пиру в этой же сети и не соединялись между собой каждый с каждым, нужно на одном узле установить ''%%Beacon%%'' в ''%%true%%'', а на остальных узлах ''%%Beacon%%'' в ''%%false%%'' и ''%%Listen%%'' в ''%%true%%''. + + +Чтобы полностью отключить Multicast Peer Discovery нужно привести MulticastInterfaces к такому виду: + +MulticastInterfaces: [] + +UPD порт 9001 после этого открыт не будет, "сигналы" о присутсвии отправляться не будут. + +~~DISCUSSION~~ diff --git a/data/pages/yggdrasil/mtu.txt b/data/pages/yggdrasil/mtu.txt new file mode 100644 index 0000000..e4e3bf3 --- /dev/null +++ b/data/pages/yggdrasil/mtu.txt @@ -0,0 +1,50 @@ +~~NOTOC~~ +====== О большом MTU в Yggdrasil ====== +//13 июля 2018 года, автор: Neil Alexander// + +Возможно, вы заметили, что в Yggdrasil значение параметра MTU отличается от обычных значений, которые вы могли видеть в других местах. В большинстве случаев, в сетях Ethernet это значение приблизительно равно 1500 байт. В сетях, где используется VPN, значение может быть еще меньше, это связано с накладными расходами на работу протоколов, обеспечивающих соединение VPN. Так что, возможно, вы были удивлены, увидев в Yggdrasil интерфейсный MTU со значением до 65535 байт. + +На самом деле, это не ошибка, так задумано. + +MTU - это параметр конфигурации Yggdrasil, который задает максимальный размер полезного блока данных одного пакета, передаваемого без фрагментации. +Помимо этого, сама операционная система поддерживает настройку MTU для каждого сетевого адаптера. Фактически, этот параметр означает следующее: “пакеты, равные или меньшие этого числа байтов, безопасно отправлять по этому каналу одним пакетом”. Любые блоки большего размера операционная система должна будет разделить на более мелкие, прежде чем отправлять их дальше. + +При меньшем значении MTU мы будем вынуждены гораздо чаще повторно отправлять IP-заголовки (и, возможно, другие заголовки) с каждым отдельным пакетом. Это не только лишние байты трафика, но и каждый пакет, вероятно, потребует нового набора системных вызовов для его обработки. В случае с Yggdrasil мы полагаемся на системные вызовы не только для операций c сокетом, но и для виртуальных сетевых драйверов TUN/TAP. Каждый системный вызов требует переключения контекста, что является медленной операцией. На встроенных платформах это может быть настоящим убийцей производительности. Например, на EdgeRouter X переключение контекста для адаптера TUN/TAP является самым узким местом и на это расходуется больше ресурсов, чем на криптографические алгоритмы! + +===== Выбор TCP вместо UDP ===== + +Разумно предположить, что чем меньше переключений контекста и меньше передач заголовков, тем лучше. Использование MTU 65535 вместо 1500 позволяет передать более чем в 43 раза больше данных перед следующим набором заголовков. Это позволяет из 65535 байт сэкономить почти 1680 байт только на заголовках! Но отправка 65535-байтового пакета Yggdrasil по каналу связи с MTU 1500 потребует, чтобы пакет был фрагментирован 43 раза, верно? + +Чтобы избежать этого Yggdrasil использует для пиринга TCP-соединения. Это не только позволяет нам использовать преимущества прокси SOCKS (и Tor) таким образом, который не возможен при использовании UDP, но и дает нам свойства потока на наших соединениях вместо того, чтобы вручную принудительно разделять пакеты UDP. На самом деле, мы делали это в прошлом, и это было некрасиво, и во многих случаях производительность была хуже, чем производительность TCP. + +TCP настроит размер окна в соответствии с нижним звеном - в данном случае с вероятным значением MTU 1500 - и будет передавать большой пакет кусками, пока он не прибудет на удаленную сторону в виде одного блока. Поэтому Yggdrasil не заботит MTU реального линка между вами и вашими пирами. Он просто получает пакет размером до 65535 байт, который затем обрабатывает и передает адаптеру TUN/TAP. + +===== Но... TCP поверх TCP? ===== + +Описанное означает, что мы туннелируем протокол TCP через TCP. Я слышу, как вы орете. Это же безумие, серьезно? Проблема с TCP-over-TCP заключается в том, что в случае перегрузки или потери пакетов TCP попытается повторно передать неудачные пакеты, но если управляющие пакеты TCP из внутреннего соединения будут повторно переданы, переупорядочены и т.д. инкапсулированным TCP-соединением, это приведет к существенному снижению производительности когда операционная система будет регулировать это внутреннее TCP-соединение, чтобы справиться с тем, что она считает перегрузкой. + +Однако, используя большие MTU и, следовательно, большие размеры окон во внутреннем TCP-соединении, мы посылаем гораздо меньше управляющих сообщений TCP по проводу - возможно, до 43 раз меньше - поэтому существует гораздо меньше возможностей для управляющих сообщений на внутреннем соединении быть затронутыми при повторной передаче. Это помогает стабилизировать производительность внутренних TCP-соединений. + +Есть также некоторые другие умные вещи, происходящие на уровне TCP Yggdrasil. В частности, для трафика сеанса используются очереди LIFO , что при первом признаке любой перегрузки на инкапсулирующем канале приводит к переупорядочеванию. TCP очень охотно отступает в этом случае, что помогает справиться с реальной перегрузкой на канале. + +===== Согласование MTU ===== + +Большая проблема, с которой мы столкнулись, заключалась в том, что разные операционные системы имеют разные максимальные MTU. Linux, macOS и Windows все разрешают максимальный MTU 65535 байт, но FreeBSD позволяет только половину этого - 32767 байт, OpenBSD еще меньше - 16384 байт и NetBSD позволяет ничтожные 9000 байт! Не говоря уже о том, что могут быть также веские причины для корректировки MTU вручную, для этого добавлена опция IfMTU в yggdrasil.conf + +Для любых двух узлов Yggdrasil нужен способ договориться о значении MTU, которое подходит для обеих сторон. С этой целью, каждый узел отправляет свой собственный MTU на удаленную сторону при создании зашифрованного сеанса. Зная как свой собственный MTU, так и MTU удаленной стороны, вы можете выбрать нижний из двух MTU, так как нижний из двух MTU гарантированно безопасен для обеих сторон. На самом деле, вы даже можете увидеть, что такое согласованный MTU сеанса, используя yggdrasilctl getSessions или отправив запрос getSessions в сокет администратора. + +===== Использование ICMPv6 для передачи сигналов в userspace ===== + +Итак, что произойдет, если вы установите сеанс с кем-то, у кого настроено меньшее MTU, чем у вас? Согласование сеанса и обмен MTU позволят Yggdrasil выбрать более низкий MTU для сеанса, но ваш адаптер TUN/TAP на вашей собственной стороне все еще имеет больший из двух MTU. Как мы сообщим userspace о новом MTU? + +IPv6 предусматривает пакет типа "Too Big", который предназначен для облегчения обнаружения пути MTU (Path MTU Discovery) в стандартных сетях IPv6. Если вы отправляете большой пакет, промежуточный узел (например, маршрутизатор) может отправить отправителю сообщение ICMPv6 "Too Big", означающее, что отправленный вами пакет превышает самый большой поддерживаемый размер пакета (фактически восходящий канал MTU). Отправляющий узел может затем фрагментировать пакет и повторно отправлять его в меньших кусках, чтобы он соответствовал этому нижнему значению MTU на пути. Yggdrasil использует это поведение, генерируя управляющие сообщения "Too Big" и отправляя их обратно адаптеру TUN/TAP, когда он обнаруживает, что вы пытались отправить пакет через сеанс Yggdrasil, который больше, чем согласованный MTU. + +Это приводит к тому, что операционная система фрагментирует пакеты до размера MTU, поддерживаемого сеансом, и повторно отправляет их. Кроме того, операционная система кэширует этот недавно обнаруженный MTU на будущее, чтобы он правильно фрагментировался для этого получателя с этого момента. По сути, Yggdrasil "обманывает" операционную систему, заставляя ее думать, что в соединении действительно происходит Path MTU Discovery. + +===== Вывод ===== + +Вы видите, что Yggdrasil выполняет ряд трюков, чтобы обеспечить гибкое MTU между узлами, и использует преимущества потоковой природы TCP, чтобы обеспечить наибольший уровень производительности и гибкости. Существует ряд подвижных частей для этого - согласование сеанса, генерация сообщений ICMPv6 и выбор TCP вместо UDP для пиринговых соединений. Я надеюсь, что это демистифицирует некоторые из наших решений и объяснит, почему мы поощряем использование более крупных MTU в соединениях. + +====== Ссылки ====== + +About huge MTUs in Yggdrasil (EN): https://yggdrasil-network.github.io/2018/07/13/about-mtu.html \ No newline at end of file diff --git a/data/pages/yggdrasil/network_connection_variants.txt b/data/pages/yggdrasil/network_connection_variants.txt new file mode 100644 index 0000000..947b096 --- /dev/null +++ b/data/pages/yggdrasil/network_connection_variants.txt @@ -0,0 +1,279 @@ +====== Как подключиться к Yggdrasil, не устанавливая его клиент на устройство ====== + +Разработчики [[yggdrasil:yggdrasil|Yggdrasil]] рекомендуют устанавливать клиент Yggdrasil на каждое устройство, которому нужен доступ в эту сеть. При этом гарантируется сквозное шифрование трафика между узлами, и каждый узел сети сможет выполнять роль маршрутизатора. Однако не во всех сетевых устройствах есть возможность установки и запуска Yggdrasil. + +===== Вариант 1: маршрутизация из подсети /64 ===== + +Если устройство поддерживает протокол IPv6, оно может быть подключено к сети Yggdrasil путем присвоения ему IPv6 адреса из подсети 300::/64 и указания адреса шлюза в сеть Yggdrasil. + +Иными словами, если у нас дома есть роутер, на котором имеется возможность установить Yggdrasil, то другие устройства в нашей сети мы можем подключить к сети Yggdrasil, не устанавливая на них клиент сети. + +Предположим, что узел на роутере имеет адрес Yggdrasil ''200:1111:2222:3333:4444:5555:6666:7777'', тогда для подключения других устройств в сети необходимо им назначить адреса такого вида: ''300:1111:2222:3333::/64''. Это могут быть: ''300:1111:2222:3333::1'', ''300:1111:2222:3333::2'' и т.д. Обратите внимание, что первая цифра 2 изменена на 3, далее 3 разряда с разделителем ":" - это обязательная часть префикса. Остальные 64 бита (4 последние секции) - произвольные числа от 0000 до ffff. Читайте подробнее о подсети [[yggdrasil:subnet_setting|в этой статье]]. + +Далее, устройствам с адресами ''300:1111:2222:3333::/64'' нужно указать маршрут в сеть 0200::/7 через основное устройство с адресом ''200:1111:2222:3333:4444:5555:6666:7777''. + +//**Примечание:** следует учитывать, что при такой конфигурации трафик между роутером и устройствами без Yggdrasil будет передаваться незашифрованным. Кроме того, обратите внимание, что префикс /64 имеет меньше битов адресного пространства, доступного для проверки идентификатора узла, что, в свою очередь, означает, что коллизии хэшей более вероятны. Таким образом, не следует полностью полагаться на адреса диапазона 300::/8 как на достоверно принадлежащие конкретному узлу (хотя, до сих пор подобные коллизии и не возникали, и даже не были намеренно созданы с помощью майнеров адресов, теоретически вероятность их возникновения существует).// + +==== Пример ручной настройки ==== + +Допустим, в домашней сети работает [[wpru>Raspberry_Pi|RaspberryPi]], на котором установлен Yggdrasil: aдрес Yggdrasil: ''%%202:421a:2eс5:40a4:fa32:f4a4:9b42:d4e4%%''; префикс, соответственно: ''%%302:421a:2eс5:40a4::/64%%''; интерфейс: ''%%tun0%%''; к локальной сети Raspberri подключен через интерфейс ''%%eth0%%''. + +Хотим подключить к сети Yggdrasil ноутбук, но не хотим на него устанавливать само ПО Yggdrasil. Ноутбук подключен к той же домашней сети через интерфейс ''%%wlo1%%'' (Wi-Fi). + +1. Нужно на интерфейс, через который Raspberri подключен к локальной сети, добавить адрес из подсети Yggdrasil: +sudo ip address add 302:421a:2eс5:40a4::1/64 dev eth0 + +2. На Raspberri же включаем форвардинг пакетов между интерфейсами: +sudo sysctl -w net.ipv6.conf.all.forwarding=1 +(для того, чтобы это сохранилось после перезагрузки, необходимо раскоментировать присвоение 1 этому параметру в ''%%/etc/sysctl.conf%%'') + +3. На ноутбуке, на интерфейсе, которым он подключен к локальной сети, добавим адрес из подсети Yggdrasil: +sudo ip address add 302:421a:2eс5:40a4::5/64 dev wlo1 + +4. Прописываем на ноутбуке маршрут: +sudo ip -6 route add 0200::/7 via 302:421a:2eс5:40a4::1 + +//**Примечание:** если на этом этапе у вас возникли сложности, и у вас старое ядро Linux, возможно, вам поможет статья: "[[yggdrasil:route_with_old_kernel]]".// + +Всё, пробуем с ноутбука пинговать адреса в Yggdrasil: +ping -6 21e:a51c:885b:7db0:166e:927:98cd:d186 + +Как видим, всё работает: +PING 21e:a51c:885b:7db0:166e:927:98cd:d186(21e:a51c:885b:7db0:166e:927:98cd:d186) 56 data bytes +64 bytes from 21e:a51c:885b:7db0:166e:927:98cd:d186: icmp_seq=1 ttl=63 time=58.0 ms +64 bytes from 21e:a51c:885b:7db0:166e:927:98cd:d186: icmp_seq=2 ttl=63 time=69.0 ms +... + + +После проделанного, на всякий случай, не забудьте проверить, какие порты открыты на адресах ''%%302:421a:2eс5:40a4::1%%'' и ''%%302:421a:2eс5:40a4::5%%'': +nmap -6 302:421a:2eс5:40a4::5 +nmap -6 302:421a:2eс5:40a4::1 + +==== Автоматическая настройка ==== +Для целей автоматической раздачи устройствам в домашней сети IPv6-адресов из /64-подсети можно использовать демон [[wp>radvd]] (router advertisement daemon). + +Примеры конфигурации демона radvd: + + + +interface eth0 +{ + AdvSendAdvert on; + AdvDefaultLifetime 0; + prefix 300:1111:2222:3333::/64 { + AdvOnLink on; + AdvAutonomous on; + }; + route 200::/7 {}; +}; + + + +interface eth0 +{ + AdvSendAdvert on; + AdvLinkMTU 1280; # без этой строчки сбоит подключение для windows-устройств (задаёт MTU) + MinRtrAdvInterval 30; + MaxRtrAdvInterval 100; + prefix 300:1111:2222:3333::/64 { + AdvOnLink on; + AdvAutonomous on; + AdvRouterAddr on; # Без этой строки подключаются не все android-устройства; строка "route 200::/7 {};" не требуется. + }; + RDNSS 300:1111::53 {}; # Необязательно (задает рекурсивный DNS-сервер) +}; + + + + +Здесь ''%%300:1111:2222:3333::/64%%'' - префикc вашей подсети ("выдается" вместе с IPv6 адресом, привязанным к ключу в конфигурационном файле Yggdrasil). + +//**Примечание:** по [[https://cstamas.hu/blog/posts/yggdrasil_300::__47__7_network_with_openwrt/|этой]] ссылке можно прочесть о том, анонсируется маршрут-поумолчанию без radvd (на [[wpru>OpenWrt]]).// + +Для корректной работы маршрутизации через устройство, на котором установлен Yggdrasil на нем должна быть разрешена маршутизация IPv6-пакетов: + +sudo sysctl -w net.ipv6.conf.all.forwarding=1 +''%%net.ipv6.conf.all.forwarding=1%%'' нужно раскомментировать в ''%%/etc/sysctl.conf%%'' + +== То же самое, но без использования radvd == + +Допустим, у вас есть роутер, где LAN является сетевым интерфейсом br0, а Yggdrasil - ygg0. + + +ip a add fdb7:e5e:e3a9:f2d1::/64 dev br0 # Unique local address (ULA) является аналогом 192.168.1.1 в ipv4, его нужно добавить для корректной работы dnsmasq. +ip a add 300:1111:2222:3333::/64 dev br0 # Не забудьте заменить префикс 300:1111:2222:3333::/64 из примера на правильный адрес, полученный при запуске команды yggdrasilctl -v getSelf +ip route add 200::/7 dev ygg0 + + +Обратите внимание на эти команды. Наиболее лучшим решением будет добавление ipv6 адресов через конфигурационные файлы системы или заранее подготовленный скрипт. В примере также добавлен ULA (fdb7:e5e:e3a9:f2d1::). Не обязательно использовать именно этот префикс. Вы можете сгенерировать свой https://unique-local-ipv6.com/ + +**Более подробный пример для систем c OpenRC** + +На операционных системах c OpenRC (например, Gentoo) у вас есть возможность дополнительно запускать свои собственные скрипты. При каждом запуске сервиса local - будет запускаться скрипт yggdrasil**.start**. Подробнее: https://wiki.gentoo.org/wiki//etc/local.d + + +# rc-service local restart + * Stopping local ... + * Executing "/etc/local.d/yggdrasil.stop" ... [ ok ] + * Starting local ... + * Executing "/etc/local.d/yggdrasil.start" ... [ ok ] + + +/etc/local.d/yggdrasil**.start** + + +#!/bin/bash + +# Возможно, вы захотите очистить лог +> /var/log/yggdrasil.stdout.log + +#Не забудьте заменить префикс 300:1111:2222:3333::/64 из примера на правильный адрес, полученный при запуске команды yggdrasilctl -v getSelf +ip a add 330:1111:2222:3333::/64 dev br0 +# Также вы можете добавить адрес вашего вебсайта +ip a add 330:1111:2222:3333::fea4/64 dev br0 +ip r add 200::/7 dev ygg0 + + +Можно дополнительно создать срипт /etc/local.d/yggdrasil**.stop**, который будет удалять добавленные адреса, но он не особо то и нужен. Учтите, при перезапуске интерфейса br0 он снова сбросится к стандартным настройкам. + +rc-service net.br0 restart + +Это можно исправить несолькими способами: + - снова перезапустив сервис **local** + - перезапустив сам скрипт /etc/local.d/yggdrasil**.start** + - или, для автоматизации, добавив в файл /etc/conf.d/net вот таую конструкцю, которая сама запустит скрипт при поднятии интерфейса br0 + + +postup() { + if [ "${IFACE}" = "br0" ] + then + #rc-service local restart + /etc/local.d/yggdrasil.start + fi + return 0 +} + + + +На данном этапе вы уже можете посетить сайты сети Yggdrasil через консоль роутера. Убедитесь, что это работает. + + +# Используя консольный браузер +lynx http://[222:a8e4:50cd:55c:788e:b0a5:4e2f:a92c]/ +# Или вот так +curl http://[222:a8e4:50cd:55c:788e:b0a5:4e2f:a92c]/ + +Теперь настройте DHCP**v6**, чтобы раздавать адреса устойствам подключённым каким либо образом к интерфейсам объединённым в br0 (для понимания, br0 - бридж). + +Допишите в файл /etc/dnsmasq.conf + + +listen-address=::1,127.0.0.1,192.168.1.1,fdb7:e5e:e3a9:f2d1:: # Слушать множество адресов, включая добавленный нами ранее ULA +dhcp-range=br0,300:1111:2222:3333::,ra-stateless,72h # YGG DHCP - Автоматическое получение адресов (DHCP). Не забудьте заменить 300:1111:2222:3333:: из примера на правильный адрес, полученный при запуске команды yggdrasilctl -v getSelf +dhcp-range=br0,fdb7:e5e:e3a9:f2d1::,ra-stateless,72h # ULA DHCP + +# Пример настройи DNS сервера только для посещения сайтов черрез домены .ygg и .meship. +# Актуальные DNS сервера публикуются на странице http://[222:a8e4:50cd:55c:788e:b0a5:4e2f:a92c]/yggdrasil:dns:internal_dns +server=/.meship/.ygg/302:db60::53 +server=/.meship/.ygg/300:6223::53 + +# В данной конфигуации вы также можете использовать unbound, но не 53 порту, так как порт занят DNS сервером самого dnsmasq. Пример конфигуации unbound на странице http://[222:a8e4:50cd:55c:788e:b0a5:4e2f:a92c]/yggdrasil:dns:unbound_wyrd +server=::1#5353 +server=127.0.0.1#5353 + + + +После внесения правок перезапустите dnsmasq. + + +===== Вариант 2: использование прокси-сервера ===== + +[[yggdrasil:Yggdrasil]] устанавливается на одном единственном компьютере. Лучше, если это будет домашний сервер, который никогда не выключается. +На этом сервере нужно поставить прокси (http или socks), тогда вы сможете заходить через этот прокси в сеть, используя веб-браузер. А если ваш сервер +виден из внешнего мира, то вы сможете выходить в сеть вообще отовсюду. Не забудьте только повесить прокси на нестандартном порту и жестко ограничить IP, с которых предполагается туда заходить. Например, только из дома и только с работы. Если у вас есть доступ по ssh к собственному серверу (так обычно и бывает), то список разрешенных IP можно гибко менять при необходимости. Ведь вы можете оказаться в гостинице, в отпуске на Багамах, в командировке и т.д. +//Имейте в виду, что c клиента трафик до прокси-сервера будет идти в открытом виде.// + +Используя какой-нибудь проксификатор ([[https://www.proxifier.com/|Proxifier]]) или что-то вроде [[https://github.com/xjasonlyu/tun2socks/|Tun2Socks]] можно не только посещать сайты в сети [[yggdrasil:Yggdrasil]], настроив соединение через прокси-сервер, но и дать возможность практически любым приложениям (не поддерживающим соединение через прокси-сервер) работать через прокси-сервер. + +Пример конфигурации простейшего [[https://3proxy.ru/?l=RU|3proxy]]: + +log NUL D +internal 127.0.0.1 +auth none +flush +socks -46 -p3229 -i91.233.111.15 + +''%%91.233.111.15%%'' - адрес, на котором будет ждать подключений socks-прокси (может быть в локальной сети (192.168.x.x)) \\ +''%%3229%%'' - порт, на котором будет ждать подключений socks-прокси + +Используя [[wp>Proxy_auto-config|PAC-файл]] можно настроить браузер так, чтобы запросы на адреса Yggdrasil / ALFIS шли через прокси, а всё остальное - напрямую. Пример //подобного// PAC-файла можно найти [[https://www.linux.org.ru/forum/general/12324672?cid=12324680|здесь]]. Подробнее о PAC можно прочесть [[https://securelist.ru/pac-fajl-avtokonfiguratsii-problem/242/|здесь]]. + +===== Вариант 3: маршрутизация через VPN-сервер ===== + +==== использование WireGuard ==== +Некоторые пользователи устанавливают [[yggdrasil:Yggdrasil]] на свой VPN-сервер и маршрутизируют трафик в Yggdrasil через него. В качестве серверного ПО VPN-сервера может использоваться [[https://openvpn.net/|OpenVPN]] или [[:wireguard|WireGuard]]. На сервере должна быть включена маршутизация пакетов (в ''%%/etc/sysctl.conf%%''): +net.ipv4.ip_forward=1 +net.ipv6.conf.all.forwarding=1 +Т.о., подключаясь к VPN-серверу, клиент получает доступ и в Интернет, и в Yggdrasil. + +Пример конфигурации [[:wireguard|WireGuard]] на сервере: +[Interface] +Address = 10.0.0.1/24, fd00::1/124 +PrivateKey = 6EwVi06HBT/DdmYSM8QZv554OoE3mk0vxC3DdlVW/nc= +ListenPort = 51820 +#IPv6 and IPv4 +PostUp = iptables -A FORWARD -i %i -j ACCEPT; iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE; iptables -A FORWARD -o %i -j ACCEPT; ip6tables -A FORWARD -i %i -j ACCEPT; ip6tables -t nat -A POSTROUTING -o tun0 -j MASQUERADE; ip6tables -A FORWARD -o %i -j ACCEPT +PostDown = iptables -D FORWARD -i %i -j ACCEPT; iptables -t nat -D POSTROUTING -o eth0 -j MASQUERADE; iptables -D FORWARD -o %i -j ACCEPT; ip6tables -D FORWARD -i %i -j ACCEPT; ip6tables -t nat -D POSTROUTING -o tun0 -j MASQUERADE; ip6tables -D FORWARD -o %i -j ACCEPT + +[Peer] +PublicKey = cyP3jP+Xwbp84kUxct6TGXx8rM1xFCVOBn8Z4m+vLxE= +AllowedIPs = 10.0.0.2/32, fd00::2/128 + +#... + + +На клиенте: +[Interface] +Address = 10.0.0.2/24, fd00::2/124 +PrivateKey = rOZrd1oaoYAFOd0CPBkXhsvfzPrMj79aIQ0THswGsv7= +DNS = 94.140.14.14, 94.140.15.15 + +[Peer] +PublicKey = Rgh78oSDafr2sNv6cp/vBDlaiuVCi2DtCduU0mmcHpo= +Endpoint = xxx.xxx.xxx.xxx:51820 +#Все IPv4 и только Yggdrasil-IPv6 +AllowedIPs = 0.0.0.0/0, 200::/7 +#или так (все IPv4 и все IPv6): +#AllowedIPs = 0.0.0.0/0, ::/0 + + +Для того, чтобы через туннель работало разрешение имен [[yggdrasil:dns:ALFIS|ALFIS]], можно установить ALFIS на сервере или использовать один из [[yggdrasil:dns:alfis#список_публичных_серверов|публичных серверов]] и на клиенте, в конфигурационном файле wireguard, в строке, начинающейся с ''%%DNS =%%'', указать адрес резолвера/сервера ALFIS. + +//Примечание:// при такой конфигурации, чтобы работало обычное соединение по IPv6, нужно наличие "настоящего" IPv6 на сервере, и для него (для нужного интерфейса) нужно будет добавить маскарадинг в ''%%PostUp =%%'' и ''%%PostDown =%%''. Подробнее здесь: [[wireguard:simple_vpn]] + +==== использование ZeroTier ==== +Это еще один вариант с использованием отдельностоящего сервера в качестве VPN. + +Данный вариант инетерсен тем, что у [[https://www.zerotier.com/|ZeroTier]] есть клиент подо все популярные операционные системы и мобильные платформы. + + - Регистрируемся на [[https://my.zerotier.com/|контроллере]] (для личных нужд хватит бесплатной версии) или поднимаем один из своих контроллеров (например [[https://key-networks.com/ztncui/|ztncui]] или [[https://github.com/dec0dOS/zero-ui|zero-ui]]) + - На сервере скачиваем и устанавливаем [[https://www.zerotier.com/download/|клиент ZeroTier]], устанавливаем [[yggdrasil:Yggdrasil]], и включаем ipv6 форвардинг посредством **sysctl net.ipv6.conf.all.forwarding=1** + - Смотрим на полученные в yggdrasil адреса. Допустим aдрес Yggdrasil: **202:421a:2eс5:40a4:fa32:f4a4:9b42:d4e4**, префикс, соответственно: **302:421a:2eс5:40a4::/64** + - В контроллере создаём новую сеть. В этой сети нужно выолнить следующие настройки: + - Добавить роутинг **302:421a:2eс5:40a4::/64** "без gateway", т.е. эти адреса должны остаться внутри сети ZeroTier + - Добавить роутинг **200::/7** через **302:421a:2eс5:40a4::1** (или любой другой адрес, который вам захочется назначить GW. + - Отключить **IPv4 Auto-Assign** + - Включить **IPv6 Auto-Assign** в режиме **Auto-Assign from Range** + - Добавить пул выделяемых адресов с **302:421a:2eс5:40a4::1** по **302:421a:2eс5:40a4:ffff:ffff:ffff:ffff** + - На сервере добавляем клиента ZeroTier в нашу сеть посредством **zerotier-cli join >** (netid берём из настроек сети в контроллере) + - Так как ZeroTier считает **200::/7** публичной сетью (скажем искреннее спасибо авторам Yggdrasil за выбранный адрес), выполняем команду **zerotier-cli set allowGlobal=1** + - В контроллере "авторизуем" нового клиента. Или переводим сеть из разряда **Private** в разряд **Public** и забываем об этой операции навсегда. Если вы не будете где попало светить своей сети, к ней никто подключиться не может всё равно. + - Там же меняем IP у этого клиента на **302:421a:2eс5:40a4::1** + +Собственно, на этом всё. Теперь на любое устройство/компьютер можно поставить клиент ZeroTier и присоеденившись к сети автоматически олучить IP адрес и роутинг. Ну или полуавтоматически, если Вы параноик и не стали переводить сеть в режим **Public**, то Вам придётся на контроллере авторизовывать каждое новое устройство. Единственное - не забываем на клиенте разрешать "глобальные адреса" через **zerotier-cli set allowGlobal=1** (еще раз скажем искреннее спасибо авторам Yggdrasil), иначе клиент просто не примет такой адрес (в мобильных клиентах тоже есть такая настройка). + +====== Ссылки ====== +Конфигурация Yggdrasil, описание префикса адреса (EN): https://yggdrasil-network.github.io/configuration.html \\ +Configuring Yggdrasil with systemd-networkd (EN): https://tdem.in/post/yggdrasil-systemd/ \\ + +~~DISCUSSION~~ diff --git a/data/pages/yggdrasil/nginx_proxying.txt b/data/pages/yggdrasil/nginx_proxying.txt new file mode 100644 index 0000000..b682ef3 --- /dev/null +++ b/data/pages/yggdrasil/nginx_proxying.txt @@ -0,0 +1,181 @@ +====== Проксирование c помощью nginx ====== +** или как создать зеркало интернет-сайта в сети Yggdrasil ** + +Здесь будет описан способ создания зеркала сайта в сети Yggdrasil с использованием возможности web-сервера nginx работать в качестве прокси-сервера. + +Всё описанное доступно для реализации как под управлением ОС Linux, так и Windows.\\ +Мы рассмотрим конфигурирование nginx, установленного в OC linux (на базе Debian). + +Для создания корректно функционирующего зеркала сайта необходимы базовые знания языка гипертекстовой разметки (HTML), а так же, Java Script, CSS, и понимание принципов взаимодействия браузера и web-сервера. + +Если ранее вы не занимались конфигурированием web-сервера nginx, настоятельно рекомендую ознакомиться со структурой конфигурационного файла, базовыми настройками, встроенными переменными и с примерами простейших конфигураций.\\ +Документация nginx доступна на официальном сайте проекта:\\ +https://nginx.org/ru/docs/\\ +Руководство для начинающих:\\ +https://nginx.org/ru/docs/beginners_guide.html + +В процессе исследования проксируемого сайта, скорее всего, вам понадобятся инструменты отладки, встроенные в популярные браузеры. С ними так же желательно предварительно ознакомиться.\\ +Краткое описание инструментов разработчика в браузере Firefox: https://developer.mozilla.org/ru/docs/Tools + +Если nginx еще не установлен, необходимо его установить: +sudo apt-get install nginx + +Базовой установки (с поставляемыми по-умолчанию модулями) в большинстве случаев будет достаточно. + +Конфигурационные файлы nginx находятся в директории ''/etc/nginx/''.\\ +Общие настройки сервера (''nginx.conf'') мы рассматривать не будем, перейдем непосредственно к конфигурированию проксирования конкретного сайта. Тем, кто впервые установил nginx рекомендую, как минимум, просмотреть файл ''/etc/nginx/nginx.conf'' и, желательно, прочитать о директивах, которые там содержатся. + +В качестве примера возьмем новостной сайт https://www.interfax.ru/ + +^ Небольшое отступление ^ +| Конфигурационные файлы конкретных сайтов обычно размещаются в директории ''/etc/nginx/sites-available/''.\\ А в директории ''/etc/nginx/sites-enabled/'', как правило, помещают символические ссылки на конфигурации из ''/etc/nginx/sites-available/''.\\ Всё, что находится в ''/etc/nginx/sites-enabled/'' nginx считывает при запуске.\\ Таким образом можно легко включать и отключать какой-то сайт на сервере.\\ Например, если в ''/etc/nginx/sites-available/'' есть файл ''homesite.conf'', можно создать на него ссылку в ''/etc/nginx/sites-enabled/''\\ \\ ''$ sudo ln -s /etc/nginx/sites-available/homesite.conf /etc/nginx/sites-enabled/homesite.conf''\\ \\ Перезапустив nginx, мы сможем зайти на сайт, настроенный в этом конфигурационном файле.\\ \\ ''$ sudo systemctl restart nginx''\\ \\ Если мы захотим сделать сайт недоступным, мы просто удаляем ссылку из ''/etc/nginx/sites-enabled/'' и перезапускаем nginx.\\ \\ ''$ sudo rm -f /etc/nginx/sites-enabled/homesite.conf && sudo systemctl restart nginx'' \\ \\ Cайт более не работает, а его конфигурация осталась в ''/etc/nginx/sites-available/''.| + +Для экспериментов временно добавим IP-адрес на интерфейс tun0. +sudo ip address add 300:529f:150c:eafe::7/64 dev tun0:1 +Подробнее о том, как добавить несколько адресов на один интерфейс можно прочесть статье [[yggdrasil:subnet_setting|Короткий адрес из подсети 300::/64]]. + +Создадим файл ''/etc/nginx/sites-available/interfax.ru.conf''\\ +И внесем в него такое содержимое: +server { + #установка заголовков, которые позволят понять серверу, что запросы пришли через прокси-сервер + proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; + proxy_set_header X-Real-IP $remote_addr; + + listen [300:529f:150c:eafe::7]:80; + location / { + proxy_pass https://www.interfax.ru/; + } +} + +Таким образом мы сообщаем серверу, на каком интерфейсе (адресе) и порту должен работать сайт, и что при обращении к корневой директории необходимо сделать запрос на https://www.interfax.ru/ и выдать нам результат. + +Создаем ссылку в ''/etc/nginx/sites-enabled/'' и перезапускаем nginx. +sudo ln -s /etc/nginx/sites-available/interfax.ru.conf /etc/nginx/sites-enabled/interfax.ru.conf && sudo systemctl restart nginx + +Если сейчас мы откроем браузер и перейдем по адресу http://[300:529f:150c:eafe::7]/, мы уже увидим страницу с новостями.\\ +Но это еще не всё. Откроем панель инструментов разработчика, перейдем на закладку Сеть и обновим страничку.\\ +Видно, что часть скриптов запрашивается браузером с других адресов (static.smi2.net др.)...\\ +Пользователи, не имеющие доступа в интернет (подключенные к Yggdrasil посредством технологии mesh-сетей), не смогут загрузить эти скрипты.\\ +Исправим это, а заодно заблокируем лишнее (баннеры, счетчики и т.п.). + +server { + listen [300:529f:150c:eafe::7]:80; + + #установка заголовков, которые позволят понять серверу, что запросы пришли через прокси-сервер + proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; + proxy_set_header X-Real-IP $remote_addr; + + sub_filter_once off; #нужно заменять все совпадения, не только первое + sub_filter_last_modified on; #сохранение поля Last-Modified в исходном ответе + + location / { + + proxy_set_header Accept-Encoding ""; # сообщаем серверу, что данные не нужно сжимать, иначе не будут работать фильтры sub_filter + + sub_filter "https://static.smi2.net/" "$scheme://$host/staticsmi2net/"; + sub_filter "//smi2.ru/" "//$host/smi2ru/"; + sub_filter "https://www.interfax.ru/" "$scheme://$host/"; + sub_filter "https://fonts.googleapis.com/" "$scheme://$host/ftsgapis/"; + sub_filter "https://cdn.onthe.io/" "$scheme://$host/cdnontheio/"; + + #обрезаем лишнее + sub_filter "https://yastatic.net" "$scheme://$host/_empty"; + sub_filter "//www.googletagmanager.com/" "//$host/_empty"; + sub_filter "/js/prebid.min.js" "/_empty"; + sub_filter "https://static.videonow.ru/" "$scheme://$host/_empty"; + sub_filter "https://stats2.videonow.ru/" "$scheme://$host/_empty"; + sub_filter "https://cdn.videonow.ru/" "$scheme://$host/_empty"; + sub_filter "http://imasdk.googleapis.com/" "$scheme://$host/_empty"; + sub_filter "https://s0.2mdn.net/" "$scheme://$host/_empty"; + + sub_filter "" "" "/ tns-counter.ru -->"; + sub_filter "" "" "/Yandex.Metrika counter -->"; + sub_filter "" "" " /Global site tag (gtag.js) - Google Analytics -->"; + sub_filter "" "" "/noindex-->"; + + sub_filter "containerId: '" "containerId: '-"; + sub_filter "/css/ads.css" "/_empty"; + sub_filter "cntimg.src = \"/cnt/\" + cntParseReferer()" "cntimg.src = \"/_empty\""; + + #скроем ненужные элементы + sub_filter "class=\"toplinks\"" "style=\"visibility: hidden;\""; + sub_filter "class=\"header__soc\"" "style=\"visibility: hidden;\""; + sub_filter "class=\"but__enter\"" "style=\"visibility: hidden;\""; + sub_filter "