Tovább a tartalomhoz

Portok továbbítása terminálból

Egy beszélgetés termináljában indított szerver csak abban a térben kerül közzétételre. A portok panelja észleli azokat a figyelőket, amelyeket ez az alkalmazás ott indított, leképezi őket, és címet ad minden helyhez, ahonnan el szeretné érni őket. Két tér ugyanúgy figyelhet az 5173 porton; a leképezéseik soha nem keverednek.

Itt semmi sem nyitja meg a gépet: minden útvonalat a szerver hoz létre, kérésre, és a terminállal vagy az állomással együtt szűnik meg.

  1. Nyissa meg a beszélgetés Terminál (VM) vagy gazdagépshell felületét (egy térben vagy egy PR-oldalon).
  2. Indítsa el a szerverét – pnpm dev, python -m http.server 8000, bármit.
  3. Néhány másodpercen belül a terminál jobb felső sarkában lévő csatlakozó ikon pontot kap. Kattintson rá.

A panel minden figyelt portot felsorol, a hozzá tartozó folyamattal együtt, 3000 → 3000 formában: a bal oldalon az a port, amelyre a folyamat kötötte magát, a jobb oldalon az, amelyen helyben válaszol (ugyanaz a szám, amikor az szabad volt a gépén). Minden sor azt is jelzi, hogy az asztali localhost, a Böngésző (VM) és az Android el tudja-e érni.

A felderítés elszigetelt: a Terminál (VM) lekérdezése az adott vendéggépen belül történik; a gazdagépshell lekérdezése az adott munkamenet PTY-folyamatfából. Más terek és a Mac gépén futó egyéb folyamatok nem kerülnek listázásra.

Az ebben a terminálban megjelenő új portok automatikusan továbbításra kerülnek. Kapcsolja ki ugyanabban a panelben a Portok automatikus továbbítása lehetőséget, ha csak a saját maga által hozzáadottakat szeretné.

Használja a sorban a Helyi URL másolása lehetőséget – http://localhost:3000. A továbbítás csak loopbacken figyel, így a hálózatán semmi más nem látja.

Ha két tér egyaránt a vendéggép 5173 portját teszi elérhetővé, és a gépén már foglalt a 127.0.0.1:5173, a második tér megtartja a vendéggép 5173 portját, és egy ideiglenes helyi portot kap. A Másolás URL a jobb oldali számot használja.

Gazdagépshell esetén a folyamat már a gépén fut. Ugyanazon helyi port leképezése hatástalan; ha egy másik helyi portot választ, a loopback proxy az Ön által választott portra kötődik.

A --host (vagy a 0.0.0.0-ra kötés) nem teszi képessé az elszigetelt Böngészőt (VM) arra, hogy elérjen egy a Macen futó szervert. A vendéggépnek saját loopbackje van; a szerver akkor létesít alagutat abba a vendéggépbe, amikor a Böngésző fül ugyanabban a térben van.

Nyissa meg az elszigetelt böngészőt ugyanabban a beszélgetésben. Írja be, hogy localhost:<left-hand port> – az a szám, amelyre a folyamat kötötte magát. Egy eltérő hozzárendelés (5173 → 3000) esetén a böngésző a jobb oldali számon is válaszol, így a Másolás URL ott is működik. Egy ügynök browser_use hívása bármelyikre navigálhat. Az A térben futó szerver soha nem jelenik meg localhost:5173 címként a B tér böngészőjében.

A localhost-ot használja, ne egy LAN IP-t és ne a --host kapcsolót. A vendéggépnek saját loopbackje van; az alagút ott az IPv4-en és az IPv6-on is figyel.

Azok az oldalak, amelyek egyszerre sok kapcsolatot nyitnak (tucatnyi erőforrás, egy live reload socket), ugyanazt az alagutat használják. A Böngésző (VM) egyetlen állandó exec folyamatra multiplexeli őket, így a hirtelen lecsapó lekérések nem kapcsolatonként egy-egy új folyamatot indítanak, és nem futnak időtúllépésbe egy üres fehér oldalként.

