Skip to main content

Decentralized P2P network with onion routing, DHT and VPN tunnel

Project description

MurNet

License: MIT Python 3.11+ Status: Experimental

MurNet — экспериментальная децентрализованная P2P-сеть с onion-маршрутизацией, DHT и VPN-туннелем.

Узлы связываются напрямую, без центральных серверов. Трафик проходит через многослойное шифрование (X25519 + AES-256-GCM). Архитектура построена по принципу security by design.

⚠️ Учебный прототип. Не прошёл криптографический аудит. Не использовать для трафика, требующего реальной анонимности.


Возможности

Компонент Описание
Onion routing 3-хоп circuit, X25519 ECDH + AES-256-GCM
Relay discovery Gossip-анонсы — relay-ноды находят друг друга автоматически
DHT Kademlia с HMAC-аутентификацией
VPN / SOCKS5 Туннель TCP-трафика через onion-цепочку
Identity Ed25519 ключи, Base58 адреса, NodeID на Blake2b
REST API FastAPI для управления узлом
TUI Chat Textual-интерфейс для anonymous-чата в терминале

Установка

pip install murnet                    # из PyPI (стабильная)
pip install -e .                      # из исходников (dev)
pip install -e ".[tui,dev]"           # с extras

Дополнительные extras:

Extra Назначение
tui Textual TUI для murnet-node chat-режима
browser PyQt6 для onion-браузера
build PyInstaller для сборки EXE
dev pytest, pytest-asyncio, pytest-cov

Python 3.11+ обязателен.


Быстрый старт

После установки доступны команды:

Команда Что делает
murnet CLI полного узла
murnet-node Relay-нода или chat-участник
murnet-vpn VPN/SOCKS5 клиент
murnet-desktop Desktop GUI

Onion-чат (5 терминалов, localhost)

# 3 relay-ноды, каждая анонсирует себя в gossip
murnet-node --bind 127.0.0.1:9001 --name Guard  --announce
murnet-node --bind 127.0.0.1:9002 --name Middle --announce
murnet-node --bind 127.0.0.1:9003 --name Exit   --announce

# Bob — строит circuit Exit → Middle → Alice
murnet-node --bind 127.0.0.1:9004 --name Bob \
    --peer Exit=127.0.0.1:9003 --peer Middle=127.0.0.1:9002 \
    --peer Alice=127.0.0.1:9000 --circuit Exit,Middle,Alice

# Alice — auto-discovery, знает только Guard
murnet-node --bind 127.0.0.1:9000 --name Alice \
    --peer Guard=127.0.0.1:9001 --circuit auto

VPN / SOCKS5

murnet-vpn --mode local
# SOCKS5 прокси на 127.0.0.1:1080
curl --socks5 127.0.0.1:1080 http://example.com

Полный узел

murnet --port 8888 --data-dir ./murnet-data

Программный API

from murnet import MurnetNode, Identity, MurnetConfig

# Идентификация узла (Ed25519)
identity = Identity.generate()
print(identity.node_id)        # Blake2b NodeID
print(identity.address)        # Base58 адрес

# Запуск узла
config = MurnetConfig(port=8888, data_dir="./data")
node = MurnetNode(identity, config)
await node.start()

Onion-цепочки:

from murnet.core.onion.circuit import CircuitManager
from murnet.core.onion.router import OnionRouter

router = OnionRouter(identity)
circuit = await router.build_circuit(["Guard", "Middle", "Exit"])
await router.send(circuit.id, b"hello onion")

Структура проекта

murnet/                      ← Python-пакет
├── __init__.py              реэкспорты публичного API
├── cli.py                   точка входа `murnet`
├── desktop_app.py           точка входа `murnet-desktop`
├── murnet_vpn.py            VPN runtime
├── network_viz.py           визуализатор сети
├── build_exe.py             PyInstaller сборка
├── core/
│   ├── identity/            Ed25519, X25519, NodeID, keystore
│   ├── net/                 UDP transport, Kademlia DHT, link-state routing
│   ├── onion/               onion routing: cell, circuit, router, transport
│   ├── node/                AsyncMurnetNode, pubsub
│   ├── data/                content-addressed storage, SQLite
│   ├── vpn/                 TunnelManager, SOCKS5 server
│   └── config.py
├── api/                     FastAPI server, JWT auth, Pydantic-модели
├── demos/                   onion_node.py, onion_chat.py, vpn_client.py
├── mobile/                  battery, network, sync — оптимизации для мобильных
└── vds/                     Docker/systemd генераторы для VDS-деплоя

