Steamworks dokumentáció
Steam Datagram Relay
A Steam Datagram Relay (SDR) a Valve virtuális játék-magánhálózata. Az API-jaink használatával nem csak a játékforgalmadat szállíthatod a Valve játéktartalomnak dedikált gerinchálózatán át, de a továbbítóhálózatunkhoz is hozzáférést nyersz. A forgalom továbbítása megvédi szervereidet és játékosaidat a DoS támadásoktól, mivel az IP-címek soha nincsenek felfedve. A teljes általad fogadott forgalom hitelesített, titkosított és sebességkorlátozott. Továbbá, meglepően nagy számú játékos számára gyorsabb útvonalat is tudunk találni a hálózatunkon keresztül, ami ténylegesen javítja a játékosok ping-idejét.

Ez a továbbítóhálózat pont-pont közötti forgalomra és dedikált szerverekhez is használható.

Általános követelmények és javaslatok a meglévő hálózati kód portolásához

Itt néhány általános, mind a P2P, mind a dedikált szerveres kapcsolatokra vonatkozó dolog következik, amivel tisztában kell lenni.

Először, mindenütt, ahol hálózati kiszolgálók nyilvános IP-cím alapján vannak azonosítva (játékszerverek esetében szinte mindig ez a helyzet), át kell állni helyette egy másik azonosító használatára. Erre több lehetőség is van:
  • A Steambe bejelentkező kliensekhez és játékszerverekhez általában a SteamID-t fogod használni.
  • Ha a játékszervered nem jelentkezik be a Steambe, és jegyalapú hitelesítési folyamatot használsz, bármilyen más, számodra értelmes azonosítót használhatsz. Lásd: SteamNetworkingIdentity.
  • Egyes kódalapokat teljesen átsző az a feltételezés, hogy a hálózati gazdagépeket és játékszervereket IPv4-címmel azonosítják, és e feltételezés megváltoztatása jelentős mennyiségű munka. És valóban, a Steamworks ISteamMatchmaking és ISteamMatchmakingServers API-k is ezzel a jellemzővel bírnak, ahogy egyes saját játékaink, például a Team Fortress 2 is. Ebben az esetben használhatod a Steamworks „FakeIP” rendszerét. A FakeIP egy olyan IP-cím, amely jobbára úgy néz ki, mint egy érvényes IPv4-cím, de olyan fenntartott címtartományból származik, amely az interneten nem használt. FakeIP-t rendelve a szerveredhez az továbbra is címezhető lesz IPv4 címmel, és szinte minden továbbra is „csak úgy” működni fog. Az ISteamNetworkingSockets és ISteamMatchmakingServers rendszerek felismerik ezeket a speciális IP-címeket, és megteszik a megfelelő lépéseket. E címekre nem végezhető útvonalválasztás, és nem működnek általános internetes célokra (például nem pingelhetők). További információkért lásd: ISteamNetworkingSockets::BeginAsyncRequestFakeIP.

Másodszor, módosítanod kell minden alacsony szintű socket kódot, hogy a Steamworks API-k egyikét használja a csatlakozáshoz.
  • Ideális esetben használhatod a kapcsolatorientált API ISteamNetworkingSockets interfészek egyikét, amely HSteamNetConnection-t ad vissza.
    (Vedd figyelembe, hogy ezek az API-k az egyszerű UDP-szállítást is támogatják, ami nagyon hasznos teszteléshez. Van nyílt forráskódú változat is.)
  • Egyes kódalapok UDP-szerűbb módon vannak megírva, ahol a csomagok ad-hoc módon bármikor küldhetők bármilyen távoli gépnek, és nem minden üzenet van már létesített kapcsolatnak küldve. Két Steamworks funkció van, ami ilyen helyzetekben hasznos lehet.
    • Az ISteamNetworkingMessages használatával kommunikálhatsz SteamNetworkingIdentity típus, például SteamID használatával azonosított gépekkel.
    • Az ISteamNetworkingFakeUDPPort használatával kommunikálhatsz FakeIP használatával azonosított gépekkel.

Az SDR más platformokon és áruházakban történő használatának követelményei

