Всегда пересылать трафик.

( Это оригинальный вопрос, но мое возможное решение слишком отличалось от того, как я изначально задал вопрос, поэтому я отправляю его как новый вопрос.)

Задний план:

У меня есть виртуальная машина с тремя различными интерфейсами: Management (eth0), Production (eth1) и Backup (eth2). Управление предназначено для трафика RDP и SSH. Производство предназначено для большей части трафика. Резервное копирование предназначено для связи с службами резервного копирования, все в одной подсети. Каждая сеть ограничена своей собственной целью, и любой трафик, который выглядит так, как он должен переноситься одной из других сетей, будет удален (например, tcp/22 удаляется в производственной сети).

Проблема:

SSH-трафик поступает на сервер в порт управления, но выходит из интерфейса Production:

Выход syslog из -j LOG показывает выходной интерфейс eth1 (production)

Это приводит к тому, что трафик будет удален, так как пакеты будут выведены в производственную сеть tcp/22 .

Если я изменю маршрут по умолчанию, чтобы указать на шлюз управления, пакеты выходят из правильного интерфейса, поэтому ssh работает, но затем весь производственный трафик перестает работать. Я могу оставить маршрут по умолчанию, указывающий на PROD, и он будет работать до тех пор, пока я подключусь к машине в той же подсети.

Мне нужно, чтобы ядро ​​устанавливало шлюз по умолчанию в зависимости от того, на каком интерфейсе был создан трафик.

Любая расширенная маршрутизация, такая как установка нескольких шлюзов по умолчанию, будет включать в себя маршрутизацию на основе политик .

Существует несколько решений, которые были отправлены для пересылки на основе пакетов маркировки, предназначенных для определенного порта, но решение, которое я нашел на клиентском портале Red Hat, оказалось намного проще и, вероятно, будет более широко применяться.

Добавление в /etc/rc.local :

  1. Настройте альтернативную таблицу маршрутизации , я назвал мой 2 .

    / sbin / ip route добавить таблицу 2 по умолчанию через <management-gateway>

  2. Установите трафик с IP-адреса управления, чтобы использовать альтернативную таблицу маршрутизации с набором шлюзов управления.

    / sbin / ip добавить из <management-IP-address> таблицу 2

Вышеупомянутое работает, оставив мой основной шлюз (в таблице маршрутизации по умолчанию), указывая на производство (eth1). Шлюз на шаге 2 будет выбран для любого трафика, исходящего из IP-адреса, связанного с eth0.

В моем конкретном случае резервная сеть не чувствительна к настройке шлюза, поскольку весь трафик находится в одной подсети. Если в резервной сети было несколько подсетей, я мог бы настроить третью таблицу маршрутизации и добавить аналогичное ip rule add для этого.

Без маршрутизации, основанной на политике, ядро ​​будет обращаться к таблице маршрутизации по умолчанию, чтобы определить интерфейс для вытеснения трафика. Это означает, что правильный интерфейс будет выбран, если другой узел находится в той же подсети, что и один из подключенных интерфейсов, иначе трафик будет отправлен по маршруту по умолчанию. Такое поведение не будет видно, если сеть продолжит маршрутизацию пакета, несмотря на выход из «неправильного» интерфейса, но в моем случае это привело к отбрасыванию трафика.

После выполнения маршрутизации на основе политик, как производство, так и управление / SSH-трафик начали функционировать, как ожидалось.