Как на самом деле работают таблицы маршрутизации на основе политик?

Насколько я понимаю, маршрутизация на основе политик в Linux состоит из трех основных компонентов: таблиц маршрутизации, маршрутов и правил. Я следовал многим руководствам, и в каждом из них это кажется правильным, поэтому я создаю таблицу маршрутов, добавляю к ней маршрут, а затем добавляю правило для квалификации трафика для использования этой таблицы.

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

Вот хороший пример из Linux Advanced Routing & Traffic Control HOWTO , в нем есть следующий отрывок (на случай, если ссылка исчезнет):

One created две дополнительные таблицы маршрутизации, скажем, T1 и T2. Они добавляются в / etc / iproute2 / rt_tables. Затем вы настраиваете маршрутизацию в этих таблицах следующим образом:

ip route add $P1_NET dev $IF1 src $IP1 table T1
ip route add default via $P1 table T1
ip route add $P2_NET dev $IF2 src $IP2 table T2
ip route add default via $P2 table T2

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

Затем вы настраиваете основную таблицу маршрутизации. Рекомендуется направлять вещи к непосредственному соседу через интерфейс, подключенный к этому соседу. Обратите внимание на аргументы `src ', они гарантируют, что выбран правильный исходящий IP-адрес.

ip route add $P1_NET dev $IF1 src $IP1
ip route add $P2_NET dev $IF2 src $IP2

Затем, ваши предпочтения для маршрута по умолчанию:

ip route add default via $P1

Затем вы устанавливаете правила маршрутизации. Они фактически выбирают, с какой таблицей маршрутизации маршрутизировать. Вы хотите убедиться, что вы маршрутизируете данный интерфейс, если у вас уже есть соответствующий исходный адрес:

ip rule add from $IP1 table T1
ip rule add from $IP2 table T2

Этот набор команд гарантирует, что все ответы на трафик, поступающий на конкретный интерфейс, будут получены от этого интерфейса.

OK , поэтому я совершенно не Я понимаю, почему после добавления маршрутов в специально созданную новую таблицу маршрутов вы затем идете и добавляете их в основную таблицу маршрутов, какой в ​​этом был смысл, может кто-нибудь объяснить?

7
задан 25 November 2015 в 15:46
1 ответ

На самом деле, я думаю, что путаница возникает из-за того, что в этих инструкциях смешаны две темы:

  • Работа с политикой маршрутизации
  • Настройка стандартной таблицы маршрутизации наилучшим образом

Эти три строки

    ip route add $P1_NET dev $IF1 src $IP1
    ip route add $P2_NET dev $IF2 src $IP2
    ip route add default via $P1

предназначены для обработки трафика, который по какой-либо причине не соответствует вашим маршрутам политики (вы добавляете петлевую проверку на маршрутизаторе, например, и используйте его для управления). Они не являются строго обязательными для работы PBR, но лучше все же иметь их там.

3
ответ дан 2 December 2019 в 23:47

Теги

Похожие вопросы