Пробросить порты из терминала
Сервер, который вы запускаете в терминале разговора, публикуется только для этого пространства. Панель портов замечает слушателей, запущенных этим приложением там, сопоставляет их и выдаёт вам адрес для каждого места, откуда вы, возможно, захотите к ним обратиться. Два пространства могут одновременно слушать 5173; их карты никогда не смешиваются.
Здесь ничто не открывает машину наружу: каждый путь создаётся сервером по запросу и умирает вместе с терминалом или rig.
Посмотреть, что слушает
Заголовок раздела «Посмотреть, что слушает»- Откройте Терминал (VM) разговора или хост-оболочку (в пространстве или на странице PR).
- Запустите свой сервер —
pnpm dev,python -m http.server 8000, что угодно. - Через несколько секунд у значка вилки в правом верхнем углу терминала появится точка. Нажмите на него.
Панель перечисляет каждый слушающий порт вместе с владеющим им процессом в виде
3000 → 3000: слева — порт, который занял процесс, справа — порт, на котором он
отвечает локально (тот же номер, если он был свободен на вашей машине). В каждой
строке также сказано, могут ли до него добраться localhost в настольном
приложении, Браузер (VM) и Android.
Обнаружение ограничено: Терминал (VM) опрашивается внутри этого гостя; хост-оболочка опрашивается из дерева процессов PTY этой сессии. Другие пространства и другие процессы на вашем Mac не перечисляются.
Новые порты в этом терминале пробрасываются автоматически. Отключите Автопроброс портов на той же панели, если хотите оставить только те, что добавляете сами.
Доберитесь до него с этого компьютера
Заголовок раздела «Доберитесь до него с этого компьютера»Используйте Скопировать локальный URL в строке — http://localhost:3000.
Проброс слушает только loopback, поэтому больше ничего в вашей сети его не видит.
Если два пространства оба открывают гостевой 5173, а ваша машина уже держит
127.0.0.1:5173, второе пространство сохраняет гостевой 5173 и получает
эфемерный локальный порт. Копирование URL берёт правый номер.
В хост-оболочке процесс уже находится на вашей машине. Сопоставление того же локального порта ничего не меняет; выбор другого локального порта привязывает loopback-прокси к выбранному вами.
--host (или привязка к 0.0.0.0) не даёт изолированному Браузеру (VM)
добраться до сервера на Mac. У гостя собственный loopback; сервер пробивает
туннель в этого гостя, когда вкладка браузера находится в том же
пространстве.
Доберитесь до него из Браузера (VM)
Заголовок раздела «Доберитесь до него из Браузера (VM)»Откройте изолированный браузер в том же разговоре. Введите
localhost:<left-hand port> — номер, который занял процесс. Переназначение
(5173 → 3000) тоже отвечает по правому номеру в этом браузере, поэтому
копирование URL работает и там. browser_use агента может перейти по любому из
них. Сервер в пространстве A никогда не появляется как localhost:5173 в
браузере пространства B.
Используйте localhost, а не IP в локальной сети и не --host. У гостя
собственный loopback; туннель слушает там и по IPv4, и по IPv6.
Страницы, которые открывают много соединений сразу (десятки ресурсов, сокет живой перезагрузки), используют тот же туннель. Браузер (VM) мультиплексирует их в один постоянный exec, поэтому всплеск запросов — это не запуск отдельного процесса на каждое соединение и он не заканчивается тайм-аутом в виде белой страницы.
Внутри одного пространства проброс из Терминала (VM) имеет приоритет над хост-оболочкой на том же номере. Между пространствами приоритета нет — это отдельные карты.
Доберитесь до него с Android
Заголовок раздела «Доберитесь до него с Android»Откройте вкладку Android этого пространства. Тогда localhost:<port>
эмулятора перенаправляется обратно на опубликованный порт этого пространства
(adb reverse). Эмулятор один на всё устройство: подключение пространства B
перенацеливает :5173 на B и сбрасывает reverse пространства A. Закройте
вкладку, и reverse-перенаправления, созданные этим rig, будут удалены.
iOS Simulator и так является Mac — reverse не нужен. Физическому iPhone по-прежнему нужен общий доступ в локальной сети.
Поделитесь им в своей сети
Заголовок раздела «Поделитесь им в своей сети»⋯ → Открыть в локальной сети публикует порт по адресу
<server-ip>:<random port> — удобно, чтобы открыть страницу на телефоне, или
когда сервер работает на другой машине.
- Порт в локальной сети всегда назначает ОС, а не гостевой номер, поэтому доступ — это намеренный, видимый адрес, а не тот, который можно угадать.
- Он остаётся приватным (только loopback), пока вы его не переключите, а ⋯ → Только локально убирает его из сети обратно.
Дайте ему имя — с HTTPS
Заголовок раздела «Дайте ему имя — с HTTPS»⋯ → Задать домен браузера (.test) назначает порту dev-домен, например
myapp.test. Внутри Браузера (VM) https://myapp.test тогда загружает ваш
сервер с действительным замком — это полезно для всего, что ведёт себя иначе
на именованном origin или в защищённом контексте (куки, service workers,
callback-и OAuth).
- Домены должны заканчиваться на
.testили.localhost— это два TLD, зарезервированных для разработки, поэтому dev-имя никогда не перекроет реальный сайт. - Доменные имена уникальны на сервере; номера портов — нет. Два
пространства могут оба использовать
5173, но не могут оба занятьmyapp.test. - Сертификат выдаёт локальный удостоверяющий центр, созданный на вашем сервере при первой необходимости. Его ключи лежат в каталоге данных сервера и никогда не попадают ни в одного гостя; изолированный браузер доверяет ровно этому одному ключу, поэтому TLS к реальному интернету по-прежнему проверяется как обычно.
- Домен разрешается только внутри Браузера (VM). Ваш собственный браузер на
хосте вместо этого использует
localhost:<port>. - Обычный
http://myapp.testтоже работает.
Пробросьте порт вручную
Заголовок раздела «Пробросьте порт вручную»Добавить порт внизу панели сопоставляет порт заранее (или независимо от того, слушает ли его что-нибудь). Ручной проброс сохраняет свой адрес, пока ваш сервер перезапускается — в строке отображается не слушает, пока он не вернётся, — тогда как автопробросы исчезают вместе со своим портом. В хост-оболочке можно также задать другой локальный порт.
Как сохраняется изоляция
Заголовок раздела «Как сохраняется изоляция»Порты привязаны к рабочему пространству и пространству. Собственная карта портов гипервизора фиксируется при загрузке машины, поэтому Терминал (VM) едет по двум узким каналам, которыми управляет сервер: один заранее созданный входящий путь в гостя, который отказывается подключаться к любому порту, который гость на самом деле не слушает, и обратные туннели, которые сервер держит открытыми для Браузера (VM) и Android. Хост-оболочка никогда не сканирует всю машину. Внутри гостя никогда не создаётся слушатель, которого туда не поместил сервер, и всё сносится вместе с терминалом или rig. Устройство объясняется в разделе Rigs и изолированные среды; точные зарезервированные порты и правила доменов — в справочнике по rig.
См. также
Заголовок раздела «См. также»- Дать агенту машину для тестов — открытие, наблюдение и перехват rig
- Справочник по rig — зарезервированные порты, dev-TLD, значения по умолчанию