Egy többplatformos játékhoz szánt hálózatkezelő API és DDoS megoldás hasznavehetetlen, ha csak egy platformon működik. Az esetek többségében más platformok és áruházak játékosai hozzáférhetnek a továbbítóhálózathoz, feltéve, hogy a játékod megfelel néhány alapvető feltételnek.
  • Legyen a játékodnak Steamen kiadott változata.
  • Elfogadod, hogy kérésre észszerű időn (mondjuk néhány hónapon) belül frissíted a játékodat, ha hibajavítást vagy biztonsági frissítést kell kiadnunk.
  • Tudomásul veszed, hogy sajnos nem tudjuk megígérni, hogy ez a szolgálatatás mindig elérhető lesz nem Steames játékosoknak. Abban a valószínűtlen esetben, ha le kell építenünk ezt a szolgáltatást, minden tőlünk telhetőt meg fogunk tenni a veled való együttműködésre, hogy elkerüljük a kiesést a játékosaid felé, beleértve idő biztosítását arra, hogy tervezhess. Az SDK-ban vannak olyan beépített mechanizmusok, amelyekkel utasíthatjuk a klienseket a közvetlen UDP-kapcsolatra való visszaállásra, vagy NAT-átütés megkísérlésére, de ezt az eshetőséget is érdemes észben tartanod.
  • Legyen valamilyen meccskereső szolgáltatásod (az SDR ezt „játékkoordinátornak” hívja), amely tud kiadni valamiféle hitelesítési adatokat. Ehhez van külön SDK-nk. Lásd alább.

Kérjük, lépj velünk kapcsolatba a vonatkozó SDK-kért, és hogy megbeszéljük a részleteket. Még dolgozunk e kód terjesztésének részletein, és jelenleg nem biztos, hogy minden partnernek és minden játékhoz elérhetővé tudjuk tenni a platformok közötti támogatást.

Alább további technikai információkat találsz az SDR más platformokon és áruházakban való használatához.

Ha nem felelsz meg a fenti követelményeknek, az API nyílt forráskódú változatát nyugodtan használhatod bármire. Vedd figyelembe, hogy a nyílt forráskódú változat nem támogatja a továbbítóhálózat elérését.

Pont-pont közötti játékok

Pont-pont közötti forgalomnál a Steamen az SDR kihasználásához mindössze olyan API-kat kell használnod, mint az ISteamNetworkingSockets::CreateListenSocketP2P és az ISteamNetworkingSockets::ConnectP2P. Minden másról a Steam gondoskodik. Más platformokhoz és áruházakhoz alább olvashatsz többet a további műszaki követelményekről.

Dedikált szerverek ismert adatközpontokban

A pont-pont közötti API-k akkor is simán működnek, amikor az egyik „pont” egy dedikált szerver. Van azonban egy komoly csapda: ha a dedikált szervered nem az egyik adatközpont közelében van, ahol továbbítókat működtetünk, akkor a legjobb továbbított útvonal lassabb lehet, mint az alapértelmezett IP-útvonal, és lesz legalább néhány olyan játékos, akinek a késleltetése rosszabb, mint az alapeset.

Az optimális dedikált szerveres élményhez a szervert egy olyan ismert adatközpontban javasolt működtetni, amely az SDR hálózat része. Gondoskodunk róla, hogy működjenek a közelben továbbítók, és a továbbított útvonal soha ne legyen sokkal lassabb, mint az alap IP-útvonal. Az ezekben az ismert adatközpontokban működő szerverek egy speciális API használatával csatlakoznak. Erre a használati esetre az SDK „hostolt dedikált szerverként” hivatkozik. Vedd figyelembe, hogy ez nem feltétlenül azt jelenti, hogy a Valve üzemelteti a szervereket vagy a továbbítókat; lehet olyan külső adatközpont, amellyel kapcsolatot létesítettünk, és amelyet a Steam Datagram Relay rendszer ismer.

Ha nagyobb szolgáltatónál működtetsz játékszervereket, és érdekel az SDR használata, kérjük, vedd fel velünk a kapcsolatot. Megpróbálunk együttműködni a szolgáltató cégeddel továbbítók üzemeltetésére az adatközpontban. Ez az ideális helyzet, de még ha ez nem is lehetséges, esetleg akkor is hozzá tudjuk adni az adatközpontot hálózati konfigurációs rendszerünkhöz, és használni tudunk a közelben lévő Valve továbbítókat.

Ha dedikált szervereket hostoló cég vagytok, és csatlakozni akartok a hálózatunkhoz, hogy ügyfeleitek kihasználhassák az SDR-t, kérjük, vegyétek fel velünk a kapcsolatot! Még nem telepítettünk továbbítókat külső hosting cégeknél, ám érdekel minket ez a megoldás.

