У меня есть сеть с 2 маршрутизаторами (B и C), обслуживающими 1 клиента каждый, и маршрутизатором (A), который управляет некоторыми задачами базовой сети.
При обычном доступе Inte rnet от клиента маршрутизатора B (красные стрелки) пакет отправляется на маршрутизатор B, который затем достигает маршрутизатора A. Маршрутизатор A выполняет NAT и после получения ответ с помощью stati c маршрута, который он знает, через какой интерфейс он должен отправить ответ.
Однако эта система имеет компонент балансировки нагрузки, который при сбое восходящей линии связи B будет перенаправлять трафик c клиента маршрутизатора B к маршрутизатору C (зеленые стрелки) примерно так: traffi c поступает на маршрутизатор B, перенаправляется на маршрутизатор C, который затем пересылается на A.
И здесь начинается проблема. На маршрутизаторе A у меня есть маршрут stati c для клиентских сетей, например:
- traffi c в сеть B, go через интерфейс маршрутизатора B и
- traffi c в C сеть, go через интерфейс маршрутизатора C.
Однако, поскольку я выполняю балансировку нагрузки, мне нужен ответ клиенту B на Маршрутизатор с go по C, если запрос также поступил через этот интерфейс. Обратите внимание, что балансировка нагрузки происходит только на уровне B и C, и я не могу управлять этим или когда происходит перенаправление.
Я прочитал несколько вопросов и ответов об «отправке ответа через тот же интерфейс запроса» , например:
https://serverfault.com/questions/228195/answering-on-the-same-interface-where-the-request-came-from/228258
, но все они требуют добавления команд ip route
и ip rule
.
Мой вопрос есть: в Linux системах есть ли способ автоматически маршрутизировать ответ пакета через интерфейс, с которого поступил запрос (а не в соответствии с маршрутами stati c)? Любой инструмент? Если нет, то как я могу решить эту проблему, если это вообще возможно?