Как сделать, чтобы nginx отображал реальный IP клиента на гостевой машине за NAT?
Добрый день. Развернул ISPConfig на гостевой машине с nginx в качестве сервера. На хостовой машине пробросил порты, так что теперь сайты на гостевой машине доступны по внешнему IP. Направил нужные мне домены на внешний IP.
Но в логах NGINX я вижу IP адрес хостовой машины в локальной подсети. Как сделать, чтобы отображался реальный IP клиента?
Вариант с обратным прокси NGINX на хостовой машине не подходит, так как хочу управлять SSL сертификатами через панель управления ISPConfig.
Причину я понял - это из-за моего правила в iptables на хостовой машине
DNAT tcp -- any any 192.168.122.0/24 внешнийIP to:IPГостевойМашины
Этим правилом я пытался создать универсально для сайтов на всех гостевых машинах доступ к самим себе по внешнему IP. Без этого правила хостовая машина думает, что эти пакеты предназначаются ей и пытается сама их обработать.
Не знаете как исправить проблему, чтобы сайты с гостевой машины по запросы к самим себе проходили во внешку или хотя бы перенаправлялись обратно на виртуальную машину?
Как сделать, чтобы отображался реальный IP клиента?
0) убедиться, что на хосте он виден
1.1) перенастроить NAT на DNAT (но возможно ли такое при используемой системе виртуализации — хз)
1.2) таки поставить nginx на хост, но пробрасывать через stream и proxy-протокол, а не через http
Виден. В логах iptables на хостовой машине, я вижу реальный IP клиента. И правило DNAT должно менять только получателя пакета. Но складывается впечатление, что поменялся и sourceIP.
1.1) перенастроить NAT на DNAT (но возможно ли такое при используемой системе виртуализации — хз)
Тут тоже не знаю. Не понимаю разницы, не натыкался нигде на статьи с таким вариантом настройки доступности виртуальной машины.
1.2) таки поставить nginx на хост, но пробрасывать через stream и proxy-протокол, а не через http
Ну теперь уже как крайний вариант. А то дофига уже настроил, без NGINX
Дмитрий Дев, вероятно система виртуализации по другому не умеет и нужно использовать bridge чтобы вывести виртуалку в сеть хоста и указывать уже её адрес
иначе без использования nginx или другого прокси, могущего пробрасывать адреса не выйдет