Egyszerű csatlakozási folyamat dedikált szerverhez játékkoordinátor nélkül

Ha nincs saját központi meccskereső/bejelentkezési szolgáltatásod (ezt néha „játékkoordinátornak” hívjuk), amely beosztja a játékosokat a szerverekhez, vagy csak a lehető legegyszerűbben akarod megoldani a dolgot, akkor csatlakozhatsz egy ismert adatközpontban lévő dedikált szerverhez az iSteamNetworkingSockets::CreateListenSocketP2P és az iSteamNetworkingSockets::connectP2P használatával. Ebben az esetben a kapcsolat a kliensen kezdődik, mint egy szokásos P2P kapcsolatnál. A kézfogási üzenetek küldése a Steamen keresztül történik, így ha a játékos vagy a szerver elveszti a kapcsolatot a Steammel, a kapcsolatot nem lehet létrehozni. Továbbá, a Steam nem korlátozza, ki próbálhat csatlakozni, annak ellenőrzésén kívül, hogy a játékos be van jelentkezve a Steambe, és birtokolja a játékot.

Jegyalapú szerverkapcsolati folyamat

Ha van saját játékkoordinátor szolgáltatásod, jegyalapú csatlakozási folyamat használata javasolt. Általában csak kicsit több munka, mint egy egyszerű P2P jellegű kapcsolódási folyamat, és két fontos előnyt kínál:
  • Csak olyan játékosoknak adsz jegyet, akik csatlakozási kísérletét engedélyezni kell, így a nem kívánt kapcsolódási kísérletek el sem érik a szerveredet.
  • Miután egy játékosnak van jegye, akkor is csatlakozni tud a szerverhez, ha elveszti a kapcsolatot a Steammel, a szerver veszti el a kapcsolatot a Steammel, a játékos számítógépe összeomlik és újraindul stb. A játékszerverhez való újracsatlakozás robusztussá tétele ezekkel a gyakori hibákkal szemben különösen fontos olyan játékoknál, amelyek büntetik a játékosokat a játék elhagyásáért.

A jegyalapú kapcsolódás egy dedikált szerverhez SDR-en keresztül így működik:
  • Amikor a játékszervered bejelentkezik a játékkoordinátorodba, elküldi a SteamDataGramHostedAddress-ét, amely egy fizikai útválasztási információkat tartalmazó átlátszatlan blob. (Lásd: ISteamNetworkingSockets::GetHostedDedicatedServerAddress.) Ne feledd továbbá, hogy van néhány eszközünk, amelyeket használhatsz segítségül hitelesített bejelentkezésnél a játékkoordinátorodba.
  • A szerver az ISTeamNetworkingSockets::CreateHostedDedicatedServerListenSocket használatával várni kezdi a továbbított forgalmat.
  • Valamikor egy kliensed meccskeresést akar kezdeni, vagy szerverhez akar csatlakozni.
  • A kliens az ISteamNetworkingUtils felület metódusait használva le tudja kérni az adatközpontok ping idejét, és ellenőrizni tudja a kapcsolatot. Valószínűleg érdemes ezt az információt elküldetni a klienssel a játékkoordinátorodnak, hogy az jó döntéseket hozhasson a játékosok adatközpontokhoz rendeléséről.
  • Amikor a játékkoordinátor készen áll egy kliens felhatalmazására szerverhez csatlakozásra, létrehoz egy SteamDatagramRelayAuthTicket-et, és aláírja azt a titkos kulcsoddal. Ez a jegy feljogosít egy adott klienst kommunikálni egy adott játékszerverrel, korlátozott időre. Tartalmazza a titkosított útválasztási információkat is. A játékkoordinátor elküldi a jegyet a kliensnek.
  • A kliens helyi gyorsítótárban tárolja a jegyet. (További információért lásd az ISteamNetworkingSockets::ReceivedRelayAuthTicket-et, beleértve, hogy mi haszna gyorsítótárazással bonyolítani a dolgot.)
  • A kliens az ISteamNetworkingSockets::ConnectToHostedDedicatedServer használatával csatlakozik a szerverhez. További részletekért üzenetek küldéséről és fogadásáról nézd meg az ISteamNetworkingSockets-et.

A jegyalapú hitelesítés jelenleg a FakeIP rendszerrel kombinálva nem érhető el.

