У меня есть веб-сервер debian (nginx), работающий за брандмауэром с использованием NAT. На веб-сервере размещено несколько сайтов, для которых требуется SSL и собственный IP-адрес. Я бы хотел, чтобы сайты SSL слушали только свой конкретный IP-адрес, а общие сайты слушали только общий IP.
Прямо сейчас я слушаю подстановочный знак * для всех доменов, что, как я предполагаю, означает, что он прослушивает один адрес локальной сети и обслуживает контент сайта на основе имени хоста, а не IP-адреса. Я бы хотел это исправить.
Как правильно поступить? Должен ли он создать NAT 1: 1 для каждого IP-адреса и добавить IP-адреса LAN к сетевому интерфейсу для прослушивания, а затем назначить IP-адреса LAN для определенных доменов? Или есть способ лучше? Есть ли способ передать общедоступный IP-адрес и принять меры на его основе? Спасибо.
Нет, вы не можете пройти через исходный IP-адрес назначения после выполнения NAT, по крайней мере, напрямую.
Я буду использовать 192.0.2.0/24 в качестве внешнего IP-блока и 198.51.100.0/24 в качестве внутреннего (см. RFC5737).
Вот некоторые вещи, которые вы могли бы сделать:
Если вы выберете последнее решение, ваша среда будет проще и более совместимой со стандартами, потому что вы не будете иметь дело с необычными номерами портов и трансляцией портов, но вам нужно будет выделить несколько внутренних IP-адресов каждому веб-серверу (я так понимаю, у вас есть только один). Кроме того, если вы используете последнее решение, вы можете использовать NAT 1: 1.
Тем не менее, если у вас вообще нет причин помещать веб-сервер за NAT (NAT не является брандмауэром), просто слушайте внешние IP-адреса (для этого также потребуется изменение топологии).
Похоже, вам нужен другой публичный IP-адрес для каждого из сайтов. Это означает, что брандмауэр должен предоставлять различные общедоступные IP-адреса. Затем брандмауэр может перенаправить запросы на разные IP-адреса на сервер nginx или может перенаправить эти запросы на разные порты на одном и том же IP-адресе. Затем вы можете получить соответствующий ответ от сервера nginx.
То, как вы это настраиваете, зависит от вашего брандмауэра. Например, используя iptables, вы можете сделать что-то вроде этого в скрипте:
KINCAID=192.168.1.112
EXTIPJMN=50.60.70.80
iptables -t nat -A PREROUTING -d $EXTIPJMN -p tcp -i $EXT --dport 8081 -j DNAT --to-destination $KINCAID:8080
Это направит запросы, поступающие на IP-адрес EXTIPJMN (50.60.70.80) и порт 8081, на ваш внутренний сервер по IP-адресу KINCAID (192.168.1.112) и порту 8080
Можно обслуживать разные сайты с одного IP-адреса даже через https, и это поддерживается большинством современных клиентов, но не всеми.