Corestone

Sieć Velocity

W sieci za proxy Velocity AdminControl egzekwuje kary na wszystkich serwerach: zbanowany gracz nie wejdzie do sieci, a kick albo ban nałożony na jednym serwerze wyrzuca gracza z całej sieci. Obsługiwane: Velocity 3.5 i 4.x.

Czego potrzebujesz

  • Velocity 3.5 i 4.x (testowane na 3.5.1 i 4.3.0). Velocity 3.5 działa na Javie 21 lub nowszej, Velocity 4.x wymaga Javy 25.
  • Bazy MySQL lub MariaDB wspólnej dla proxy i każdego serwera za nim (zobacz Bazę danych). SQLite nie da się dzielić: serwer na SQLite trzyma swoje kary dla siebie.
  • Nowoczesnego przekazywania danych gracza między proxy a serwerami (niżej).

Instalacja

  1. Wrzuć ten sam AdminControl.jar do folderu plugins/ proxy. Jeden jar działa na Paper, Purpur, Folia, Spigot, Velocity i BungeeCord (dla tego proxy zobacz Sieć BungeeCord).

  2. Uruchom proxy raz. Utworzy plugins/admincontrol/config.yml i spró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. Gdy proxy i baza są na różnych komputerach, połącz je przez sieć prywatną albo tunel, albo ustaw ssl-ca na certyfikat CA bazy: samo use-ssl szyfruje połączenie, ale nie sprawdza certyfikatu bazy.

    # 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).

Nowoczesne przekazywanie

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

  • Velocity, velocity.toml: player-info-forwarding-mode = "modern"; sekret jest w forwarding.secret.
  • Każdy serwer, config/paper-global.yml: w proxies.velocity ustaw enabled: true, online-mode: true i secret na ten sam sekret. W server.properties ustaw online-mode=false.

Trzymaj sekret w tajemnicy i nie pozwalaj graczom łączyć się bezpośrednio z portami serwerów, tylko przez proxy.

Serwery Spigot nie mają nowoczesnego przekazywania; używają formy BungeeCord (bungeecord: true w spigot.yml każdego serwera). Velocity ma wbudowane BungeeGuard:

  • W velocity.toml ustaw player-info-forwarding-mode = "bungeeguard"; Velocity wysyła sekret z forwarding.secret jako token.
  • Zainstaluj BungeeGuard na każdym serwerze Spigot i wpisz ten sam sekret w jego allowed-tokens.

player-info-forwarding-mode = "legacy" nie ma żadnego sekretu: używaj go tylko wtedy, gdy porty serwerów są zamknięte dla wszystkiego poza proxy. Serwer w trybie BungeeCord bez BungeeGuard jest oznaczony w panelu jako Niezabezpieczony forwarding (zobacz Sieć BungeeCord, „Zabezpieczenie serwerów”).

Za load balancerem albo osłoną DDoS (TCPShield i podobne) proxy widzi adres osłony, chyba że dostanie prawdziwy. Włącz haproxy-protocol = true w velocity.toml tylko wtedy, gdy osłona wysyła protokół PROXY, i wtedy pozwól łączyć się z portem proxy tylko osłonie: każdy, kto dostanie się do niego bezpośrednio, może podać dowolny adres, uniknąć bana IP albo doprowadzić do zbanowania cudzego adresu. Bez jednego i drugiego każdy gracz ma adres osłony, a jeden ban IP odcina całą sieć.

Co dzieje się gdzie

Kara Na proxy Na serwerach
Ban, ban IP Sprawdzany, gdy gracz wchodzi do sieci; nowy ban wyrzuca gracza z sieci. Ban IP rozłącza też wszystkich innych z tego adresu. Sprawdzany przy wejściu, jak bez proxy.
Kick Wyrzuca gracza z sieci. Wyrzuca gracza, jak bez proxy.
Wyciszenie Nie jest egzekwowane (podpisanego czatu nie da się bezpiecznie anulować na proxy). Egzekwowane na każdym serwerze.
Ostrzeżenie Nic. Gracz dostaje informację na serwerze, na którym jest.

Kara nałożona na jednym serwerze albo na proxy dociera do pozostałych w ciągu około 2 sekund. Zdjęcie kary dociera tak samo. Kick odczytany dopiero po tym, jak dziennika nie dało się czytać przez ponad minutę (baza albo ten serwer były niedostępne), jest pomijany, bo gracz mógł już wrócić.

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, tak samo jak serwer (zobacz Bazę danych, „Gdy baza nie działa”): zbanowany gracz dostaje odmowę, każdy inny wchodzi, a log mówi checked against the in-memory list. Tylko gdy ta lista nie została jeszcze odczytana, proxy wpuszcza gracza i zapisuje letting them in. Serwer, na który gracz wchodzi, też sprawdza bana.

Komendy na proxy

Te same komendy co na serwerach, 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.

Proxy wykonuje komendę /ac gracza tylko wtedy, gdy gracz ma te uprawnienia na proxy. Velocity nie ma operatorów, więc nadaj admincontrol.command i admincontrol.punish pluginem do uprawnień na proxy (na przykład LuckPerms dla Velocity). 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. Gracze są wyszukiwani po nicku wśród tych, którzy są online w sieci, i tych, których serwery już widziały.

Znane ograniczenia

  • Wyciszenie blokuje czat i mute-blocked-commands tylko na serwerach. Komendy i czat obsługiwane przez plugin na proxy (/msg albo plugin globalnego czatu na Velocity) nie są blokowane wyciszonym graczom.
  • Podpowiedzi /ac w sieci pokazują tylko komendy proxy; /ac link i /ac report działają, gdy wpiszesz je w całości.
  • Ustawienia, ogłoszenia, zgłoszenia, czat i konsola są osobne dla każdego serwera, jak opisuje Baza danych.