TMG 2010 и Windows NLB Cluster

По работе нужно реализовать отказоустойчивый межсетевой экран. Выбор пал на связку TMG (aka ISA) + NLB Кластер. В ходе разворачивания столкнулся с двумя ошибками. Запишу тут как их устранить, чтоб в будущем долго не вспоминать.

  1. При запуске "Network Load Balancing Manager" выскакивает ошибка о том, что ноды кластера не доступны (кроме локального), при том, что до установки TMG все работало. Дословно ошибка звучит "Host unreachable"  Тут, думаю, легко догадаться в чем проблема - пропишите на межсетевых экранах правила, которые разрешают любой трафик между нодами кластера.
  2. После решения первой проблемы вы столкнетесь с ошибкой " The RPC server is unavailable on the specified computer. Error connecting to". Для ее устранения нужно сделать две вещи:
    • в консолях конфигурирования TMG зайдите на вкладку "System" и поставьте "RPC Filter" в состояние Disable. Это связанно с тем, что в системных правилах есть правила которые ограничивают RPC-траффик. Консоль NLB связывает ноды через DCOM-протокол, который является подвидом RPC-протокола. Если в системных правилах связанных с RPC не снять галочку "Требовать строго соответствия RPC" (Enforce strict rpc compliance) то DCOM-трафик не будет пропускаться, и тут возникает проблема.. Не во всех системных правилах это можно сделать. Например в системном правиле №22 - возможность присутствует, а вот в правиле №2 - отсутствует.
    • в реестре создайте DWORD (32bit) ключ HKLM\SYSTEM\CurrentControlSet\Control\Lsa\DisableLoopbackCheck со значением 1.

Так же заметил что настройки не всегда моментально применяются. Лучше после этих махинаций перегрузить сервер или подождать некоторое время.

Советую Filtering Mode включить в Single Host. И на всех нодах nlb-кластеров одного сервера установить приоритет одинаковый. Например у вас есть два сервера:
Server1 и Server2. Вы на них делаете два nlb кластера - NLB1 и NLB2. Один nlb-кластер "смотрит" в локальную сеть - NLB1, другой nlb-кластер NLB2 смотрит в DMZ. Итого у вас выходит на первом сервере Server1 есть две ноды, одна принадлежит кластеру NLB1 и имеет интерфейс в локальной сети, вторая нода принадлежит кластеру NLB2 и имеет интерфейс в DMZ. Ставим для этих нод приоритет Handling priority 1. На втором сервере Server2 так же есть две ноды из двух кластеров, им устанавливаем Handling priority 2. Настроив таким образом наши кластера мы избавляемся от ситуации когда пакеты будут выходить из локальной сети через Server1, но возвращаться через Server2 - образуя "петлю", что чревато всяким проблемам в установке tcp-сессии и тд. и тп. То есть наш "кластер" работает не в режиме распределения нагрузки, а в режиме отказоустойчивости. Пока первый сервер доступен - весь трафик будет проходить через него. Как только первый сервер становиться не доступным - весь трафик начинает идти через второй сервер, до тех пор пока первый сервер не станет доступным.

Обязательно "подружите" свои свитчи и роутеры с NLB. У меня все не заработало пока на роутерах cisco не ввел команду:

arp 10.10.10.10 03bf.0a0a.0a0a ARPA

где 03bf - multicast заголовок MAC адреса, остальное 0a0a.0a0a - IP адрес 10.10.10.10 в шестнадцатеричном виде. Естественно у вас будет свой IP-адрес который нужно будет перевести в шестнадцатеричный вид и добавить спереди 03bf.

В результате если вы зайдете на роутер и из него будете пинговать IP-адрес nlb - пинги будут проходить.

Стоит понимать, что мак-адрес, который начинается на 03bf  является multicast мак-адресом.  То есть если какой-то компьютер шлет пакет, который будет проходить через NLB-Кластер, то этот пакет можно словить сниффером на всех компьютерах в локальной сети. То есть ваши коммутаторы будут слать на все порты пакеты у которых мак-адрес начинается с 03bf. Но это можно исправить! Для этого на каждом коммутаторе нужно привязать этот мак-адрес к нужным портам с помощью команды такого вида:

mac address-table static 03bf.0a0a.0a0a vlan 15 interface G0/10

Например:

  • у вас есть три коммутатора CISCO - switch_1, switch_2 и switch_3.
  • Switch_1 подключен к Switch_2 патчкордом который "выходит" из порта F0/23 в Switch_1 и "входит" в порт G0/7 в Switch2.
  • Switch_3 подключен к Switch_2 патчкордом который "выходит" из порта G0/10 в Switch_1 и "входит" в порт G0/8 в Switch2.
  • Две ноды кластера 10.10.10.10 Node1 и Node2 подключены к Switch_2 в порты G0/3 и G0/4, кластер 10.10.10.10 находиться в VLAN 15.

Исходя из примера чтобы ваша сеть не флудилась пакетами, и пакеты шли только на те порты, на которые надо, нужно сделать следующее:

  • На Switch_1 вводим команду: mac address-table static 03bf.0a0a.0a0a vlan 15 interface F0/23
  • На Switch_3 вводим команду: mac address-table static 03bf.0a0a.0a0a vlan 15 interface G0/10
  • На Switch_2 вводим команду: mac address-table static 03bf.0a0a.0a0a vlan 15 interface G0/3 G0/4

То есть мы на каждом коммутаторе "привязали" мултикастный мак-адрес к порту, который находиться на пути следования к нодам кластера.

Понравилось? =) Поделись с друзьями:

Обсудить