Corestone

Sieć BungeeCord

W sieci za proxy BungeeCord lub Waterfall AdminControl robi to samo co za Velocity: zbanowany gracz nie wejdzie do sieci, a kick albo ban nałożony na jednym serwerze wyrzuca gracza z całej sieci. Obsługiwane: aktualne buildy BungeeCorda (sprawdzone na buildzie 2104, wersja 26.1) i Waterfall (sprawdzony na 1.21 build 615). Inne forki BungeeCorda nie są testowane.

Czego potrzebujesz

  • Aktualnego buildu BungeeCorda albo Waterfalla, na Javie 21 lub nowszej.
  • Bazy MySQL lub MariaDB wspólnej dla proxy i każdego serwera za nim (zobacz Bazę danych).
  • online_mode: true w config.yml BungeeCorda albo pluginu do logowania w sieci bez kont premium (niżej).
  • Dostępu do internetu z proxy przy jego pierwszym starcie z AdminControl (niżej).
  • Portów serwerów zamkniętych dla wszystkiego poza proxy albo BungeeGuard (zobacz „Zabezpieczenie serwerów”).

Instalacja

  1. Wrzuć ten sam AdminControl.jar do folderu plugins/ proxy. Jeden jar działa na Paper, Purpur, Folia, Spigot, Velocity, BungeeCord i Waterfall.

  2. Uruchom proxy raz. BungeeCord czyta listę libraries pluginu i pobiera z Maven Central Adventure (bibliotekę tekstu używaną przez AdminControl) do swojego folderu libraries/. Potem AdminControl tworzy plugins/AdminControl/config.yml i próbuje połączyć się z bazą z tego pliku (localhost, bez hasła): dopóki nie wpiszesz swojej, log mówi Could not open the shared database, a kary nie są sprawdzane na proxy.

  3. W plugins/AdminControl/config.yml na proxy wpisz bazę, której używa każdy serwer. Klucze są takie same jak na Velocity:

    # en albo pl: ekran bana i odpowiedzi /ac na proxy.
    language: en
    # Nazwa tego proxy w logach.
    server-name: proxy
    database:
      type: mysql
      mysql:
        host: db.example.com
        port: 3306
        database: admincontrol
        user: admincontrol
        password: "a-long-random-password"
        pool-size: 4
        use-ssl: true
    
  4. Każdy serwer za proxy ma AdminControl z database.type: mysql i tą samą bazą.

  5. Zrestartuj proxy i wpisz /ac version w jego konsoli: pokaże Database: mysql, ready, gdy proxy łączy się z bazą. Z database.type: sqlite AdminControl nie startuje na proxy i pisze w logu dlaczego.

Proxy nie ma panelu: panel dowolnego serwera pokazuje całą sieć (zobacz Panel sieci).

Brak internetu przy pierwszym starcie

Bez dostępu do Maven Central BungeeCord nie pobierze bibliotek i nie załaduje AdminControl (log pokazuje błąd przy rozwiązywaniu bibliotek net.kyori). Uruchom proxy raz z dostępem do sieci albo skopiuj folder libraries/ z proxy, na którym zadziałało. Bardzo stare buildy BungeeCorda w ogóle nie czytają libraries i nie ładują pluginu: zaktualizuj proxy.

Skopiowany folder libraries/ jest uznawany za zaufany taki, jaki jest. Zanim uruchomisz z nim proxy, sprawdź jego pliki z tymi sumami SHA-256 (to te same pliki co na Maven Central); są w podfolderze net/kyori/:

