Добрый день коллеги, столкнулся с задачей которую никак не могу решить верно (с помощью одного роутера freebsd).
сеть состоит из 3-х хостов R0, R1, H1. Необходимо обеспечить доступность H1 по обоим ip адресам, пусть для простоты будет tcp 110, при этом строгое условие - H1 должен отправлять пакеты отправителю с того адреса на который получен запрос.
Схематично: https://c.radikal.ru/c33/2112/a8/c337fae01d2f.jpg
R0 (не изменяемая часть)
ip A.A.A.A/24
================================
R1 (em0) (alias делать запрещено)
ip A.A.A.A+1/24
gw A.A.A.A
R1 (em2)
ip A.A.A.A+2/24
gw A.A.A.A
R1 (em1)
ip B.B.B.B/24
=================================
H1 (em0)
ip B.B.B.B+1/24 alias0 ip B.B.B.B+2/24
gw B.B.B.B
Как видно классический PBR и NAT, эта задача решается fwd (next-hop, c подменой mac), давнешний конфиг для этого (nat отдельным демоном) :
ipfw add 1000 divert 8778 ip from B.B.B.B+1 to any
ipfw add 1100 divert 8668 ip from B.B.B.B+2 to any
ipfw add 3000 fwd A.A.A.A log ip from A.A.A.A+1 to any
ipfw add 3100 fwd A.A.A.A ip from A.A.A.A+2 to any
ipfw add 4000 divert 8778 ip from any to A.A.A.A+1
ipfw add 4100 divert 8668 ip from any to A.A.A.A+2
ipfw add 5000 allow ip from any to any
Данный конфиг работает отлично когда внешние шлюзы R1 разные, т.е. A.A.A.A и какой-нибудь С.С.С.С, но в задаче выше шлюз одинаковый (читай mac+ip). Отладка правил показывает, что ipfw корректно работает по правилам, но отправка пакета действием fwd идет по первому попавшемуся соответствию в таблице соответствия mac+ip. Т.е. в случае выше по default-gateway A.A.A.A через интерфейс em0. По em2 tcpdump показывает, что получает пакеты из вне, но отправка ответа идет через em0. При этом хост H1 доступен через em0.
Соответственно вопрос, как в данной задаче обеспечить доступность хоста H1 через оба адреса (интерфейса) и с использованием только одного роутера R1 на базе FreeBSD? Накиньте идей, кручусь возле net.fibs(setfib), но что-то никак.
P.S. повторюсь, неизменяемые условия: R0, настройки R1 в части адресов А.А.А.0/24.