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

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

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

Устройства на одной стороне моего моста не подключаются к Интернету через 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. Ядро видит пакет и пересылает его на другую сторону моста на шлюз по умолчанию этого хоста.
  3. Site_A (содержащий шлюз по умолчанию основной сети) видит, что пакет предназначен для хоста, о котором он не знает, поэтому он отправляет его на свой шлюз по умолчанию (мост Linux, поскольку он связан с Интернетом).
  4. Ядро говорит: «Эй, я тебя уже видел» и поэтому не выполняет SNAT-преобразование пакета, а отправляет его в Интернет, где он помещается в черную дыру.

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

  1. TCPDUMP на сетевом адаптере, подключенном к Интернету, показывает, что пакет покидает интерфейс с частным адресом в качестве источника.

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

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

решение1

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

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

Связанный контент