Plik SHA-256
adventure-api-4.18.0.jar 079f8f6030f320c37159abb5d55d106b1736b44c90e9f7a42886a81183dac3fc
adventure-key-4.18.0.jar 2b32dd1f9987af8dcd0bf5ab8e96fc3deeac03f85d5329b588d98b806230e52d
adventure-text-minimessage-4.18.0.jar 444e7108e2b030d02d12d36439563350ccfcf2cf6a8f50db6057fc76a16d0abf
adventure-text-serializer-plain-4.18.0.jar 15ff9e237d5bf200ecaceb57e83049d23765690bb8ce3a5320aa37d4b5cba3da
adventure-text-serializer-legacy-4.18.0.jar 36e08f218927c47dca1c90306afb31f1f0bbbfc71e3ea58b0fbfe1d7020c6965
adventure-text-serializer-gson-4.18.0.jar ccf68107afe65a5f6f8d822698b002e46e05e10aca6fb5801a7f86a0ed71f93d
adventure-text-serializer-json-4.18.0.jar 645041fca550b3bf1bcb8508b72942cc15ea18377b51ceb96d073edf432eb66f
adventure-text-serializer-bungeecord-4.3.4.jar e1bc376c6dc7a2100016015735ce4ccc534d2b26bf5ab82aac751c5032056c39
examination-api-1.3.0.jar c9237ffecb05428f6eff86216246ac70ce0b47b04c08ea7ca35020fde57f8492
examination-string-1.3.0.jar 7d01fc25a4bb3af0e1662685455f4541fbf4626216ea5846e455c1491e156b8c
option-1.0.0.jar 2bde5a7a2d73fa1166a0f1663a22c3af7d2768ffc4fea331774c3c0f62225d11

Przekazywanie

Bez przekazywania serwery widzą każdego gracza pod adresem proxy: bany IP i „inne konta z tego samego adresu” przestają działać, a AdminControl odmawia banów IP takich graczy, żeby nie zablokować wszystkich.

  • BungeeCord, config.yml: ip_forward: true i online_mode: true. Z online_mode: false każdy może wejść przez proxy z nickiem kogoś z ekipy i dostaje jego konto, łącznie z połączonym kontem panelu; taka sieć potrzebuje pluginu do logowania na proxy.
  • Każdy serwer, spigot.yml: settings.bungeecord: true. W server.properties ustaw online-mode=false (konta sprawdza proxy).

Za load balancerem albo osłoną DDoS, która wysyła protokół PROXY, ustaw proxy_protocol: true dla listenera w config.yml BungeeCorda, a potem pozwól łączyć się z portem proxy tylko osłonie.

Zabezpieczenie serwerów

Przekazywanie BungeeCord nie ma sekretu. Serwer z bungeecord: true wierzy temu, kto się z nim łączy, w sprawie nicku, UUID i adresu gracza. Każdy, kto dostanie się bezpośrednio do portu serwera, może wejść jako dowolny gracz, także ktoś z ekipy, i ominąć każdego bana. Zrób jedno z dwóch:

  • Zamknij port każdego serwera dla wszystkiego poza proxy (reguła zapory albo serwery nasłuchujące tylko na adresie prywatnym).
  • Zainstaluj BungeeGuard na proxy i na każdym serwerze: proxy wysyła wtedy token, który sprawdzają serwery.

Po starcie serwera AdminControl sprawdza, czy działa na nim BungeeGuard (zainstalowany, ale nieuruchomiony liczy się jako brak). Nie sprawdza tokenów BungeeGuard. Serwer w trybie BungeeCord bez działającego BungeeGuard zapisuje w logu ostrzeżenie: This server takes player data from a BungeeCord proxy without BungeeGuard. Jego panel pokazuje Niezabezpieczony forwarding przy serwerze w karcie serwerów sieci albo jako ostrzeżenie na pulpicie, gdy jest jedynym serwerem. Ostrzeżenie zostaje także wtedy, gdy port jest zamknięty zaporą: AdminControl nie widzi reguł zapory. Serwer startuje w każdym przypadku.

Brak oznaczenia nie znaczy, że jest bezpiecznie: swoje przekazywanie zgłaszają tylko serwery z AdminControl (od tej wersji). Samo proxy i serwery bez AdminControl nie pokazują nic.

Co dzieje się gdzie

