Собираем NLB на двух сетевых картах в одной сети

Недавно сталкивался с одной проблемой, связанной с недоконфигурацией NLB. Исходные данные: каждый сервер имеет два сетевых адаптера, помещённых в одну подсеть/вилан. Один из сетевых адаптеров используется для обработки клиентского трафика, второй для коммуникации между узлами NLB-кластера. На базе второго адаптера строится NLB-кластер, дефолтный шлюз прописан, соответственно, на адаптере для обработки клиентского траффика. Примерная схема может выглядеть так:

nlb-2nic

В этой схеме, начиная с Windows Server 2008 мы будем иметь следующее:

  • связь с кластерным ip-адресом из той же сети, где расположены узлы NLB, будет работать без каких-либо проблем
  • связь с кластерным ip-адресов из внешней сети (клиент обращается через маршрутизатор) будет отсутствовать
  • если мы переносим дефолтный шлюз с клиентского адаптера на кластерный, то связь с кластерным ip-адресом появляется

Внешний клиент пытается попасть на кластерный адаптер, но так как шлюза на нём не прописано, то пакет отбрасывается. Связано это с тем, что IP forwarding, включенный по умолчанию в Windows 2003 Server, позволявший отвечать клиенту через дефолтный шлюз, начиная с Windows Server 2008 выключен по умолчанию. А раз он выключен, то надо его включить. Например через netsh:

netsh interface ipv4 set interface "Cluster NIC" forwarding=enabled

или сразу через ключ в реестре:

Key name: HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters
Value Name: IpEnableRouter
Data Type: REG_DWORD
Value: 1

Полезные ссылки:
Balancing Act: Dual-NIC Configuration with Windows Server 2008 NLB Clusters

2 thoughts on “Собираем NLB на двух сетевых картах в одной сети

Leave a Reply

Your email address will not be published. Required fields are marked *