Введение
Настраиваю бездисковую загрузку виртуальных машин Hyper-V, в частности Windows-сервер. Диск должен подцепляться загрузчиком по ISCSI, затем подключение передается в Windows и Windows загружается. Устанавливается Windows тем же способом – сначала загрузчик подключается к iSCSI диску, затем происходит загрузка с DVD и винда устанавливается обычным образом. При первых тестах, когда iSCSI-таргет работал на Windows-server, доступ производился по общей сети с нормальным DHCP и публичными IP-адресами. Всё работало.
Проблема
Проблема получилась, когда стал настраивать Linux-storage и отдельную транспортную сеть для iSCSI. iPXE подключается к iSCSI-диску, говорит что всё отлично, установщик Windows загружается и диска не видит.
Причина
Причина оказалась в том, что iSCSI-инициатор, который используется при загрузке (и видимо при установке Windows) ВСЕГДА отправляет пакеты на шлюз по умолчанию, даже если диск находится в той же подсети. Транспортная сеть одноранговая, маршрутизаторов в ней нет и настроек таких DHCP не раздавал. Если бы в сети был шлюз, то весь iSCSI-трафик пошел бы через этот шлюз, а не напрямую к серверу с дисками (нагрузка на сеть увеличивается вдвое, увеличиваются задержки и собственно причина совершенно неочевидна).
Решение
В качестве шлюза по умолчанию назначается IP-адрес сервера, на котором лежат диски, тогда пакеты идут сразу куда нужно, винда видит диск, спокойно на него ставится и с него загружается.