Это заняло у меня целый день, поэтому я подумал, что запишу это здесь!
У меня есть хост LibVirt с NAT вместо моста для размещенных виртуальных машин с использованием правил IPTables по умолчанию, созданных LibVirt при установке. Я мог бы установить ОС с виртуального компакт-диска, а затем получить полное подключение к Интернету, но из-за более сложной природы TFTP* для загрузки PXE маскировка не передавала ответы TFTP обратно виртуальным машинам.
Я мог видеть следующую последовательность пакетов из различных экземпляров tcpdump:
На этом этапе больше ничего не произошло, и время ожидания клиента tftp виртуальной машины истекло.
Я пробовал использовать модули ядра ip_conntrack_tftp / nf_conntrack_tftp и ip_nat_tftp / nf_nat_tftp, но это не помогло.
* Хотя первоначальный запрос от клиента к серверу находится на udp / 69, ответ от сервера к клиенту исходит из псевдослучайного эфемерного порта.
У меня была та же проблема, что и у вас, и я нашел ваш пост.
На моей стороне загрузка nf_nat_tftp
на хосте Libvirt было достаточно, чтобы все заработало. Спасибо за подсказку!
Наконец я нашел статья о VMWare у которого была аналогичная проблема, и он попытался переключить тип сетевого интерфейса в LibVirt с virtio на e1000. Мгновенный успех!