Játékkoordinátor SDK

A „játékkoordinátor” kifejezéssel a háttér-/meccskereső szolgáltatásodra utalunk. Van egy külön kis SDK, amelyet összekapcsolhatsz a játékkoordinátoroddal, és ami a következőkre használható:
  • Jegyek kibocsátása hozzáférés adására klienseknek az SDR mögött működő játékszerverekhez.
  • PingLocation_t stringek feldolgozása és ping-idők kiszámítása ezen objektumok között.
  • Azonosító tanúsítványok kiadása más platformokon és áruházakban lévő játékosoknak.
  • Bizonyos egyéb haladó funkciók kihasználása.

Az SDK itt érhető el.

Hitelesítés a játékkoordinátor SDK használatával

Az SDR két hitelesítési mechanizmust használ:

  • A hostolt szerverjegyeket a játékkoordinátorod adja ki, és feljogosítanak egy konkrét klienst a kommunikációra egy konkrét szerverrel, egy bizonyos ideig. A továbbítójegyek csak a dedikált szerveres használati esethez vannak használva. Lásd: SteamDatagramRelayAuthTicket.
  • A tanúsítványok a hagyományos módon vannak hitelesítésre és DH-kulcscsere végrehajtására használva titkosított csatorna létrehozásához. A tanúsítványok végpontok közötti koncepció, és a SteamNetworkingSockets kommunikáció minden formájában használhatók, beleértve a közvetlen UDP-kapcsolatot vagy a P2P-t. Lásd a játékkoordinátor SDK SteamDatagram_CreateCert-jét és az ISteamNetworkingSockets::GetCertificateRequest-et.

A kliensek és szerverek hitelesítésére saját nyilvános kulcsú infrastruktúrát (PKI) használunk. A játékosok egyedi, rövid lejáratú tanúsítványokat kapnak, a konkrét játékos-személyazonosságukhoz kötve. Ezt a Steam intézi. Játékszerverekhez jellemzően hosszabb lejáratú tanúsítványokat használunk, amelyek egy teljes adatközpontot engedélyeznek egy adott AppID-hez. Ezeket a tanúsítványokat te adod ki.

Mielőtt jegyeket és tanúsítványokat tudnál kiadni, létre kell hoznod egy kulcspárt, és el kell küldened nekünk a nyilvános kulcsodat. Mi kiadunk egy, a saját fő CA-kulcsunkkal aláírt tanúsítványt, amely megbízhatóként jelöli a te kulcsodat az alkalmazásaidhoz. Ezután te a tanúsítványeszközünk használatával offline létrehozol egy tanúsítványt mindegyik olyan adatközpontnak, ahol szervereket akarsz működtetni, és aláírod azokat a privát kulcsoddal. Ezeket a tanúsítványokat biztonságos csatornán keresztül kiosztod a játékszervereidnek, a környezetben adva át azokat a szerverednek (lásd alább).

A te kulcsodat fogod használni jegyek létrehozására is, valahányszor egy játékos játékszerverhez kapcsolódik.

A privát CA-kulcsodat és a tanúsítványaid privát kulcsait tartsd biztonságban! Ha a kulcsod kiszivárog, így vissza kell vonni és le kell cserélni, az üzemszünethez vezethet.

Az SDR alkalmazása más platformokon és áruházakban


A más platformokon és áruházakban levő klienseid nem jelentkeznek be a Steambe, ezért biztosítanod kell néhány olyan szolgáltatást ezeknek a játékosoknak, amelyeket a Steames játékosoknak a Steam biztosít.

Játékkoordinátor-inicializálás

  • Meccskereső szolgáltatásodnak („játékkoordinátor”) kapcsolódnia kell a játékkoordinátor SDK-hoz. A steamdatagram_gamecoordinator.h fejlécfájl tartalmazza a további részleteket. A játékkoordinátor SDK sima C API-t használ, így viszonylag könnyen integrálhatónak kell lennie más nyelvekkel.
  • Inicializáláskor töltsd le a hálózati konfigurációt, és körülbelül óránként keress frissítéseket. (Lásd: SteamDatagram_GameCoordinator_GetNetworkConfigURL és SteamDatagram_GameCoordinator_SetNetworkConfig.) A hálózati konfiguráció egy kis JSON-fájl, ami a cikk írásakor körülbelül 26 KB (tömörítve 9 KB). Ez az URL nagyon magas rendelkezésre állású, azonban ha kezelni szeretnél egy esetleges leállást, használhatsz egy nemrég letöltött változatot.
  • Szükséged lesz egy, a játékhoz hitelesített kulcspárra. Küldd el nekünk a nyilvános kulcsot, és inicializáld a játékkoordinátor SDK-t a privát kulcsoddal. (További információkért lásd: SteamDatagram_SetPrivateKey_Ed25519.)

