ViaVersion as a Service - standalone ViaVersion proxy
Go to file
2021-07-28 11:49:54 -03:00
.github separate dependencyUpdates, experimental netty io_uring 2021-07-25 15:26:46 -03:00
.well-known Create microsoft-identity-association.json 2021-01-31 13:19:47 -03:00
gradle/wrapper update gradle 2021-07-04 07:59:20 -03:00
src/main 20MB debug log, design changes 2021-07-27 21:42:26 -03:00
.gitignore fix gitignore 2021-02-10 10:43:41 -03:00
apache_copypasta.txt ProxyPreserveHost 2021-04-29 14:14:36 -03:00
build.gradle.kts separate dependencyUpdates, experimental netty io_uring 2021-07-25 15:26:46 -03:00
gradlew update velocity-native 2021-06-26 11:32:28 -03:00
gradlew.bat update gradle, use fetch 2021-01-19 14:36:45 -03:00
index.html cleanup, clean PacketRegistry 2021-05-04 17:15:06 -03:00
jitpack.yml install sdkman before using it 2021-06-12 07:34:15 -03:00
LICENSE AGPL 2021-03-24 08:02:38 -03:00
README.md try to cleanup readme 2021-07-21 21:43:12 -03:00
systemd-copypasta.txt Fix io_uring in systemd 2021-07-28 11:49:54 -03:00

VIAaaS

VIAaaS - ViaVersion as a Service - Standalone ViaVersion proxy

VIAaaS Logo (VIA logo with structural formula of aspirin)

Public instances: https://github.com/ViaVersion/VIAaaS/wiki/List-of-Public-Instances

Discord: https://viaversion.com/discord

Supported versions: https://viaversion.com/

Demo

Online mode: https://youtu.be/9MKKjuoe66k

Using with GeyserConnect: https://youtu.be/_LItAIIFmsI

Using with GeyserConnect on offline mode: https://youtu.be/-hZESD61nSU

Offline mode tutorial: https://youtu.be/lPdELnrxmp0

How does it work?

  • ViaVersion, ViaBackwards and ViaRewind translates the connections to backend server.
  • VIAaaS auth page stores account credentials in the player's browser local storage. Check for XSS vulnerabilities on your domain.
  • It requires a CORS Proxy for calling Mojang APIs, which may make Mojang see that as suspicious and block your account password if the IP address seems suspect.
  • Account credentials aren't sent to VIAaaS instance, though it's intermediated by CORS Proxy.
  • The web page receives and validates a the session hash from VIAaaS instance.

Setting up server instance

Download: GitHub Actions (needs to be logged into GitHub) or JitPack

How to download and start VIAaaS server:

curl -Lf --output VIAaaS-all.jar "https://jitpack.io/com/github/ViaVersion/VIAaaS/master-SNAPSHOT/VIAaaS-master-SNAPSHOT-all.jar"
java -jar VIAaaS-all.jar
  • Requires Java 11
  • Default Minecraft: via.localhost with port 25565
  • Default HTTPS: https://localhost:25543/
  • Default WS URL: wss://localhost:25543/ws

How to create a public server

  • You need a domain wildcarding to VIAaaS instance, like *.example.com -> 192.168.123.123. You can use DuckDNS DDNS service.
  • Configure the hostname in the config
  • Open the Minecraft port (25565)
  • The HTTPS page needs a certificate, you can use Apache (with a Let's Encrypt certificate) as a reverse proxy. See apache_copypasta.txt file.

CORS Proxy

  • For less chance of Mojang seeing the login as suspect, you (the player) should set up a CORS proxy on your machine.
  • Note the ending slash in cors-anywhere address
  • You can also try my public instance at https://crp123-cors.herokuapp.com/ (source)

Setting up cors-anywhere on local machine:

git clone https://github.com/Rob--W/cors-anywhere
cd cors-anywhere
npm install
node server.js
  • It will be available at http://localhost:8080/

Usage for players

Offline mode:

  • Connect to mc.example.net.via.localhost

Online mode:

  • You can use the same username for front-end and back-end connection. It's also possible to use an offline mode connection on front-end (use _of).
  • Go to VIAaaS auth webpage (default is https://localhost:25543/)
  • Listen to the username A (you'll use it to connect to the VIAaaS instance).
  • Add the account B (you'll use it in backend server).
  • Keep the page open
  • Connect with your account A to mc.example.com._u(account B).via.localhost (_u can be removed if username is the same)
  • Approve the login in the webpage

Address options

Example address:

  • server.example.net._p25565._v1_12_2._of._uBACKUSERNAME.via.example.com
  • server.example.net.v_1_8.via.example.com
  • It's inspired by Tor2web proxies.

Address parts:

  • You can use (option)_(value) too, like p_25565.
  • server.example.net: backend server address
  • _p: backend port
  • _v: backend version (protocol id or name, replace . with _). AUTO is default (1.8 fallback).
  • _o: t to force online mode in frontend, f to force offline mode in frontend. If not set, it will be based on backend online mode.
  • _u: username to use in backend connection
  • via.example.com: instance address (defined in config)

WARNING

  • VIAaaS may trigger anti-cheats, due to block, item, movement and other differences between versions. USE AT OWN RISK.
  • Take care of browser local storage. Check for XSS vulnerabilities on your domain.
  • Check the security of CORS proxy, it will intermediate Mojang API calls.
  • Mojang may lock your account when API is called from a suspect IP address.

FAQ

Accounts

My Microsoft account <18 years old is not able to log in, it's giving XSTS error:

Why a online webpage for online mode?:

  • It's easier to maintain in that way, because providing login via chat requires encoding and decoding more packets, which reduces maintanability.
  • It allows your account password and token to be kept with you.

How to use Microsoft Account?:

Connection

How to use IPv6?:

  • When listening to 0.0.0.0, it should listen on IPv6 too.
  • The hostname parser currently doesn't support direct IPv6, but you can use a DNS name with https://sslip.io/

I'm getting a DNS error/"Unknown host" while connecting to (...).localhost

  • Try configuring via.localho.st as hostname suffix

How to use with Geyser?

  • Set the parameters in Geyser's address field:
    remote:
      # The IP address of the remote (Java Edition) server
      address: 2b2t.org._v1_12_2.via.localhost
    
  • If you are using a public GeyserConnect instance: connect to a publicly available VIAaaS instance, like mc.example.com._v1_8.via.example.net as a Java Edition server.

Can I use it to connect to .onion Minecraft hidden servers?

  • You can use .onion addresses if the instance is proxying the backend connections to TOR. Note that VIAaaS may log your requests, and that your DNS queries may be unencrypted.

Can you support more versions / Is there some alternative?