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
Wrzuć ten sam
AdminControl.jardo folderuplugins/proxy. Jeden jar działa na Paper, Purpur, Folia, Spigot, Velocity i BungeeCord (dla tego proxy zobacz Sieć BungeeCord).Uruchom proxy raz. Utworzy
plugins/admincontrol/config.ymli spróbuje połączyć się z bazą z tego pliku (localhost, bez hasła): dopóki nie wpiszesz swojej, log mówiCould not open the shared database, a kary nie są sprawdzane na proxy.W
plugins/admincontrol/config.ymlna 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 ustawssl-cana certyfikat CA bazy: samouse-sslszyfruje 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: trueKażdy serwer za proxy ma AdminControl z
database.type: mysqli tą samą bazą.Zrestartuj proxy i wpisz
/ac versionw jego konsoli: pokażeDatabase: mysql, ready, gdy proxy łączy się z bazą. Zdatabase.type: sqliteAdminControl 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 wforwarding.secret. - Każdy serwer,
config/paper-global.yml: wproxies.velocityustawenabled: true,online-mode: trueisecretna ten sam sekret. Wserver.propertiesustawonline-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.tomlustawplayer-info-forwarding-mode = "bungeeguard"; Velocity wysyła sekret zforwarding.secretjako 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-commandstylko na serwerach. Komendy i czat obsługiwane przez plugin na proxy (/msgalbo plugin globalnego czatu na Velocity) nie są blokowane wyciszonym graczom. - Podpowiedzi
/acw sieci pokazują tylko komendy proxy;/ac linki/ac reportdział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.