Kliensbejelentkezés

  • A kliens meghívja az ISteamNetworkingSockets::GetCertificateRequest-et, hogy lekérjen egy blobot, és elküldje azt a bejelentkezési kérelem üzenettel együtt a játékkoordinátornak.
  • Amikor a játékkoordinátor megkapja a bejelentkezési kérelmet, létrehoz egy tanúsítványt a kliensnek a SteamDatagram_createCert használatával.
  • A generált tanúsítványt visszaküldi a kliensnek a bejelentkezési válaszban. A kliensnek az ISteamNetworkingSockets::SetCertificate használatával telepítenie kell a tanúsítványát.
  • Erősen ajánlott ezzel egyidőben a hálózati konfiguráció elküldése is a klienseknek. A kliens a SteamDatagram_SetNetworkConfig használatával alkalmazza a hálózati konfigurációt.

A tanúsítványoknak van lejárata, és 48 órás lejárat használatát javasoljuk. Ha a kliensek esetleg 48 óránál hosszabb ideig csatlakoznak, akkor a tanúsítványt rendszeresen meg kell újítani. Új tanúsítvány alkalmazása bármikor elfogadható, így ha gyakrabban akarsz tanúsítványt kiadni, például minden meccs kezdetén, azzal sincs semmi probléma.

Minden kliensnek egyedi identitással kell rendelkeznie. Ha lehetséges, használd a platformspecifikus identitásokat. (Steam klienseknél ez követelmény.) Ha azonban ez nem lehetséges, használhatsz olyan „általános karakterlánc” identitást, amely jelentőséggel bír a meccskeresődnek. Lásd: SteamNetworkingIdentity.

Pont-pont közötti játékok

A P2P kapcsolatok „jelző” szolgáltatást igényelnek. Ez alacsony sávszélességű, késleltetésre érzéketlen, „lehetőség szerinti” szállítási csatorna, amely képes alkalmi kézfogási üzenetek továbbítására az útvonalválasztás megbeszéléséhez. Ez megköveteli, hogy a kliensek állandó, például websocket vagy TCP kapcsolatban legyenek a meccskereső szolgáltatásoddal, hogy üzeneteket tudj küldeni nekik. Ha a kliensek csak kérés/válasz mintával beszélnek a játékkoordinátoroddal, például http-n keresztül, az nem fog működni. Csak „lehetőség szerinti” kézbesítést kell biztosítanod, ami azt jelenti, hogy a könyvtár tolerálja az üzenetek kimaradását vagy többszörös továbbítását.

  • Kapcsolat kezdeményezéséhez használd az ISteamNetworkingSockets::ConnectP2PCustomSignaling-ot. Implementálnod kell egy ISteamNetworkingConnectionSignaling alosztályt, és a SendSignal hívásakor a kliensnek el kell küldenie az üzenetet a háttérrendszerednek, a háttérrendszerednek pedig „lehetőség szerint” el kell juttatnia az üzenetet a végpontnak. Egy kapcsolat első létrehozásakor 4-10 kezdeti üzenetváltás a jellemző. Ezt követően kérést kaphatsz jel elküldésére egy létrehozott kapcsolathoz, ha az útválasztási feltételek megváltoznak.
  • Amikor egy kliens jelet kap, hívd meg az ISteamNetworkingSockets::ReceivedP2PCustomSignal-t. A könyvtár dekódolja az üzenetet. Ha meglévő kapcsolatról van szó, a jel belsőleg lesz feldolgozva. Ha a jel új kapcsolatra vonatkozik, az ISteamNetworkingSignalingRecvContext::OnConnectRequest lesz meghívva.

További részletekért lásd a steamnetworkingcustomsignaling.h-t.

Szerverek üzemeltetése ismert adatközpontokban

Ez a szakasz néhány műszaki részletet ír le dedikált szerverek ismert adatközpontokban üzemeltetésével kapcsolatban.

Környezeti változók

