Sari la conținut

Redirecționează porturi dintr-un terminal

Un server pe care îl pornești în terminalul unei conversații este publicat doar pentru acel spațiu. Panoul de porturi detectează procesele care ascultă, pornite de această aplicație acolo, le mapează și îți oferă o adresă pentru fiecare loc de unde ai putea vrea să le accesezi. Două spații pot asculta amândouă pe 5173; hărțile lor nu se amestecă niciodată.

Nimic de aici nu deschide mașina: fiecare cale este creată de server, la cerere, și moare odată cu terminalul sau stația.

  1. Deschide Terminal (VM) al conversației sau shell-ul gazdă (într-un spațiu sau pe pagina unui PR).
  2. Pornește-ți serverul — pnpm dev, python -m http.server 8000, orice.
  3. În câteva secunde, pictograma de priză din colțul din dreapta sus al terminalului primește un punct. Dă clic pe ea.

Panoul listează fiecare port care ascultă, împreună cu procesul care îl deține, în forma 3000 → 3000: în stânga portul la care s-a legat procesul, în dreapta portul la care răspunde local (același număr ori de câte ori era liber pe mașina ta). Fiecare rând spune și dacă localhost de pe desktop, Browser (VM) și Android îl pot accesa.

Descoperirea este limitată: un Terminal (VM) este interogat în interiorul acelui invitat; un shell gazdă este interogat din arborele de procese PTY al acelei sesiuni. Alte spații și alte procese de pe Mac-ul tău nu sunt listate.

Porturile noi din acest terminal sunt redirecționate automat. Dezactivează Redirecționează porturile automat din același panou dacă vrei doar pe cele pe care le adaugi tu.

Folosește Copiază URL-ul local de pe rând — http://localhost:3000. Redirecționarea ascultă doar pe loopback, așa că nimic altceva din rețeaua ta nu o poate vedea.

Dacă două spații expun amândouă portul 5173 al invitatului, iar mașina ta ocupă deja 127.0.0.1:5173, al doilea spațiu păstrează 5173 al invitatului și primește un port local efemer. Copiază URL folosește numărul din dreapta.

Pe un shell gazdă, procesul este deja pe mașina ta. Maparea aceluiași port local nu are niciun efect; alegerea unui port local diferit leagă un proxy loopback la cel pe care l-ai ales.

--host (sau legarea la 0.0.0.0) nu face ca un Browser (VM) izolat să poată accesa un server de pe Mac. Invitatul are propriul loopback; serverul plantează un tunel în acel invitat când fila Browser se află în același spațiu.

Deschide browserul izolat în aceeași conversație. Tastează localhost:<left-hand port> — numărul la care s-a legat procesul. O remapare (5173 → 3000) răspunde și la numărul din dreapta în acel browser, așa că și acolo funcționează Copiază URL. browser_use al unui agent poate naviga la oricare dintre ele. Un server din spațiul A nu apare niciodată ca localhost:5173 în browserul spațiului B.

Folosește localhost, nu un IP de LAN și nu --host. Invitatul are propriul loopback; tunelul ascultă acolo atât pe IPv4, cât și pe IPv6.

Paginile care deschid multe conexiuni deodată (zeci de resurse, un socket de reîncărcare live) partajează același tunel. Browser (VM) le multiplexează pe un singur exec persistent, așa că un val de cereri nu înseamnă un proces pornit pentru fiecare conexiune și nu se soldează cu un timeout și o pagină albă.

În interiorul unui spațiu, o redirecționare din Terminal (VM) are prioritate față de un shell gazdă pe același număr. Între spații nu există prioritate — sunt hărți separate.

Deschide fila Android a acelui spațiu. localhost:<port> al emulatorului este apoi inversat către portul publicat al acestui spațiu (adb reverse). Un emulator este global la nivel de dispozitiv: atașarea spațiului B reorientează :5173 către B și o elimină pe cea a lui A. Închide fila și inversările plantate de această stație sunt eliminate.

iOS Simulator este deja Mac-ul — fără inversare. Un iPhone fizic are totuși nevoie de o partajare în LAN.

⋯ → Partajează în rețeaua locală publică portul la <server-ip>:<random port> — util pentru a deschide pagina pe telefon sau când serverul rulează pe altă mașină.

  • Portul LAN este întotdeauna atribuit de sistemul de operare, niciodată numărul invitatului, așa că expunerea este o adresă deliberată și vizibilă, nu una care poate fi ghicită.
  • Rămâne privat (doar loopback) până când îl activezi, iar ⋯ → Doar local îl scoate din nou din rețea.

⋯ → Setează un domeniu de browser (.test) atribuie portului un domeniu de dezvoltare precum myapp.test. În Browser (VM), https://myapp.test îți încarcă apoi serverul cu un lacăt valid — util pentru orice se comportă diferit pe un origin denumit sau într-un context securizat (cookie-uri, service workers, callback-uri OAuth).

  • Domeniile trebuie să se termine cu .test sau .localhost — cele două TLD-uri rezervate pentru dezvoltare, așa că un nume de dezvoltare nu poate umbri niciodată un site real.
  • Numele de domeniu sunt unice pe server; numerele de port nu sunt. Două spații pot folosi amândouă 5173, dar nu pot revendica amândouă myapp.test.
  • Certificatul provine de la o autoritate locală emisă pe serverul tău prima dată când este nevoie de el. Cheile ei stau în directorul de date al serverului și nu intră niciodată într-un invitat; browserul izolat are încredere exact în acea cheie, așa că TLS către internetul real se validează în continuare normal.
  • Domeniul se rezolvă doar în interiorul Browser (VM). Browserul tău de pe gazdă folosește în schimb localhost:<port>.
  • Și http://myapp.test simplu funcționează.

Adaugă port din partea de jos a panoului mapează un port înainte ca ceva să asculte pe el (sau indiferent dacă ascultă). O redirecționare manuală își păstrează adresa în timp ce serverul tău repornește — rândul afișează nu ascultă până când revine — în timp ce redirecționările automate dispar când dispare portul lor. Pe un shell gazdă poți seta și un port local diferit.

Porturile sunt indexate după spațiu de lucru și spațiu. Harta de porturi proprie a hipervizorului este fixată la pornirea unei mașini, așa că un Terminal (VM) călătorește pe două canale înguste controlate de server: o cale de intrare precreată către invitat, care refuză să se conecteze la orice port pe care invitatul nu ascultă de fapt, și tuneluri inverse pe care serverul le ține deschise pentru Browser (VM) și Android. Un shell gazdă nu scanează niciodată toată mașina. Nu se creează niciodată un ascultător în interiorul unui invitat pe care serverul nu l-a pus acolo, iar totul este demolat odată cu terminalul sau stația. Designul este explicat în Stații și medii izolate; porturile rezervate exacte și regulile de domenii se află în referința pentru stații.