Как построить свой Даркнет

Как создать свой Даркнет

Вспомним, Даркнет — частная сеть, соединения которой устанавливаются только между доверенными пирами, с использованием нестандартных протоколов и портов.
Эта статья покажет вам, как создать свой собственный Даркнет с помощью i2pd. Начиная с версии 2.10.0 можно поднять полностью независимую от основной, сеть I2P.

Сеть I2P и терминология

I2P использует специальные виртуальные адреса, называемые пункты назначения, вместо IP-адресов. Поэтому нельзя отследить то, какой реальный IP-адрес принадлежит данному адресату.
Кроме того, сеть I2P использует специализированную распределенную базу данных под названием netDb (сетевая база данных) для маршрутизации. Постоянные клиенты просто хранят свои netDb локально, но есть специальный режим, называемый floodfill (заливка), чтобы распространить базу другим клиентам.
Для того, чтобы присоединиться к I2P сети клиент должен получить некоторые начальные адреса. Этот процесс называется reseeding (посев). Reseed-сервер это публичный https сервер, содержащий подписанный архив netDb. На самом деле адреса можно добавлять вручную.
Итак, что нужно сделать , чтобы создать полностью функционирующий I2P Даркнет:

  • запустить некоторые клиенты I2P в режиме floodfill
  • создать публичный Reseed-сервер, который поможет новым клиентам для начальной загрузки в сети I2P
  • создать клиентский пакет I2P для новых пользователей

 

Инструменты

Для демонстрации подойдет машина с Ubuntu 16.04 и система виртуализации LXC. Но, данное руководство подойдет и для других операционных систем. В качестве клиента будет использоваться i2pd, а в качестве Reseed-сервера — pyseeder.

Подготовка системы

# Установить LXC
sudo apt-get install lxc bridge-utils build-essential git

# Установить Python и криптографические зависимости для pyseeder
sudo apt-get install python3 python3-pip python3-virtualenv \
libssl-dev libffi-dev python-dev

# Подготовить рабочую директорию для тестовой сети
export WDIR=$HOME/lxc-testnet
mkdir $WDIR

# Загрузить набор скриптов для работы с LXC
git clone https://github.com/l-n-s/i2pd-testnet-framework.git $WDIR

# (Опционально). Отключить AppArmor
sudo systemctl stop apparmor && sudo systemctl disable apparmor

 

Собрать статический i2pd

Запустить build_static_i2pd.sh в рабочей директории.

cd $WDIR && ./build_static_i2pd.sh

Бинарник будет включать в себя все зависимости, поэтому его можно скопировать на другие машины (с такой же архитектурой) и он будет работать.

 

Reseed-сервер

# Установить pyseeder и зависимости
cd $WDIR
git clone https://github.com/PurpleI2P/pyseeder.git
cd $WDIR/pyseeder virtualenv --python=python3 venv
. venv/bin/activate
pip3 install -r requirements.txt
deactivate

Открыть новую оболочку и активировать виртуальную среду

cd $WDIR/pyseeder
. venv/bin/activate

Создать новую пару ключей для Reseed-сервера. Установить «dadadada» в качестве пароля:

./pyseeder.py keygen --signer-id mark@mail.i2p

Создадуться файлы data/mark_at_mail.i2p.crt и data/priv_key.pem. Это публичный сертификат и приватный ключ для создания .su3 файлов и запуска https сервера.
По умолчанию Ubuntu дает сетевому интерфейсу lxcbr0 IP-адрес 10.0.3.1. Таким образом адрес Reseed-сервера будет:

export RESEED_URL="https://10.0.3.1:8443/"

 

Создание дистрибутива

Для демонстрационных целей нужно создать дистрибутив для Linux.

# Создать директорию и копировать туда статический бинарник
mkdir -p $WDIR/dist
cp $BUILD_DIR/src/i2pd/i2pd $WDIR/dist
# Копировать сертификат Reseed-сервера
mkdir -p $WDIR/dist/certificates/reseed
cp $WDIR/pyseeder/data/mark_at_mail.i2p.crt $WDIR/dist/certificates/reseed

Теперь нужно распространить директорию с файлом конфигурации i2pd.conf для вашей сети. Команда ./testnetctl re-install генерирует i2pd.conf и запускает/останавливает скрипты из папки  templates/.

Проверьте конфигурационный файл docs/i2pd.conf в хранилище i2pd, если вы хотите создать сеть с реальными компьютерами.

 

Последние приготовления

Создать 12 виртуальных компьютеров с помощью LXC и скопировать i2pd туда:

# Создать 12 LXC контейнеров (5 из них будут флудфиллами)
sudo ./testnetctl prepare 12
# Установите i2pd в контейнеры Lxc
sudo ./testnetctl re-install

Теперь настало время запуска флудфилл-узлов для того чтобы собрать файлы router.info.
Вы можете вручную скопировать router.info файлы из вашей машины, но убедитесь, что вы назвали их, как something-random.dat, потому что pyseeder ищет файлы .dat.

# Сбор Reseed данных
sudo ./testnetctl collect_reseed_data

Почти готово! Создайте файл Reseed (i2pseeds.su3) из папки netDb. Перейдите к pyseeder оболочке и выполните команду:

echo "dadadada" | ./pyseeder.py reseed --signer-id mark@mail.i2p --netdb $WDIR/netDb

Запустите HTTPS reseed-сервер (сценарий будет запрашивать пароль, он по-прежнему «dadadada»):

./pyseeder.py serve --host 0.0.0.0 --cert data/mark_at_mail.i2p.crt

 

МОТОР!

Запустить I2P:

sudo ./testnetctl run

Обратите внимание на pyseeder оболочку, так как клиенты начнут скачивать файл .su3. После этого узлы начнут находить друг друга.
Открыть новую оболочку для запуска скрипта мониторинга:

cd $WDIR/monitoring
./scanner.sh iplist.txt
watch -n1 ./i2pd_monitor.sh iplist.txt

Этот простой скрипт будет отображать статистику в реальном времени всех узлов в сети.
Если задача состоит в том, чтобы переустановить папку i2pd для всех контейнеров:

sudo ./testnetctl re-install

Остановка сети:

sudo ./testnetctl stop

Для очистки хост-системы после экспериментов (удалить все контейнеры):

sudo ./testnetctl clean

 

Что дальше?

Попытайтесь проанализировать сетевой трафик между узлами, и вы увидите, что все зашифровано. Поэтому невозможно знать наверняка какой тип трафика идет между узлами.
Посмотрите на спецификации для получения более подробной информации о том, как работает протокол. Используйте документы i2pd для получения дополнительной информации о настройке сайтов с i2pd.