Egy térben belül az ugyanazon a számon futó Terminál (VM) továbbítása elsőbbséget élvez a gazdagépshell-lel szemben. A tereken átívelve nincs elsőbbség – ezek külön leképezések.

Nyissa meg az adott tér Android fülét. Az emulátor localhost:<port> címe ekkor erre a térre közzétett portra lesz fordítva (adb reverse). Egy emulátor az egész eszközre érvényes: ha a B teret csatlakoztatja, a :5173 átirányul B-re, és az A-é megszűnik. Zárja be a fület, és azok a fordított továbbítások, amelyeket ez az állomás létrehozott, eltávolításra kerülnek.

Az iOS Simulator maga a Mac – itt nincs fordított továbbítás. Egy fizikai iPhone-hoz továbbra is helyi hálózati megosztás kell.

A ⋯ → Megosztás a helyi hálózaton a portot <server-ip>:<random port> címen teszi elérhetővé – hasznos, ha a telefonján akarja megnyitni az oldalt, vagy ha a szerver egy másik gépen fut.

  • A helyi hálózati portot mindig az operációs rendszer osztja ki, soha nem a vendéggép száma, így a kitettség egy szándékos, látható cím, nem pedig kitalálható.
  • Privát (csak loopback) marad, amíg át nem állítja, és a ⋯ → Csak helyi leveszi a hálózatról.

A ⋯ → Böngésződomain beállítása (.test) egy dev-tartományt rendel a porthoz, például myapp.test. A Böngészőn (VM) belül a https://myapp.test ezután érvényes lakat kíséretében tölti be a szervert – hasznos mindenhez, ami másképp viselkedik egy elnevezett originon vagy egy biztonságos kontextusban (sütik, service workerek, OAuth-visszahívások).

  • A tartományoknak .test vagy .localhost végződésűnek kell lenniük – ez a két, fejlesztésre fenntartott TLD, így egy dev-név soha nem fedhet el egy valódi webhelyet.
  • A tartománynevek egyediek a szerveren; a portszámok nem. Két tér egyaránt használhatja az 5173-at, de nem jelenthetik be mindketten a myapp.test nevet.
  • A tanúsítvány egy helyi hitelesítésszolgáltatótól származik, amelyet a szerverén állítanak ki, amikor először szükség van rá. A kulcsai a szerver adatkönyvtára alatt élnek, és soha nem kerülnek be egyetlen vendéggépbe sem; az elszigetelt böngésző pontosan azt az egy kulcsot bízza meg, így a valódi internet felé irányuló TLS továbbra is a szokásos módon érvényesül.
  • A tartománynév csak a Böngészőn (VM) belül oldható fel. A gazdagépen futó saját böngészője helyette a localhost:<port> címet használja.
  • A sima http://myapp.test is működik.

A panel alján lévő Port hozzáadása egy portot még azelőtt leképez, hogy bármi figyelne rajta (illetve attól függetlenül, hogy figyel-e). A kézi továbbítás megtartja a címét, miközben a szervere újraindul – a sor addig nem figyel állapotot mutat, amíg vissza nem tér –, míg az automatikus továbbítások eltűnnek, amikor a portjuk megszűnik. Gazdagépshell esetén más helyi portot is beállíthat.

A portok munkaterület és tér szerint vannak kulcsolva. A hypervisor saját porttérképe a gép indításakor rögzül, így a Terminál (VM) két szűk, a szerver által vezérelt csatornán halad: egy előre létrehozott bejövő sávon a vendéggépbe, amely nem hajlandó olyan portra csatlakozni, amelyen a vendéggép valójában nem figyel, valamint a szerver által a Böngésző (VM) és az Android számára nyitva tartott fordított alagutakon. A gazdagépshell soha nem pásztázza végig az egész gépet. Soha nem jön létre figyelő egyetlen vendéggépen belül sem, amelyet a szerver ne tett volna oda, és minden a terminállal vagy az állomással együtt lebontásra kerül. A tervet az Állomások és elszigetelt környezetek ismerteti; a pontos fenntartott portok és tartományszabályok az állomások referenciájában találhatók.