mt-multiserver-proxy is a reverse proxy designed for linking multiple Minetest servers together

mt-multiserver-proxy

mt-multiserver-proxy is a reverse proxy designed for linking multiple Minetest servers together. It is the successor to multiserver.

mt

This project was made possible by anon55555's mt module.

Installation

Go 1.17 or higher is required. Run

go install github.com/HimbeerserverDE/mt-multiserver-proxy/cmd/mt-multiserver/proxy@latest

to download and compile the project. A mt-multiserver-proxy executable will be created in your $GOBIN directory. The same command is also used to upgrade to the latest version. You will need to recompile all plugins after upgrading.

Usage

Starting

Run $GOBIN/mt-multiserver-proxy. The configuration file and other required files are created automatically in the directory the executable (or symlink to said executable) is in, so make sure to move the executable to the desired location or use a symlink.

Stopping

mt-multiserver-proxy reacts to SIGINT, SIGTERM and SIGHUP. It stops listening for new connections, kicks all clients, disconnects from all servers and exits. If some clients aren't responding, mt-multiserver-proxy waits until they have timed out.

Configuration

The configuration file name and format are described in doc/config.md All internal servers need to allow empty passwords and must not be reachable from the internet!

Chat commands

The default chat commands can be installed as a plugin.

Telnet interface

Chat commands can also be executed over a telnet connection. See telnet.md for details.

Comments
  • 5.5.0 fix & chatcommands in own thread

    5.5.0 fix & chatcommands in own thread

    Fixed compatability with 5.5.0 by updating process.go: moved packed forwarding code into local func forward(pkt mt.Pkt) changed versionString from "5.5.0-dev-83a7b48bb" to "5.4.1-dev-b2596eda3" to reflect actual version

  • plugin_map

    plugin_map

    This adds ability...

    • to register on a ToCltBlkData Packet using RegisterBlkDataHandler
    • to tell server to remember nodeid based on nodename using RegisterNeedNode
      • to get registerd all ids using GetNodeId
  • Example config.json File

    Example config.json File

    Is it possible to add examples to the config.jason? I don't know how to add my Servers to the Proxy. I think an example would help People to Setup their MT Network.

  • Don't export LoadPlugins

    Don't export LoadPlugins

    It could as well be called from an init function (or be an init function). Importing packages don't need access to this since reloading plugins is not supported.

  • Not all reset packets are always needed when switching servers

    Not all reset packets are always needed when switching servers

    It makes sense to keep track of some packets like OverrideDayNightRatio to minimize network usage. There should be a configuration setting that enables this for things that have to be reset almost always (e.g. FormspecPrepend) so that the user can choose between RAM and network usage.

  • Plugin node -> edge

    Plugin node -> edge

    This aims to overwrite node interaction for specific nodes, specified by Itemstring.

    This is done by...

    • implementing a BlkData Handler to handle ToCltBlkData packets using RegisterBlkDataHandler
    • implementing a itemstring -> nodeid / param0 cache for specific nodes (RegisterCacheNode)
    • and then by handling interact packages and checking if the node interacted with is registered by some NodeHandler.

    Some other functions that are a thing:

    • GetMapCache which returns a copy of the map cache (map[[3]int16][4096]mt.Content)
    • IsCached which returns true, if a node is cached
    • RegisterCachedNode which tells the ms to save when the specified itemstring is defined
    • GetNodeId which returns all nodeid's corresponding to a cached itemstring (map[mt.Content]bool)
  • fix variable naming and client compatability issues

    fix variable naming and client compatability issues

    This fixes the "Invalid serialisationVer" and "Invalid protoVer" problems with most minetest clients. This also removes the "latest" from latestSerialisationVer and latestProtoVer, to minimize misunderstanding of these values.

  • Plugin ao

    Plugin ao

    plugin_AO adds:

    • the ability to register on AOMsgs / AOAdds / AORms & overwrite them (RegisterAOHandler)
    • functions to reserve global / server / client AOIDs (GetGlobalAOID, GetServerAOID, ClientConn.GetFreeAOID)

    Example Usecases:

    • Custom AOs registered just on multi-server
  • Plugin node

    Plugin node

    Pluginapi to overwrite node interactions Use cases: obvious

    Please keep in mind that this is not finished yet, I just want to have it as a PR to discuss

  • Fallback logic is broken

    Fallback logic is broken

    The loop currently tries to connect to all fallback servers until it encounters an error or reaches the end of the list. Even if no attempts were successful the kick packet is not forwarded to the client (the code below the fallback code is responsible for that, but the function returns before it gets to run). Also errors returned by Hop are not necessarily critical. Even if the proxy just failed to save the last server in the auth db it returns an error although the connection is completely fine. Thus the player should be warned, but that's it. #91 is yet another issue with the fallback implementation.

    The error message in chatcommands should probably be edited too.

    @DerZombiiie

  • 5.5.0 changes

    5.5.0 changes

    Things to do when 5.5.0 is released and supported by mt:

    • [ ] Bump protocol version to 40
    • [ ] Bump serialization version to 29
    • [ ] Bump formspec version to 5
Tcp-proxy - A dead simple reverse proxy server.

