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

Мост и iptables конфликт SNAT

Я работаю над настройкой здесь, и она работает с одним незначительным исключением.

Устройства на одной стороне моего моста не подключаются к Интернету по протоколу SNAT.


Схема / Обзор:

                Primary_Network (Site_A)
                        |
                        |
Internet ------- Linux_Bridge_GW (GW)
                        |
                        |
                 Secondary/CoLo Site (Site_B)

Вот установка:

  1. Site_A имеет все производственные серверы и рабочие станции.
  2. Site_B имеет набор серверов, на которые мы хотели бы переключиться, а также обслуживать наши интернет-сервисы.
  3. GW имеет два интерфейса, которые являются транковыми и передают соответствующий трафик VLAN (разрешают распространение трафика уровня 2 между сайтами) // все это работает отлично.
  4. Возникающая проблема заключается в том, что хосты из Site_B имеют свой GW по умолчанию в Site_A (та же подсеть). GW не имеет IP-адресов в VLAN, которые передаются.
  5. Все хосты Site_A могут без проблем выходить в Интернет.
  6. GW имеет адреса в подсети, предназначенные ТОЛЬКО для трафика, предназначенного для Интернета. (Это было сделано для того, чтобы Websense не анализировал ненужный трафик. Мы используем эту VLAN в качестве источника порта монитора на коммутаторе, на котором находится Websense).

Я думаю, что происходит:

  1. Пакет / фрейм поступает на Physdev на Site_B, предназначенный для Интернета.
  2. Ядро видит пакет и пересылает его с другой стороны моста на GW этого хоста по умолчанию.
  3. Site_A (содержащий Default-GW базовой сети) видит, что пакет предназначен для хоста, о котором он не знает, поэтому он отправляет его на свой GW по умолчанию (мост Linux, поскольку он связан с Интернетом).
  4. Ядро говорит: «Привет, я видел вас раньше», и поэтому не выполняет SNAT для пакета и отправляет его в Интернет, где он заблокирован.

Почему я думаю, что это происходит:

  1. Tcpdump в Интернете, обращенный к сетевой карте, показывает, что пакет покидает интерфейс с частным адресом в качестве источника.

Что бы я хотел:

  1. Получите пакет SNAT'd.
  2. Что-то вроде ниже было бы круто
    • пакет приходит с Site_B
    • ядро видит, что пакет НЕ предназначен ни для себя, ни для какого-либо частного адреса
    • Ядро говорит: «Хорошо, раз вы предназначены для Интернета, я собираюсь отправить вам этот интерфейс, а не перенаправить вас на ваш обычный GW по умолчанию, который там WAAAY».
    • пакет поступает из Интернета и отправляется соответствующему физическому устройству моста в зависимости от того, на каком сайте находится хост, для которого он предназначен.

если пакеты передаются по мосту, конечно, iptables никогда их не увидит.

Решение? используйте ebtables для перенаправления пакетов, привязанных к Интернету, на машину, чтобы они получали обработку SNAT (я бы использовал -j REDIRECT для изменения MAC)