У меня есть настройка, в которой я маршрутизирую сотни на потенциально тысячи веб-сайтов с поддержкой SSL через один виртуальный IP-адрес, который выполняет разгрузку SSL и балансировку нагрузки. Благодаря конструкции самого SSL, мне нужно, чтобы каждый «хост SSL» прослушивал уникальный порт и / или IP-адрес; Чтобы упростить настройку VIP, я просто назначаю каждый сертификат другому порту на том же VIP.
Внешне я хочу, чтобы на каждом IP-адресе открывались порты 80 и 443. Внутри я хочу, чтобы каждый внешний порт 80 отображался на порт 80 внутреннего хоста (с использованием стандартных виртуальных хостов HTTP для различения), тогда как каждый порт 443 отображался на определенный внутренний порт. Так, например:
External IP External Port Internal IP Internal Port
1.2.3.1 80 10.0.0.5 80
1.2.3.1 443 10.0.0.5 20001
1.2.3.2 80 10.0.0.5 80
1.2.3.2 443 10.0.0.5 20002
1.2.3.3 80 10.0.0.5 80
1.2.3.3 443 10.0.0.5 20003
Реализовать это с помощью ASA было выполнимо, но болезненно. Сопоставление каждого внешнего IP-адреса с тем же портом требует использования уникального ACL для каждого внешнего хоста, даже если сам ACL идентичен. Мне удалось добиться этого только с помощью комбинации традиционных статических сопоставлений и статических сопоставлений на основе ACL, например:
object-group service webapp_ports tcp
port-object eq www
port-object eq https
object-group network webapp_hosts
network-object host 1.2.3.1
network-object host 1.2.3.2
network-object host 1.2.3.3
access-list policy_nat_http_site1 extended permit tcp host 10.0.0.5 eq www any
access-list policy_nat_http_site2 extended permit tcp host 10.0.0.5 eq www any
access-list policy_nat_http_site3 extended permit tcp host 10.0.0.5 eq www any
access-list acl_outside extended permit tcp any object-group webapp_hosts object-group webapp_ports
static (inside,outside) tcp 1.2.3.1 www access-list policy_nat_http_site1
static (inside,outside) tcp 1.2.3.2 www access-list policy_nat_http_site2
static (inside,outside) tcp 1.2.3.3 www access-list policy_nat_http_site3
static (inside,outside) tcp 1.2.3.1 https 10.0.0.5 20001 netmask 255.255.255.255
static (inside,outside) tcp 1.2.3.2 https 10.0.0.5 20002 netmask 255.255.255.255
static (inside,outside) tcp 1.2.3.3 https 10.0.0.5 20003 netmask 255.255.255.255
access-group acl_outside in interface outside
Хотя это работает, я недоволен настройкой, потому что она требует слишком много возни каждый раз, когда мне нужно добавить нового клиента - добавление нового IP-адреса в объектную группу, новый список доступа и еще две записи в статические отображения. Есть ли лучший способ справиться с этим? Я контролирую весь сетевой стек, поэтому возможны изменения в дизайне сети, если это наиболее целесообразно.
Мне кажется, я не могу придумать лучшего способа, кроме как поместить их всех в DMZ за ASA с общедоступными IP-адресами, назначенными каждому из них (или сделать одно или одно сопоставление, если вы предпочитаете это). Попробуйте попросить вашего интернет-провайдера предоставить больше общедоступных IP-адресов. Сожалею.