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

Веб-сервер за NAT, как прослушивать общедоступный IP-адрес

У меня есть веб-сервер 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).

Вот некоторые вещи, которые вы могли бы сделать:

  • NAT целевые порты на каждом внешнем IP-адресе к другому набору портов на внутреннем IP-адресе. Например, NAT 192.0.2.1:80 и 192.0.2.1:443 до 198.51.100.1:80 и 198.51.100.1:443, а затем NAT 192.0.2.2:80 и 192.0.2.2:443 до 198.51.100.1:81 и 198.51. .100.1: 444. Настройте веб-сервер для прослушивания дифференцированных портов для соответствующих служб. Обязательно выберите порты, которые больше не используются, и проверьте настройки брандмауэра.
  • Выделите дополнительные внутренние IP-адреса веб-серверу. Например, выделите веб-сервер 198.51.100.1 и 198.51.100.2. NAT соответствующие пары внешнего IP / порта к соответствующим парам внутреннего IP / порта (например, 192.0.2.1 - 198.51.100.1 и 192.0.2.2 - 198.51.100.2). Укажите nginx для привязки соответствующих служб к соответствующим внутренним IP-адресам.

Если вы выберете последнее решение, ваша среда будет проще и более совместимой со стандартами, потому что вы не будете иметь дело с необычными номерами портов и трансляцией портов, но вам нужно будет выделить несколько внутренних 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, и это поддерживается большинством современных клиентов, но не всеми.