docs/                        Документация
tests/                       pytest: unit/, integration/, security/, performance/
scripts/                     CLI-скрипты (генерация конфига, миграция, статус)
configs/                     Шаблоны конфигов VPN

Тесты

pip install -e ".[dev]"

pytest tests/unit/ -q                       # 460+ unit-тестов
pytest tests/integration/ -v --timeout=60   # e2e onion circuit
pytest tests/security/ -v                   # security-проверки
pytest --cov=murnet --cov-report=term-missing

Архитектура (коротко)

Alice  →  Guard  →  Middle  →  Bob
         видит        видит        видит
         Alice        Guard        Middle
         Guard        Middle       (расшифрованные данные)

Каждый хоп получает независимый сессионный ключ через X25519 ECDH + HKDF-SHA256. Компрометация одного хопа не раскрывает остальные.

Подробности: docs/ONION.md, docs/ARCHITECTURE.md, docs/PROTOCOL.md.


NAT и где живут узлы

Сценарий Что нужно
VDS с публичным IP Открыть TCP-порт через firewall — узел работает как relay
Домашний компьютер за роутером Сейчас — только client-режим (инициирует, не принимает). UPnP/STUN — в roadmap
CGNAT / симметричный NAT Только client. Hole-punching через rendezvous-relay — в roadmap

Обратные ответы идут по тому же TCP-соединению, что инициировал клиент, — relay никогда не открывает обратное соединение, поэтому клиент за NAT может пользоваться сетью, но не быть relay'ем. Подробнее: docs/ONION.md.


VDS деплой relay-нод

# Деплой Guard/Middle/Exit через SCP + systemd
./scripts/vds.sh deploy

# Статус (curl на API каждой ноды)
./scripts/vds.sh status

# Логи
./scripts/vds.sh logs Guard

Подробности: docs/VDS.md.


Документация

Файл Содержание
docs/ARCHITECTURE.md Архитектура узла, слои, потоки данных
docs/ONION.md Onion routing: протокол, циклы CREATE/EXTEND, NAT, gossip
docs/PROTOCOL.md UDP wire-протокол, форматы сообщений
docs/API.md REST API, JWT-аутентификация, эндпоинты
docs/VDS.md Деплой на VDS, systemd, Docker, мониторинг
docs/DEVELOPMENT.md Сборка, тесты, contributing
docs/MOBILE.md Мобильные оптимизации (battery, network, sync)

Безопасность

Это учебный проект:

  • Криптографический аудит не проводился
  • Анонимность гарантирована только при наличии многих независимых relay-нод
  • В текущей конфигурации (3 узла на одном VDS) — анонимности фактически нет, маршрутизация декоративная
  • TLS-обёртка отключена из-за DPI — узлы используют голый X25519+PSK

Не использовать для угроз жизни, медицинских данных, юридически чувствительной переписки. Для этого есть Tor, I2P, Briar.


Лицензия

MIT — см. LICENSE.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

murnet-6.2.0.tar.gz (197.2 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

murnet-6.2.0-py3-none-any.whl (225.7 kB view details)

Uploaded Python 3

File details

Details for the file murnet-6.2.0.tar.gz.

File metadata

  • Download URL: murnet-6.2.0.tar.gz
  • Upload date:
  • Size: 197.2 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.14.4

File hashes

Hashes for murnet-6.2.0.tar.gz
Algorithm Hash digest
SHA256 1c719c28acdd99b30c3a319356f24424fcd055abac299d080aa878526fdc5f8c
MD5 ca62b9b35f55812b60f4506f869a708b
BLAKE2b-256 17cd1e95d56a05f28a34d5d8f113bcbe99773942d49a3c344b18a37cf1a98a20

See more details on using hashes here.

File details

Details for the file murnet-6.2.0-py3-none-any.whl.

File metadata

  • Download URL: murnet-6.2.0-py3-none-any.whl
  • Upload date:
  • Size: 225.7 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.14.4

File hashes

Hashes for murnet-6.2.0-py3-none-any.whl
Algorithm Hash digest
SHA256 c3eed3e024b602c30555b05c0251a3790dd450d9f5c405d472ef6d27ffda798a
MD5 3313ff4ecb2fa30d19ae320347cf11bb
BLAKE2b-256 640b5b30645c50698b33da2ab624276dacf51792f8757da52d2bfd4519d99459

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page