# Podłączenie zewnętrznego proxy do serwera na RaidVM

Jeśli masz własne proxy (np. Velocity) postawione na zewnętrznym hostingu (np. VPS) i chcesz podłączyć do niego serwer hostowany na RaidVM - ten poradnik jest dla ciebie.

## Dlaczego standardowe Velocity nie zadziała?

Na RaidVM nie dostajesz klasycznego adresu `IP:port` tak jak na większości hostingów. Zamiast tego dostajesz subdomenę w stylu `p40000.raidsv.com`. Pod spodem każdy serwer na RaidVM ma **ten sam adres IP i ten sam port** - ruch jest rozdzielany na podstawie nazwy hosta (virtual hosting). Dzięki temu nasz anti-DDoS działa na pełnych obrotach.

Problem w tym, że gdy Velocity łączy się z serwerem backendowym, wysyła do niego pole `Server Address` w pakiecie [Handshake](https://minecraft.wiki/w/Java_Edition_protocol/Packets#Handshake). Domyślnie Velocity wpisuje tam domenę, z której połączył się gracz - a nie domenę backendowego serwera RaidVM. Przez to serwer na RaidVM nie wie, do którego serwera kierować połączenie, i odrzuca je.

Velocity nie obsługuje podmiany tej domeny z poziomu konfiguracji, więc potrzebne jest inne rozwiązanie.

## Rozwiązanie: Gate jako pośrednik

[Gate](https://gate.minekube.com/) to lekki proxy Minecraft, który obsługuje opcję `modifyVirtualHost`. Dzięki niej Gate podmienia pole `Server Address` w pakiecie Handshake na poprawną domenę serwera RaidVM, zanim przekaże połączenie dalej.

Schemat działania:
```
Gracz -> Twoje Velocity (na VPS) -> Gate (na VPS) -> Serwer na RaidVM
```

### Instalacja Gate

Pobierz najnowszą wersję Gate ze strony [gate.minekube.com](https://gate.minekube.com/) i uruchom go na swoim VPS.

### Konfiguracja Gate

Przykładowy plik konfiguracyjny (`config.yml`):

```yaml
config:
    bind: 0.0.0.0:25575
    forwarding:
        mode: velocity
    lite:
        enabled: true
        routes:
            - backend: p40000.raidsv.com:30571
              host: '*'
              modifyVirtualHost: true
              strategy: random
    servers:
        raidvm: p40000.raidsv.com:30571
    try:
        - raidvm
connect:
    allowOfflineModePlayers: true
    enabled: true
```

Podmień `p40000.raidsv.com` na adres swojego serwera z panelu.

!!!warning Uwaga na port
W polu `backend` i `servers.raidvm` po dwukropku musi być wpisany port **`30571`** - to jest port z rekordu SRV, na którym faktycznie nasłuchuje proxy RaidVM. Czyli np. `p40000.raidsv.com:30571`.
!!!

### Podłączenie Velocity do Gate

W konfiguracji Velocity (`velocity.toml`) dodaj serwer wskazujący na Gate zamiast bezpośrednio na RaidVM:

```
[servers]
raidvm = "127.0.0.1:25575"
```

Jeśli Gate chodzi na tym samym VPS'ie co Velocity to `127.0.0.1` jest poprawne. Jeśli na innym - podaj IP tego VPS'a.

!!!danger Velocity forwarding
Upewnij się, że w konfiguracji Gate masz ustawione `forwarding.mode: velocity` i że w konfiguracji Velocity masz włączony `player-info-forwarding-mode = "modern"`. Inaczej adresy IP graczy nie będą przekazywane poprawnie do serwera.
!!!