tcp-proxy A proxy that forwords from a host to another. Building go build -ldflags="-X 'main.Version=$(git describe --tags $(git rev-list --tags --max

Jan 2, 2022
Reverse Proxying + Static File Serving + Let's Encrypt + multiple hosts

Slashing This is a HTTPS server, which aims to replace my personal nginx usages. Currently, it serves Reverse Proxying (e.g. to a Python-Flask,Java,PH

Jul 29, 2021
httpx is a fast and multi-purpose HTTP toolkit allows to run multiple probers using retryablehttp library, it is designed to maintain the result reliability with increased threads.
httpx is a fast and multi-purpose HTTP toolkit allows to run multiple probers using retryablehttp library, it is designed to maintain the result reliability with increased threads.

Features • Installation • Usage • Running httpx • Notes • Join Discord httpx is a fast and multi-purpose HTTP toolkit allow to run multiple probers us

Jan 8, 2023
A yaml data-driven testing format together with golang testing library

Specified Yaml data-driven testing Specified is a yaml data format for data-driven testing. This enforces separation between feature being tested the

Jan 9, 2022
Hetzner-dns-updater - A simple tool to update a DNS record via Hetzner DNS API. Used for simple HA together with Nomad

hetzner-dns-updater A small utility tool to update a single record via Hetzner D

Feb 12, 2022
Reverse cwmp proxy
Reverse cwmp proxy

cwmp-proxy Integration of the proxy will provide you the ability to place CPEs and ACS servers in different networks. What about if the devices are pl

Nov 15, 2022
Open Source HTTP Reverse Proxy Cache and Time Series Dashboard Accelerator
Open Source HTTP Reverse Proxy Cache and Time Series Dashboard Accelerator

Trickster is an HTTP reverse proxy/cache for http applications and a dashboard query accelerator for time series databases. Learn more below, and chec

Jan 2, 2023
A fast reverse proxy to help you expose a local server behind a NAT or firewall to the internet.
A fast reverse proxy to help you expose a local server behind a NAT or firewall to the internet.

frp README | 中文文档 What is frp? frp is a fast reverse proxy to help you expose a local server behind a NAT or firewall to the Internet. As of now, it s

Jan 5, 2023
An Advanced HTTP Reverse Proxy with Dynamic Sharding Strategies
An Advanced HTTP Reverse Proxy with Dynamic Sharding Strategies

Weaver - A modern HTTP Proxy with Advanced features Description Features Installation Architecture Configuration Contributing License Description Weav

Dec 24, 2022
Dead simple reverse proxy for all your containerized needss
Dead simple reverse proxy for all your containerized needss

Whats this ? Pawxi is yet another reverse proxy designed with simplicity in mind. Born out of a certain users frustration at the complexity of setting

Oct 17, 2022
An Advanced HTTP Reverse Proxy with Dynamic Sharding Strategies
An Advanced HTTP Reverse Proxy with Dynamic Sharding Strategies

Weaver - A modern HTTP Proxy with Advanced features Description Features Installation Architecture Configuration Contributing License Description Weav

Jan 1, 2023
Simple edge server / reverse proxy

reproxy Reproxy is simple edge HTTP(s) sever / reverse proxy supporting various providers (docker, static, file). One or more providers supply informa

Dec 29, 2022
gobetween - modern & minimalistic load balancer and reverse-proxy for the ☁️ Cloud era.
gobetween - modern & minimalistic load balancer and reverse-proxy for the ☁️ Cloud era.

gobetween - modern & minimalistic load balancer and reverse-proxy for the ☁️ Cloud era. Current status: Maintenance mode, accepting PRs. Currently in

Dec 25, 2022
Reverse Proxy for geth node
Reverse Proxy for geth node

geth-proxy Reverse Proxy for geth node gcr.io/moonrhythm-containers/geth-proxy Features Health check base on last synced block timestamp Merge websock

Jul 26, 2022
4chain is a simple、fast reverse proxy to help you expose a local server behind a NAT or firewall to the Internet.

4Chain What is 4chain? 4chain is a simple、fast reverse proxy to help you expose a local server behind a NAT or firewall to the Internet. Using the ssh

Nov 1, 2022
TProx is a fast reverse proxy path traversal detector and directory bruteforcer.
TProx is a fast reverse proxy path traversal detector and directory bruteforcer.

TProx is a fast reverse proxy path traversal detector and directory bruteforcer Install • Usage • Examples • Join Discord Install Options From Source

Nov 9, 2022
Example of how to write reverse proxy in Go that runs on Cloud Run with Tailscale

Cloudrun Tailscale Reverse Proxy Setup Create a ephemeral key in Tailscale Set TAILSCALE_AUTHKEY in your Cloud Run environment variables Set TARGET_UR

Dec 18, 2022
A reverse proxy implementing IRC-over-WebSockets

webircproxy webircproxy is a reverse proxy that accepts IRCv3-over-WebSocket connections, then forwards them to a conventional ircd that speaks the no

Dec 22, 2021
Simple Reverse Proxy Load Balancer

lb - a reverse proxy load-balancing server, It implements the Weighted Round Robin Balancing algorithm

Mar 23, 2022