Приветствую, уважаемое сообщество!
Возникла следующая проблема, которую с наскока решить не получилось:
Имеется Ubuntu хост с запущенной на нем Windows в VirtualBox.
Адрес сети хоста 192.168.1.1/24 (интерфейс br0). Сеть на VirtualBox поднята в режиме виртуального адаптера хоста: адрес виртуального адаптера 192.168.56.1/24 (интерфейс vboxnet0), адрес непосредственно сетевого адаптера гостевой системы 192.168.56.2/24.
Итого, для того, что бы машина была видна из локальной сети хоста (192.168.1.0/24) для iptables создан ряд правил:
iptables -A INPUT -i br0 -p tcp -m tcp --dport 8081 -j ACCEPT
iptables -A FORWARD -p tcp -m tcp --dport 8081 -j ACCEPT
iptables -A PREROUTING -p tcp -m tcp --dport 8081 -j DNAT --to-destination 192.168.56.2:8081
В результате при обращении по адресу 192.168.1.1:8081 из сети 192.168.1.0/24 все запросы перенаправляются на гостевую систему. Но! Если из самой гостевой системы выполнить запрос на адрес 192.168.1.1:8081, то ответа не последует...
В сети накопал информацию про "Hairpin NAT", но добавление подобного правила проблему не решило:
iptables -t nat -A POSTROUTING -d 192.168.56.2 -p tcp --dport 8081 -j MASQUERADE
Прошу опытных коллег указать верное направление для решения данной проблемы.
P.S.
Про кривизну самого решения знаю, но на гостевой системе запущено очень специфичное ПО, которое требует именно такую схему.
P.P.S.
Про существование NAT в VirtualBox тоже знаю и он работает, но с вышеупомянутым специфичным ПО есть проблемы. Техподдержка производителя ПО грешит на некорректную реализацию NAT от VirtualBox, что, скорее всего, не так, но для исключения данного фактора необходимо перейти на "нативную" реализацию перенаправления трафика.
UPDATE:
Вышеописанное решение, так называемый Hairpin или Reflection NAT, абсолютно рабочее. Но, почему-то, только не в случае с VirtualBox. В систему была дополнительно установлена физическая сетевая карта, на которой была собрана схема аналогичная схеме с гостевой системой на VirtualBox. Были заданы соответствующие правила iptables, настройки сетевых адаптеров и данное решение исправно функционировало в оригинальном окружении, что, в свою очередь, и доказало его состоятельность.