A dedikált szerver környezeti változókból kapja a konfigurációját. A Valve adatközpontokban mindezen értékek automatikusan beállításra kerülnek neked.
  • SDR_LISTEN_PORT: Az UDP-port, amelyen a szerver fogadja a forgalmat a továbbítóktól. A dedikált szerver csak egyetlen socketet használ. (De „virtuális portok” használatával egynél több logikai „listen socketed” is lehet. Lásd: ISteamNetworkingSockets::CreateHostedDedicatedServerListenSocket.) Mi az adatközpontjainkban jellemzően a 30xxx tartományt használjuk.
  • SDR_IP: A szerverednek rendelkeznie kell nyilvános IP-címmel, amely képes „kéretlen” forgalom fogadására a továbbítóktól. Ha a szervernek csak egy interfésze van nyilvános IP-címmel, akkor az lesz használva. Egyéb esetben meg kell mondanod a játékszervernek, hogy melyik IP-t használja. Az SDR-socket az INADDR_ANY-hez lesz kötve, de erre az információra szükség van a szerver SteamDatagramHostedAddress-ének kitöltéséhez. Arra különösen ügyelj, hogy fejlesztési környezetekben, ahol a szervered céges tűzfal mögött van, ezt általában be kell állítani. (Lásd alább.) Megadhatsz egy portot is, ha a nyilvános port eltér az SDR_LISTEN_PORT-tól.
  • SDR_POPID: Az üzemi adatközpont 3 vagy 4 betűs alfanumerikus kódja (SteamNetworkingPOPID). Fejlesztési környezetben hagyd ezt üresen.
  • SDR_PRIVATE_KEY: A privát kulcs a tanúsítványodból. Ez egy OpenSSH PEM blokk, amely „-----BEGIN OPENSSH PRIVATE KEY-----” szakasszal kezdődik.
  • SDR_CERT: Az aláírt tanúsítványod. Ez egy saját formátumú PEM-szerű blokk, amely „-----BEGIN STEAMDATAGRAM CERT-----” szakasszal kezdődik.
  • SDR_NETWORK_CONFIG: Az alkalmazásod SDR-hálózati konfigurációs fájljának helyi, legfrissebb példányának teljes elérési útja. Ha ez a változó nincs beállítva, akkor a szerver rendszerindításkor HTTP-t használva fog lekérni egy példányt a hálózati konfiguráció beszerzéséhez. Az optimális teljesítményhez rendszeres időközönként (például óránként) letöltheted a legfrissebb konfigurációt, és elmentheted helyileg, hogy egy hálózati szünet ne okozzon zavart. A Valve szerverek így vannak konfigurálva.

Működtetés fejlesztési környezetben

Mivel az ISteamNetworkingSockets támogatja az egyszerű UDP-kapcsolatot, általában a legjobb annak elérésével kezdeni, hogy a kódod működjön ezen az interfészen UDP-n keresztül anélkül, hogy a továbbítókkal kellene foglalkoznod.

Javasoljuk, hogy a szerverkódod az SDR_LISTEN_PORT környezeti változó jelenlétét használja annak eldöntésére, hogy a szervered figyeljen-e az SDR-re. Az értéket az ISteamNetworkingSockets::GetHostedDedicatedServerPort használatával tudod lekérni.

Fejlesztési környezetben az SDR_POPID-t üresen hagyod. Amikor az SDR_LISTEN_PORT és az SDR_POPID üres, a POPID egy speciális, 3 karakteres kódra lesz állítva: „dev”.

A „dev” környezetben levő szervereken a hitelesítés általánosságban ki van kapcsolva. (A kliensek és a továbbítók egyaránt engedik a csatlakozást „dev” szerverekhez aláírt tanúsítvány nélkül, feltéve, hogy van aláírt jegyük.) A játékkoordinátoroddal való hitelesítéshez egy másik mechanizmusra lesz szükséged. A játékkoordinátorodnak pedig óvatosnak kell lennie, amikor olyan szervernek ad ki jegyet, amely azt állítja, hogy „dev” módban van!

A szerverednek képesnek kell lennie kéretlen nyilvános forgalom fogadására, ami azt jelenti, hogy ha nincs nyilvános IP-címe, porttovábbítást kell beállítanod a tűzfaladon. És valószínűleg be kell állítanod az SDR_IP-t a megfelelő nyilvános IP-címmel (és porttal, ha az eltér az SDR_LISTEN_PORT-tól).