Certyfikat
Nie potrzebujesz tego, aby używać telefonu. Od razu po instalacji, bez żadnej konfiguracji, gracz skanuje kod QR w Ustawienia › Połączone urządzenia, a jego prawdziwy telefon staje się telefonem jego postaci: wiadomości, poczta, kontakty, City ID, garaż, nieruchomości, tablica ogłoszeń, zapisane miejsca. Wszystko to działa przez zwykłe HTTP na porcie, który Twój serwer już ma otwarty.
Certyfikat dodaje to, czego przeglądarka nie przekaże niezabezpieczonej stronie:
| Zwykłe HTTP | HTTPS | |
|---|---|---|
| Wiadomości, poczta, garaż i cała reszta | tak | tak |
| Powiadomienia przy zamkniętej stronie | nie | tak |
| Mikrofon, żeby można było nagrywać notatki głosowe | nie | tak |
| Instalacja jako aplikacja na Androidzie, z własną ikoną | nie | tak |
| “Niezabezpieczona” w pasku adresu | wyświetlana | niewyświetlana |
| Token sesji | podróżuje jawnym tekstem | zaszyfrowany |
Ten ostatni wiersz nie jest kosmetyczny. Przy zwykłym HTTP ktoś w tej samej sieci Wi-Fi co Twój gracz może przejąć jego sesję i czytać jego telefon. W mieście roleplayowym może to być akceptowalny kompromis; powinna to jednak być decyzja, a nie niespodzianka.
Który z tych przypadków to Ty
Dział zatytułowany „Który z tych przypadków to Ty”Masz nazwę, którą możesz skierować na serwer — pozwól telefonowi samemu pobrać certyfikat
Dział zatytułowany „Masz nazwę, którą możesz skierować na serwer — pozwól telefonowi samemu pobrać certyfikat”To ta krótka opcja i nie wymaga żadnego innego programu na maszynie. Zasób prosi Let’s Encrypt o certyfikat, sam odpowiada na wyzwanie, sam obsługuje TLS i sam się odnawia, dopóki działa.
-- shared/server_config.lua (server-only: this file is never sent to a client)ServerConfig.Web = { Url = 'https://phone.yourserver.com/', Https = { Enabled = true, Names = { 'phone.yourserver.com' }, },}Następnie, jednorazowo:
- Skieruj tę nazwę na serwer. Na VPS to jeden rekord A. Nie masz własnej domeny?
duckdns.orgda Ci ją za darmo w minutę i nigdy się nie zmienia. - Przepuść 443 i 80 przez zaporę sieciową (firewall). Port 80 jest otwierany tylko na czas proszenia o certyfikat i zamykany natychmiast po udzieleniu odpowiedzi — log pokazuje oba momenty.
phonehttps mówi, na jakim etapie jest certyfikat. phonehttps check pyta serwer testowy Let’s Encrypt, czy w ogóle będzie rozmawiał z tą maszyną, i to jest pytanie, na które warto odpowiedzieć w pierwszej kolejności, gdy nic nie przychodzi: oddziela Twoją zaporę sieciową od tego zasobu.
Odnowienie załatwia się samo, gdy do końca życia certyfikatu pozostaje jedna trzecia, sprawdzane co sześć godzin.
Jeśli serwer stoi w domu, adres się zmienia
Dział zatytułowany „Jeśli serwer stoi w domu, adres się zmienia”Dostawca przydziela domowemu łączu nowy adres, kiedy mu się spodoba, a w chwili, gdy to robi, nazwa wskazuje na czyjś cudzy router: połączone telefony nie mogą dotrzeć do serwera, a certyfikat nie może się odnowić. Ten zasób już to zauważa — pyta o własny adres co pół godziny, dla kodu QR — a na nazwie DuckDNS potrafi też to naprawić:
-- shared/server_config.luaDuckDNS = { Enabled = true, Domains = { 'yourname' }, -- the part in front of .duckdns.org Token = '01d8b39f-...', -- from your duckdns.org page},Informuje o zmianie adresu i raz dziennie, gdy się nie zmienił — ten heartbeat to także to, co naprawia sytuację po okresie bez internetu, gdy zmiana nastąpiła, kiedy nic nie dało się wysłać. Gdy to działa, log tak mówi i nie podnosi się żadnego alarmu; gdy nie działa, stare ostrzeżenie nadal wychodzi, a razem z nim do webhooka Server.
Na VPS adres się nie zmienia i nic z tego nie jest potrzebne. Zostaw Enabled = false.
Siedzisz za proxy połączeń Cfx.re
Dział zatytułowany „Siedzisz za proxy połączeń Cfx.re”Nic do roboty. Jeśli ustawiono sv_listingHostOverride, kod QR jest budowany sam jako https://your.domain/mic_phone/web/, ponieważ to proxy przekazuje cały root do Twojego serwera. To najłatwiejszy przypadek i jest już obsłużony.
Masz już reverse proxy i wolisz go zachować
Dział zatytułowany „Masz już reverse proxy i wolisz go zachować”Jedna linijka w shared/config/web.lua:
Url = 'https://phone.yourserver.com/mic_phone/web/',oraz reverse proxy z przodu, które kończy TLS i przekazuje ruch na port gry. Z Caddy to dwie linijki w Caddyfile:
phone.yourserver.com { reverse_proxy 127.0.0.1:30120}Z nginx przekaż / na 127.0.0.1:30120 i wyłącz buforowanie (proxy_buffering off;), bo w przeciwnym razie strumień zdarzeń zostanie wstrzymany, a telefon przestanie cokolwiek słyszeć.
Jedna rzecz, która nie działa: włączenie pomarańczowej chmurki na rekordzie DNS wskazującym na port 30120. Proxy Cloudflare przyjmuje tylko ustaloną listę portów źródłowych — 80, 8080, 8880, 2052, 2082, 2086, 2095 oraz 443, 2053, 2083, 2087, 2096, 8443 — a 30120 się na niej nie znajduje. Potrzebujesz własnego proxy z przodu, jak wyżej.
Wynajmujesz serwer u hostingodawcy
Dział zatytułowany „Wynajmujesz serwer u hostingodawcy”Nie możesz niczego instalować na tej maszynie — ale nie musisz: pierwsza opcja wyżej niczego nie instaluje, to jest ten zasób. Od hostingodawcy potrzebujesz dwóch własnych portów, 443 i 80, oraz nazwy skierowanej na serwer. Wielu hostingodawców daje jedno i drugie, niektórzy współdzielą te porty między wszystkich klientów na maszynie i nie dadzą ani jednego. Zapytaj o porty, zanim zapytasz o cokolwiek innego; jeśli odpowiedź brzmi nie, skieruj nazwę na nazwany tunel Cloudflare.
W ogóle nie możesz otworzyć portu — nie ma nazwy albo dostawca stoi na przeszkodzie
Dział zatytułowany „W ogóle nie możesz otworzyć portu — nie ma nazwy albo dostawca stoi na przeszkodzie”W takim razie tunel: tools/tunnel.ps1 uruchamia szybki tunel Cloudflare (quick tunnel), wpisuje otrzymany adres do configu i każe zrestartować zasób. Bez otwierania portu i bez certyfikatu.
Wiedz jednak, czym to jest: szybki tunel jest z założenia ulotny. Adres jest losowy, a nowy jest wydawany przy każdym restarcie tunelu — a ponieważ przeglądarka wiąże zainstalowaną aplikację, jej zapisany token i subskrypcję push z adresem, z którego pochodzą, każdą z tych rzeczy trzeba ustawiać od nowa za każdym razem. Służy do wypróbowywania. Dla czegokolwiek, co musi przetrwać restart, skieruj nazwę na nazwany tunel, który zachowuje swój adres — to wymaga konta Cloudflare i domeny w nim.
Uwaga o strumieniu zdarzeń
Dział zatytułowany „Uwaga o strumieniu zdarzeń”Telefon trzyma otwarte jedno długie połączenie, by dowiadywać się o wiadomościach w momencie ich nadejścia, i otwiera je przez POST, a nie zwykły GET z EventSource. Dwa powody, oba warte znania, jeśli stawiasz przed tym proxy:
- Token w query stringu to token zapisany w każdym logu proxy między telefonem a serwerem. W treści POST już nie.
- Szybki tunel Cloudflare trzyma strumień zdarzeń GET zamknięty, dopóki serwer nie zamknie połączenia, a POST przepuszcza (cloudflared#1449). Wiele proxy domyślnie buforuje strumienie GET.
Serwer odpowiada też na GET na tych samych trasach, dla wszystkiego, co zna tylko EventSource.