Проблемы асимметричной маршрутизации в LINUX

Проблемы асимметричной маршрутизации в LINUX

Проблемы с асимметричной маршрутизацией сводят меня с ума!

Я пытаюсь построить многосетевой сервер с 3 сетевыми картами. Каждая сетевая карта подключена к 3 разным подсетям:

eth0: подключено к локальной сети, 10.99.72.38; функция: трафик управления
eth1: подключено к локальной сети, 10.99.70.150; функция: трафик пользователя
eth2: подключено к глобальной сети, 10.99.74.85; функция: трафик пользователя

Я использую образ Amazon Linux (Linux 3.14.20-20.44.amzn1.x86_64 x86_64), но могу перейти на CentOS, если это действительно будет иметь значение.

Функциональность, которую я пытаюсь реализовать:

eth0: Управление трафиком

  • адрес: 10.99.72.38
  • Я хочу, чтобы это был «изолированный» интерфейс, принимающий и отвечающий только на адреса в диапазоне 10.0.0.0/8.
  • Думайте об этом как о сетевой карте «ssh только из локальной сети».
  • Можно ответить ТОЛЬКО через eth0
  • Все остальные пункты назначения заблокированы, то есть через этот интерфейс невозможно получить доступ ни к каким другим пунктам назначения.
  • НЕ БУДЕТ использоваться eth1 или eth2 для ответного трафика, поступающего на eth0.

eth1: Пользовательский трафик в/из локальной сети

  • Адрес: 10.99.70.150
  • принимает любой пользовательский трафик из локальной сети в любое место назначения
  • направляет пакеты через eth1 для трафика, предназначенного для 10.xxx
  • направляет пакеты через eth2 для любого другого пункта назначения (маршрут по умолчанию)
  • НЕ будет маршрутизировать входящие пакеты через eth0

eth2: Пользовательский трафик в/из WAN

  • адрес: 10.99.74.85
  • принимает любой пользовательский трафик из eth1 и отправляет пакеты из eth2 в любое место назначения, кроме 10.xxx
  • принимает ответные пакеты на eth2 и направляет через eth1 любой трафик, предназначенный для 10.xxx
  • НЕ будет маршрутизировать входящие пакеты через eth0

Я создал таблицу iproute2 в rt_tables под названием 'mgmt' и добавил правила маршрутизации на основе политик с высоким приоритетом, чтобы попытаться изолировать этот интерфейс, но независимо от того, что я пытаюсь, основная таблица маршрутизации по-прежнему, похоже, вызывается, поскольку eth0 является маршрутом по умолчанию. Проблемы включают в себя:

  • Входящие пакеты с eth1 маршрутизируются через eth0 (мне это не нужно!)
  • Входящие пакеты с eth2, предназначенные для 10.xxx, маршрутизируются через eth0 (мне это не нужно!)
  • Когда я удаляю маршрут eth0 по умолчанию из main, я полностью теряю функциональность eth0, даже при наличии маршрута в таблице mgmt, но eth1 затем отвечает правильно.

Начиная с самого начала, неизмененная таблица маршрутов (route -n):

Destination     Gateway         Genmask         Flags Metric Ref    Use Iface  
0.0.0.0         10.99.72.1      0.0.0.0         UG    0      0        0 eth0  
0.0.0.0         10.99.70.1      0.0.0.0         UG    10001  0        0 eth1  
0.0.0.0         10.99.74.1      0.0.0.0         UG    10002  0        0 eth2  
10.99.70.0      0.0.0.0         255.255.255.0   U     0      0        0 eth1  
10.99.72.0      0.0.0.0         255.255.255.0   U     0      0        0 eth0  
10.99.74.0      0.0.0.0         255.255.255.0   U     0      0        0 eth2  

Неизмененные правила IP:

0:      from all lookup local  
32766:  from all lookup main  
32767:  from all lookup default  

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

решение1

Вам следует избавиться от настройки шлюза по умолчанию для eth0и eth1. Как это сделать, зависит от вашего дистрибутива.

Вам, вероятно, не нужна маршрутизация политик. Я думаю, то, что вам нужно, лучше всего достигается с помощью Netfilter / iptables.

iptables -I INPUT 1 -i eth0 ! -s 10.99.72.0/24 -j DROP
iptables -I FORWARD 1 -i eth0 -j DROP
iptables -I FORWARD 2 -o eth0 -j DROP

iptables -I INPUT 2 -i eth1 ! -s 10.0.0.0/8 -j DROP
iptables -I FORWARD 3 -i eth1 -j ACCEPT

iptables -I INPUT 3 -i eth2 -m conntrack --ctstate NEW -j DROP
iptables -I FORWARD 4 -i eth2 -j ACCEPT

Вероятно, это можно сделать и без Netfilter, но с маршрутизацией политик.

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