Назад | Перейти на главную страницу

Направляйте весь трафик с IP на виртуальную машину

Ситуация: У меня есть выделенный сервер (CentOS 6) с парой виртуальных машин (Cent OS 7 и Windows Server 2012 R2) в Virtual Box. Некоторые приложения работают в Windows и доступны с основного IP-адреса (X.X.105.20) с использованием мод-прокси. Приложение, размещенное на виртуальной машине Linux, должно быть доступно с другого IP-адреса (X.X.109.118) (второй IP-адрес сервера).

Что я пробовал: До сих пор я пробовал использовать переадресацию IP из этот вопрос SF но приложение недоступно.

iptables -t nat -A PREROUTING -p tcp -d X.X.109.118 -j DNAT --to-destination 192.168.56.102
iptables -t nat -A POSTROUTING -p tcp -d 192.168.56.102 -j SNAT --to-source X.X.109.118


iptables -I FORWARD -m state -d 192.168.56.102 --state NEW,RELATED,ESTABLISHED -j ACCEPT

Кстати, приложение доступно из Windows Guest, а также из CentOS Host

Изменить на основе комментария: У меня два домена. Несколько веб-приложений на основе .net работают на сервере Windows с использованием поддоменов одного из доменов. И я использую другое доменное имя для приложения, работающего в Linux. Таким образом, его доступ на основе имени для первого домена (и его поддоменов), который также использует основной IP-адрес. Второй домен Я зарегистрировал на дополнительный IP-адрес X.X.1.118. Пинг тоже в порядке (с использованием IP и доменного имени). Все, что мне нужно, это этот IP-адрес, который мог бы отправлять (и получать) все сообщения виртуальной машине по адресу 192.168.56.102.

Ваше второе правило соответствует 192.168.56.102 как пункт назначения, но POSTROUTING необходимо использовать цепочку для перезаписи места назначения приходящих пакетов (--source) из 192.168.56.102 (ответ).

Измените второе правило на:

iptables -t nat -A POSTROUTING -p tcp -s 192.168.56.102 -j SNAT --to-source X.X.109.118

или

iptables -t nat -A POSTROUTING -p tcp -s 192.168.56.102 -j MASQUERADE

Вы отправляете все пакеты tcp с адресом назначения X.X.109.118 к виртуальной машине Linux, поэтому у вас не может быть веб-сервера, прослушивающего этот адрес на выделенном хосте.

Убедитесь, что apache не прослушивает IP-адрес, который вы пересылаете, чтобы избежать обработки пакетов INPUT цепь.

Или вы можете настроить виртуальный хост на основе имени для домена, но только прослушивать адрес (just this virtualhost listening on X.X.109.118) и удалите правила iptables.

то есть:

<Virtualhost X.X.109.118:443>
[...]
</Virtualhost>