Tools

mumpeer

Ein kleines Relay für Mumcords direkte Verbindungen zwischen Nutzern, etwa beim Bildschirm teilen oder für Bilder in voller Größe. Erreichen sich zwei Leute nicht direkt, hinter CGNAT, strengen Firewalls oder in Netzen ohne UDP, oder wollen sie ihre IP-Adresse nicht zeigen, verbinden sich beide mit dem Relay. Es reicht die verschlüsselten Pakete nur weiter, wie ein TURN-Server.

Aktuelle Version: v0.1.0

Neben deinem Mumble-Server

Eine Community betreibt mumpeer neben ihrem Mumble-Server, zusammen mit dem Relay-Bot mumbot peer. Der Bot kündigt das Relay an und vergibt kurzlebige Tokens. Der Mumble-Server bleibt unverändert.

Nur für verifizierte Nutzer

Ein Token gilt nur für genau zwei Zertifikate, einmal pro Seite und standardmäßig 120 Sekunden. Das Relay leitet nirgendwo anders hin und öffnet selbst keine Verbindungen. Ein offener Proxy ist es also nicht.

Ende-zu-Ende verschlüsselt

Was durchs Relay geht, ist eine eigene verschlüsselte Verbindung zwischen den beiden Nutzern, gebunden an ihre Mumble-Zertifikate. Das Relay kann sie weder lesen noch ändern.

Durch fast jede Firewall

QUIC über UDP oder, wo UDP blockiert ist, TLS über TCP. Beides auf Port 443 und mit TLS 1.3.

Ganz optional

Mumcord funktioniert auch ohne Bot und Relay. In Mumcord wählst du: Relay aus, nur wenn direkt nicht klappt, oder immer.

Was der Betreiber sieht

  • Die IP-Adressen beider Nutzer einer Sitzung
  • Welche zwei Zertifikate miteinander sprechen
  • Wie viele Daten wann fließen
  • Nicht die Inhalte: Die sind Ende-zu-Ende verschlüsselt. Mumcord sagt dir das, bevor du ein Relay nutzt
  • Nie protokolliert werden volle IP-Adressen, volle Zertifikat-Hashes, Tokens und Paketinhalte

Starten mit Docker

Ein langes, zufälliges Secret als PEER_API_SECRET in die .env schreiben (etwa aus openssl rand -hex 32). Aus Mumbots Relay-Beispiel mumpeer.example.toml als mumpeer.toml speichern und darin public_host setzen, dazu bot.example.toml als bot.toml. Dann Relay und Bot zusammen starten:

docker-compose.yml
services:
  mumpeer:
    image: ghcr.io/mumcord/mumpeer:0.1.0
    restart: unless-stopped
    environment:
      MUMPEER_API_SECRET: ${PEER_API_SECRET:?set PEER_API_SECRET in .env}
    ports: ["443:443/udp", "443:443/tcp"]
    volumes:
      - ./mumpeer.toml:/config/mumpeer.toml:ro
      - mumpeer-data:/var/lib/mumpeer
  mumbot:
    image: ghcr.io/mumcord/mumbot:0.2.0
    command: ["peer"]
    restart: unless-stopped
    network_mode: "service:mumpeer"
    environment:
      MUMBOT_CONFIG: /config/bot.toml
      MUMBOT_PEER_API_SECRET: ${PEER_API_SECRET:?set PEER_API_SECRET in .env}
    volumes:
      - ./bot.toml:/config/bot.toml:ro
      - mumbot-data:/data
    healthcheck:
      disable: true
volumes:
  mumpeer-data:
  mumbot-data:

Beim ersten Start steht der Fingerabdruck des Relays im Log. Der Bot kündigt ihn Mumcord an, sonst muss nichts geteilt werden. Öffne UDP und TCP auf Port 443, die API bleibt zwischen Relay und Bot. Mumcord nutzt das Relay ab Version 0.5.0.

Mitwirkende

Quellcode Ganze Anleitung im README → Ideen und Fehler →