Назад |
Перейти на главную страницу
Мост и iptables конфликт SNAT
Я работаю над настройкой здесь, и она работает с одним незначительным исключением.
Устройства на одной стороне моего моста не подключаются к Интернету по протоколу SNAT.
Схема / Обзор:
Primary_Network (Site_A)
|
|
Internet ------- Linux_Bridge_GW (GW)
|
|
Secondary/CoLo Site (Site_B)
Вот установка:
- Site_A имеет все производственные серверы и рабочие станции.
- Site_B имеет набор серверов, на которые мы хотели бы переключиться, а также обслуживать наши интернет-сервисы.
- GW имеет два интерфейса, которые являются транковыми и передают соответствующий трафик VLAN (разрешают распространение трафика уровня 2 между сайтами) // все это работает отлично.
- Возникающая проблема заключается в том, что хосты из Site_B имеют свой GW по умолчанию в Site_A (та же подсеть). GW не имеет IP-адресов в VLAN, которые передаются.
- Все хосты Site_A могут без проблем выходить в Интернет.
- GW имеет адреса в подсети, предназначенные ТОЛЬКО для трафика, предназначенного для Интернета. (Это было сделано для того, чтобы Websense не анализировал ненужный трафик. Мы используем эту VLAN в качестве источника порта монитора на коммутаторе, на котором находится Websense).
Я думаю, что происходит:
- Пакет / фрейм поступает на Physdev на Site_B, предназначенный для Интернета.
- Ядро видит пакет и пересылает его с другой стороны моста на GW этого хоста по умолчанию.
- Site_A (содержащий Default-GW базовой сети) видит, что пакет предназначен для хоста, о котором он не знает, поэтому он отправляет его на свой GW по умолчанию (мост Linux, поскольку он связан с Интернетом).
- Ядро говорит: «Привет, я видел вас раньше», и поэтому не выполняет SNAT для пакета и отправляет его в Интернет, где он заблокирован.
Почему я думаю, что это происходит:
- Tcpdump в Интернете, обращенный к сетевой карте, показывает, что пакет покидает интерфейс с частным адресом в качестве источника.
Что бы я хотел:
- Получите пакет SNAT'd.
- Что-то вроде ниже было бы круто
- пакет приходит с Site_B
- ядро видит, что пакет НЕ предназначен ни для себя, ни для какого-либо частного адреса
- Ядро говорит: «Хорошо, раз вы предназначены для Интернета, я собираюсь отправить вам этот интерфейс, а не перенаправить вас на ваш обычный GW по умолчанию, который там WAAAY».
- пакет поступает из Интернета и отправляется соответствующему физическому устройству моста в зависимости от того, на каком сайте находится хост, для которого он предназначен.
если пакеты передаются по мосту, конечно, iptables никогда их не увидит.
Решение? используйте ebtables для перенаправления пакетов, привязанных к Интернету, на машину, чтобы они получали обработку SNAT (я бы использовал -j REDIRECT для изменения MAC)