Открыть брандмауэр Windows для XDebug

Кажется, что это должно быть не просто, поэтому я ненавижу спрашивать. Но я попытался настроить брандмауэр Windows, чтобы XDebug мог без проблем подключаться к PHPStorm на порте 9000.

XDebug включен в Vagrant Box с частным сетевым подключением - так что хост-машина имеет виртуальный сетевой адаптер. Vagrant - 192.168.33.10, а главный компьютер - 192.168.33.1.

При отключенном брандмауэре Windows XDebug подключается к PHPStorm. Но я, очевидно, не хочу оставлять свой брандмауэр.

Итак, я попытался открыть порт в брандмауэре Windows со следующими настройками входящего правила:

  • Общие
    • Включено: проверьте
    • Действие: разрешить подключение
  • Программа и услуги
    • Все программы, соответствующие указанным условиям: Проверено
    • Услуги
      • Применить ко всем программам и службам: Проверено
  • Протоколы и порты
    • Тип протокола: TCP
    • Локальный порт: конкретные порты: 9000
    • Удаленный порт: все порты
  • Область
    • Локальный IP-адрес
      • Любой IP-адрес: отмечен
    • Удаленный IP-адрес
      • Любой IP-адрес: отмечен
  • Advanced
    • Профили
      • Домен: отмечен
      • Закрыто: отмечено
      • Public: checked
    • Типы интерфейсов
      • Все типы интерфейсов: отмечены
    • Обход края: обход края кадра

Но он не работает, чтобы XDebug мог подключаться к шторму PHP. Я также пытался настроить протокол на UDP. И я знаю, что если бы это правило сработало, это было бы чрезмерно открытым (я мог бы затянуть область), но на данный момент я просто хочу, чтобы он работал, прежде чем затягивать его.

Ответ 1

Существует проблема с виртуальным интерфейсом сети Virtualbox, поскольку это интерфейс loopback, и Windows управляет им разным способом.

Простой способ решить это - открыть 'regedit'. Найдите "HKLM:\system\CurrentControlSet\control\class {4D36E972-E325-11CE-BFC1-08002BE10318}". Существует много интерфейсов. Просто посмотрите один из названных "VirtualBox Host-Only Ethernet Adapter". Затем добавьте новый ключ DWORD (32) с именем '* NdisDeviceType' и значением '1' (hex). Reboot.

Я не знаю, нужно ли добавлять стандартные правила fw, такие как хост-порт 9000, для всех, поскольку я уже это сделал.

Подробнее об этом - http://brianreiter.org/2010/09/18/fix-virtualbox-host-only-network-adapter-creates-a-virtual-public-network-connection-that-causes-windows-to-disable-services/

Ответ 2

Самый простой подход, который я нашел: брандмауэр Windows Advanced (где вы добавляете/удаляете правила) → щелчок правой кнопкой мыши → Свойства (другое место для включения/выключения локального/доменного/публичного брандмауэра)

Каждая из трех областей (локальная/доменная/общедоступная) имеет параметр, позволяющий полностью исключить обработку межсетевым экраном для определенных сетевых интерфейсов (!)

Включите брандмауэр Windows для любого сетевого интерфейса VMware/Virtualbox. (если вам не требуется это против вашей виртуальной машины)

Это позволит любое соединение от вашего гостя, к вашей хост-машине.

Ответ 3

В общем, проще не указывать правила в терминах протоколов или диапазонов портов. Скорее, просто пусть исполняемый файл программы имеет исключение брандмауэра для всего. Поэтому вместо создания правила для порта 9000 просто создайте правило для "xdebug.exe", но не ограничивайте его только портом 9000.

Панель управления- > Брандмауэр Windows → нажмите "Разрешить приложение или функцию через брандмауэр Windows", а затем добавьте xdebug.exe(или что бы ни было исполняемое имя). Это добавит новый набор входящих правил (один для UDP и другой для TCP). Вернитесь на страницу расширенных настроек, найдите новые входящие правила, которые были созданы, и проверите каждый, чтобы проверить, установлены ли флажки "Область" (private, domain, public).

Есть способ включить ведение журнала брандмауэра, чтобы вы могли обнаружить, что блокируется при включенном брандмауэре. Затем вы можете добавить соответствующие правила.

http://technet.microsoft.com/en-us/library/cc787462(v=ws.10).aspx

Ответ 4

Если у вас есть адаптер NAT на вашем поле в дополнение к виртуальному адаптеру, вы можете изменить конфигурацию xdebug в параметре php.ini xdebug.remote_host на IP-адрес физического интерфейса на вашем компьютере. Самый простой способ узнать - попробовать установить telnet на 9000 портов.