Programm UniversalProxy - BungeeCord-Verbindung zu Onlinemode-Servern

Dieses Thema im Forum "Selbstgeschriebene Plugins | Mods | Programme" wurde erstellt von games6471, 16. Mai 2016.

  1. games6471
    Offline

    games6471

    Projektbeschreibung

    Wer sich wundert warum man bei einem BungeeCord/Waterfall-Proxyserver die Spigot/...-Server auf Offlinemode stellen muss, das liegt an zwei Dingen. Erstens wird die Verbindung vom Server und Client verschlüsselt und zweitens wird bei jedem Server betreten eine Anfrage an die Server von Mojang gemacht und sicherzustellen, dass es sich dabei um den richtigen Besitzer des Minecraft-Accounts handelt.

    Bei einem BungeeCord-Server übernimmt diesen Vorgang nur BungeeCord anstatt der Ziel-Server.

    Was passiert wenn wir die Authentifizierung zum Proxy verschieben? Wenn der Proxy die Account-Daten kennt, so kann sich der Proxy auch als Client ausgeben und eine Onlinemode-Verbindung zum Ziel-Server aufbauen. So findet eine Authentifizierung nicht nur zwischen dem Client und dem Proxy-Server ab, sondern auch zwischen dem Proxy und dem Ziel-Server.

    Bezüglich den Account-Daten sollten man sich noch den Abschnitt Limits->Authentifizierung anschauen.

    Features


    1) Basierend auf Waterfall und BungeeCord. Somit sind auch die gleichen Features und Optimierungen enthalten.
    2) Use cases
    2.1) Verbindungen zu Online Mode Servern. Somit kann man durch diesen Proxy Verbindungen zu allen Server, die es gibt, aufbauen.
    2.2) Cracked-Accounts die Möglichkeit geben mit einem gekauften Account einem Onlinemode-Server zu joinen ohne diesem Spieler die Accountdaten zu geben. (z.B. unter Freunden) -> ähnlich Food-Sharing
    2.3) Einen globaler Server erstellen (z.B. Multi-server chats)

    How to setup
    1. Projekt kompilieren (Maven): "mvn clean install"
    2. BungeeCord/Waterfall Version aus /PROJEKT/bootstrap in ein neues Verzeichnis kopieren
    3. Proxy einmal starten "java -jar [...] waterfall.jar"
    4. Modifizierte Module aus /PROJEKT/module/NAME/target/NAME.jar in das /modules/ Verzeichnisses des Proxy-Servers kopieren
      Dabei ist "NAME" mit cmd-auth und cmd-server zu ersetzen.
    5. Nun den Proxy-Server neustarten, damit die Module geladen werden.
    6. Jetzt kann man es im Spiel testen
      1. Authentifizierung mit /auth clientToken accessToken email
        Beispiel: /auth 12345678-1234-1234-1234-123456789012 123456789adffghghwttzwtzw example@example.com
      2. Danach kann man den server joinen mit /server IP/Domain
        Beispiel: /server play.example.minecraft
    Die relevanten Informationen für den /auth-Befehl findet man in der "launcher_profiles.json"-Datei, welche sich im .minecraft-Verzeichnis befindet.

    Testserver


    5.230.156.186:25565

    Nun kann mit Schritt 6 von How to Setup weitermachen.

    Source Code

    https://github.com/games647/UniversalProxy
    Gefällt euch das Projekt? Dann lasst doch einen Stern auf Github da.

    Alle Änderungen können hier eingesehen werden: https://github.com/games647/UniversalProxy/compare/waterfall...master

    Gerne könnte ihr das Projekt auch forken und etwas eigenes daraus basteln.

    Limits

    IP-Bans

    Bei Verwendung dieses Projekts bauen wir eine Verbindung über einen Proxy zu einem Server auf. Dadurch sieht der Ziel-Server nur die Proxy-IP. Bei Spigot sowie anderen Minecraft-Server kann man ipForwarding aktivieren, das die ursprüngliche IP für Plugins sichtbar macht. Wenn diese Option nicht aktiviert ist oder es einen weiteren BungeeCord/Waterfall-Server dazwischen gibt, so sieht der Server nur die Proxy-IP und legt bei einem IP-Ban alle Verbindungen von diesem Proxy zu dem Server lahm.

    Authentifizierung

    Account-Daten? MEINE ACCOUNT-DATEN an einem Server geben, geht es dir noch gut? Natürlich ist so etwas ein komplettes K.O.-Kriterium.
    Wahrscheinlich werde ich auch deshalb dieses Projekt auch nicht weiterverfolgen, sondern es nur als
    Proof of Concept stehen lassen. Auch wenn die Authentifizierung mit der Email-Adresse und Passwort möglich ist, sollte man sich aus ersichtlichen Gründen dagegen entscheiden, das Passwort abzufragen.

    Man sollte aber nicht vergessen, dass es noch eine weitere Möglichkeit. Seit der Minecraft 1.6 speichert der Minecraft-Launcher nicht mehr das Passwort (lastlogin-Datei), sondern verwendet AccessTokens. Bei dem ersten Login wird zwar das Passwort abgefragt, aber danach bekommt der Launcher von Mojang einen AccessToken. Danach wird das Passwort nicht mehr benötigt. Dieser AccessToken ist an ein Client-Token (eine eindeutige ID des Clients) verknüpft, um somit man auch noch mehreren Rechner diese Funktion nutzen kann.

    Aus dem AccessToken kann man nicht das Passwort ableiten. Somit könnte man dies für die Authentifizierung beim Proxy nutzen.

    Immer wenn ich den Befehl auf dem Proxy nutze, musse ich mich im Launcher wieder neu einloggen. Hast du meinen Account geklaut?

    Absolut nicht. Bei einem Login-Vorgang mit dem gleichen Client-Token und dem gleichen AccessToken wird ein neuer AccessToken generiert und der alte als ungültig erklärt. Das könnt ihr auch selber nachprüfen. Einfach die "launcher_profiles.json"-Datei öffnen und danach der Launcher starten und sich einloggen. Achtet man auf den Wert vom AccessToken, dann erkennt man, dass sich dieser verändert hat.

    Eine Möglichkeit dieses Problem zu umgehen, wäre es einen neuen Client-Token und den dazugehörigen AccessToken zu generieren. Diese Werte an den Proxy geben und auf dem eigenen Rechner zurück auf die alten Werte zu wechseln. Dann gibt sich der Server nur als weitere Rechner (andere Client-ID) aus.

    Weitere Informationen: http://wiki.vg/Authentication
     
    #1
    jensIO gefällt das.
  2. Granatapfel
    Offline

    Granatapfel

    Registriert seit:
    29. August 2012
    Beiträge:
    101
    Ort:
    Deutschland
    Minecraft:
    Der_Granatapfel
    Nicht schlecht, schau ich mir mal an^^
     
    #2