Sertifika
Telefonu kullanmak için buna ihtiyacınız yok. Kutudan çıktığı gibi, hiçbir şey yapılandırılmadan, bir oyuncu Ayarlar › Bağlı cihazlar bölümündeki QR’ı tarar ve gerçek telefonu karakterinin telefonu olur: mesajlar, posta, kişiler, Şehir Kimliği, garaj, mülkler, ilan panosu, kayıtlı yerler. Hepsi, sunucunuzun zaten açık tuttuğu port üzerinden düz HTTP ile çalışır.
Bir sertifikanın eklediği şey, bir tarayıcının güvenli olmayan bir sayfaya vermeyeceği kısımdır:
| Düz HTTP | HTTPS | |
|---|---|---|
| Mesajlar, posta, garaj, diğer her şey | evet | evet |
| Sayfa kapalıyken bildirimler | hayır | evet |
| Mikrofon, yani sesli notlar kaydedilebilsin | hayır | evet |
| Android’de uygulama olarak yüklemek, kendi ikonuyla | hayır | evet |
| Adres çubuğunda “Güvenli değil” | gösterilir | gösterilmez |
| Oturum token’ı | açık olarak yolculuk eder | şifreli |
Son satır kozmetik değil. Düz HTTP’de, oyuncunuzla aynı Wi-Fi’daki biri oturumunu alıp telefonunu okuyabilir. Bir roleplay şehri için bu kabul edilebilir bir takas olabilir; ama en azından bir sürpriz değil, bir karar olmalı.
Bunlardan hangisi sizsiniz
Section titled “Bunlardan hangisi sizsiniz”Sunucuyu işaret edecek bir adınız var — telefon kendi sertifikasını alsın
Section titled “Sunucuyu işaret edecek bir adınız var — telefon kendi sertifikasını alsın”Bu kısa olanı ve makinede başka bir programa ihtiyaç duymaz. Kaynak Let’s Encrypt’ten bir sertifika ister, challenge’ı kendisi cevaplar, TLS’i kendisi sunar ve çalıştığı sürece kendini yeniler.
-- 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' }, },}Sonra, bir kez:
- O adı sunucuya yönlendirin. Bir VPS’te bu tek bir A kaydıdır. Kendi alan adınız yok mu?
duckdns.orgbir dakikada size ücretsiz bir tane verir ve asla değişmez. - 443 ve 80 için güvenlik duvarından (firewall) izin verin. 80 yalnızca bir sertifika istenirken açılır ve cevap verilir verilmez tekrar kapatılır — log her iki seferde de bunu söyler.
phonehttps sertifikanın durumunu söyler. phonehttps check Let’s Encrypt’in test sunucusuna bu makineyle hiç konuşup konuşmayacağını sorar; hiçbir şey ulaşmadığında ilk cevaplanması gereken soru budur: güvenlik duvarınızı ile bu kaynağı birbirinden ayırır.
Yenileme kendi kendine halledilir; sertifikanın ömrünün üçte biri hâlâ kalmışken, her altı saatte bir kontrol edilir.
Sunucu evdeyse, adres değişir
Section titled “Sunucu evdeyse, adres değişir”Bir sağlayıcı bir ev bağlantısına canı istediğinde yeni bir adres verir ve verdiği anda ad başkasının router’ına işaret eder: bağlı telefonlar sunucuya ulaşamaz ve sertifika yenilenemez. Bu kaynak bunu zaten fark eder — QR için her yarım saatte bir kendi adresini sorar — ve bir DuckDNS adında bunu düzeltebilir de:
-- shared/server_config.luaDuckDNS = { Enabled = true, Domains = { 'yourname' }, -- the part in front of .duckdns.org Token = '01d8b39f-...', -- from your duckdns.org page},Adres değiştiğinde ve değişmediyse günde bir kez bilgilendirilir — kalp atışı (heartbeat) aynı zamanda, taşınmanın hiçbir şey gönderilemezken olduğu internetsiz bir dönemden sonra işleri düzelten şeydir. Çalıştığında log bunu söyler ve alarm verilmez; çalışmadığında eski uyarı yine gider ve beraberinde Server webhook’una da.
Bir VPS’te adres değişmez ve bunların hiçbirine gerek yoktur. Enabled = false bırakın.
Cfx.re connect proxy’sinin arkasındasınız
Section titled “Cfx.re connect proxy’sinin arkasındasınız”Yapılacak bir şey yok. sv_listingHostOverride ayarlıysa QR kendiliğinden https://your.domain/mic_phone/web/ olarak oluşturulur, çünkü o proxy tüm kökü sunucunuza geçirir. Bu en kolay durumdur ve zaten halledilmiştir.
Zaten bir reverse proxy çalıştırıyorsunuz ve öyle kalmasını tercih ediyorsunuz
Section titled “Zaten bir reverse proxy çalıştırıyorsunuz ve öyle kalmasını tercih ediyorsunuz”shared/config/web.lua içinde tek bir satır:
Url = 'https://phone.yourserver.com/mic_phone/web/',ve TLS’i sonlandırıp oyun portuna ileten, önde bir reverse proxy. Caddy ile bu, bir Caddyfile’da iki satırdır:
phone.yourserver.com { reverse_proxy 127.0.0.1:30120}nginx ile / yolunu 127.0.0.1:30120 adresine yönlendirin ve buffering’i kapatın (proxy_buffering off;), yoksa olay akışı (event stream) geri tutulur ve telefon hiçbir şey duymaz olur.
Çalışmayan bir şey: 30120 portunu gösteren bir DNS kaydına turuncu bulutu koymak. Cloudflare’ın proxy’si yalnızca sabit bir origin port listesini kabul eder — 80, 8080, 8880, 2052, 2082, 2086, 2095 ve 443, 2053, 2083, 2087, 2096, 8443 — ve 30120 bunların arasında değil. Yukarıdaki gibi, önünde kendi proxy’nize ihtiyacınız var.
Sunucunuzu bir hosttan kiralıyorsunuz
Section titled “Sunucunuzu bir hosttan kiralıyorsunuz”O makineye bir şey kuramazsınız — ama gerek de yok: yukarıdaki ilk seçenek hiçbir şey kurmaz, o bu kaynağın kendisidir. Hosttan ihtiyacınız olan şey, size ait iki port, 443 ve 80, ve sunucuyu gösteren bir ad. Pek çok host ikisini de verir, bazıları bu portları makinedeki tüm müşterilerle paylaşır ve ikisini de vermez. Başka bir şey istemeden önce portları isteyin; cevap hayırsa, bunun yerine bir adı adlandırılmış bir Cloudflare tüneline yönlendirin.
Hiçbir port açamıyorsunuz — adınız yok ya da sağlayıcınız engel oluyor
Section titled “Hiçbir port açamıyorsunuz — adınız yok ya da sağlayıcınız engel oluyor”O zaman bir tünel: tools/tunnel.ps1 bir Cloudflare quick tunnel başlatır, aldığı adresi config’e yazar ve kaynağı yeniden başlatmanızı söyler. Açılmış port yok ve sertifika yok.
Yine de ne olduğunu bilin: bir quick tunnel tasarım gereği geçicidir. Adres rastgeledir ve tünel her yeniden başladığında yeni bir tane verilir — ve bir tarayıcı yüklü bir uygulamayı, saklanan token’ını ve push aboneliğini geldikleri adrese bağladığından, bunların her biri her seferinde yeniden kurulmalıdır. Bir şeyleri denemek içindir. Yeniden başlatmadan kurtulması gereken her şey için, adresini koruyan adlandırılmış bir tünele bir ad yönlendirin — bunun için bir Cloudflare hesabı ve içinde bir alan adı gerekir.
Olay akışı hakkında bir not
Section titled “Olay akışı hakkında bir not”Telefon, mesajlar geldikçe duymak için uzun süreli tek bir bağlantı açık tutar ve bunu olağan EventSource GET’i yerine bir POST ile açar. İkisi de, önüne bir proxy koyuyorsanız bilmeye değer iki sebep:
- Bir sorgu dizesindeki (query string) token, telefon ile sunucu arasındaki her proxy loguna yazılmış bir token’dır. Bir POST gövdesinde değildir.
- Bir Cloudflare quick tunnel, bir GET olay akışını sunucu bağlantıyı kapatana kadar kapalı tutarken bir POST’un geçmesine izin verir (cloudflared#1449). Pek çok proxy GET akışlarını varsayılan olarak tamponlar (buffer).
Sunucu, yalnızca EventSource bilen şeyler için aynı rotalarda GET’e de cevap verir.