Tak samo jak za Velocity (zobacz Sieć Velocity): bany i bany IP są sprawdzane, gdy gracz wchodzi do sieci, nowy ban albo kick wyrzuca gracza z sieci, wyciszenia działają na serwerach, ostrzeżenia gracz widzi na serwerze, na którym jest. Jeśli baza nie działa albo sprawdzenie trwa dłużej niż 3 sekundy, proxy decyduje na podstawie banów trzymanych w pamięci (log mówi checked against the in-memory list); tylko gdy ta lista nie została jeszcze odczytana, wpuszcza gracza i zapisuje letting them in.

Komendy na proxy

Te same komendy co na Velocity, wpisywane w konsoli proxy albo przez gracza w dowolnym miejscu sieci:

Komenda Co robi Kto
/ac help Lista komend. admincontrol.command
/ac version Wersja pluginu, licencja, baza i to, jak daleko odczytano dziennik kar. admincontrol.command
/ac ban <player> <reason> Ban na stałe. prawo do kar
/ac tempban <player> <time> <reason> Ban czasowy. prawo do kar
/ac ipban <player> <reason> Ban IP na stałe. prawo do kar
/ac tempipban <player> <time> <reason> Ban IP czasowy. prawo do kar
/ac mute <player> <reason> Wyciszenie na stałe. prawo do kar
/ac tempmute <player> <time> <reason> Wyciszenie czasowe. prawo do kar
/ac warn <player> <reason> Ostrzeżenie. prawo do kar
/ac kick <player> <reason> Wyrzucenie z sieci. prawo do kar
/ac unban <player> [reason] Zdjęcie bana (także bana IP). prawo do kar
/ac unmute <player> [reason] Zdjęcie wyciszenia. prawo do kar
/ac unwarn <player> [reason] Zdjęcie najnowszego ostrzeżenia. prawo do kar
/ac punish <player> <template> [reason] Kara z szablonu: następny stopień eskalacji gracza. prawo do kar
/ac history <player> 10 ostatnich kar gracza. prawo do kar

/ac rollback i /ac restore (CoreProtect, admincontrol.rollback) nie są komendami proxy: CoreProtect działa na serwerach, więc /ac rollback gracza trafia dalej na serwer, na którym jest, a konsola proxy ich nie wykonuje. /ac ban <player> -r <time> na proxy odpowiada, że CoreProtect nie jest tam dostępny; użyj panelu albo konsoli serwera.

Prawo do kar jest takie samo jak na serwerach: konsola proxy może wszystko; gracz potrzebuje admincontrol.punish i połączonego konta panelu, a jego rola w panelu wyznacza, co może.

Nadaj admincontrol.command i admincontrol.punish na proxy przez LuckPerms dla BungeeCorda, który nadaje je po UUID. Sekcja groups w config.yml BungeeCorda nadaje je po nicku: kto przejmie stary nick kogoś z ekipy po zmianie nicku, też je dostanie. Wszystko inne, co gracz wpisze pod /ac (/ac link, /ac report, /ac reload albo karę bez uprawnień na proxy), trafia dalej na serwer, na którym gracz jest, i ten sprawdza swoje uprawnienia jak dotąd. Konsola proxy wykonuje tylko komendy z tabeli. AdminControl przekazuje taką linię jako ostatni, po tym, jak filtry komend innych pluginów proxy zobaczyły ją w wpisanej postaci; tylko plugin słuchający zdarzenia czatu BungeeCorda z najwyższym priorytetem widzi ją jako /admincontrol:ac ... (na klientach od 1.19) albo jako anulowaną linię (na starszych klientach, których linię AdminControl wysyła do serwera tak, jak została wpisana).

Waterfall

Waterfall konfiguruje się tak samo. PaperMC już go nie rozwija: jego buildy przejmują tylko aktualizacje BungeeCorda, więc nowe wersje Minecrafta trafiają najpierw do BungeeCorda.

Znane ograniczenia

  • Tak samo jak na Velocity: wyciszenia nie działają dla czatu i komend obsługiwanych przez plugin na proxy, a podpowiedzi /ac w sieci pokazują tylko komendy proxy.