Так у вас є два equal cost routes, тобто без policy routing (source routing) обидва ці маршрута повинні коректно обробляти усі пакети з усіма source addresses вашого хоста. Навіть якщо б libresolv bind'ився на INADDR_ANY, то в процесі роботи маршрут може змінитися прямо посеред сесії. Напевне це не дуже принципово для DNS, але, наприклад, для RTP, не кажучи вже про TCP  - критично. Як на мене - це проблема з дизайном мережі. Я свого часу у подібних конфігураціях з динамічною маршрутизацією намагався ставити потрібні адреси на loopback і усі сервіси bind'ити сами на них, щоб не залежати від інтерфейсних адрес.

P.S. RFC1122 не вимагає обирати адресу з Route cache: "The route cache may be consulted" - "may", а не "must".


чт, 25 апр. 2024 г. в 14:44, Volodymyr Litovka <doka@funlab.cc>:

On 4/25/24 12:55, Volodymyr Garnyk wrote:
А якщо зробити різні weight на маршрути?

Взагалі-то OSPF та інший динамічний роутинг не дуже добре живе разом з policy routing'ом. Зазвичай вважається що всі адреси всюду доступні всередені Routing Domain. Маршрут же може помінятися на протязі однієї сесії

Немає там policy routing :)

перше питання було таке - чому libresolv не bind'иться на INADDR_ANY, а самостійно ставить source address. Наступне питання виникло після консультації з RFC1122 - якщо libresolv робить все відповідно до інформації з route cache (according to RFC), то чому нетворк стек форвардить пакет не так, як записано в його route cache :)

Технічно проблему я вирішив й пакети тепер ходять незалежно від src ip та egress interface, просто осадочок залишається у вигляді не до кінця зрозумілого форвардінгу :)

Не дивився, дякую. Якщо йти по пунктах (a) - (d), то перший доступний - consult to route-cache, що я маю:

root@host:~# ip a
[ ... ]
24: tun2: <POINTOPOINT,NOARP,UP,LOWER_UP> mtu 1420 qdisc noqueue state UNKNOWN group default qlen 1000
    inet 100.100.2.250/30 scope global fks02
25: tun0: <POINTOPOINT,NOARP,UP,LOWER_UP> mtu 1420 qdisc noqueue state UNKNOWN group default qlen 1000
    inet 100.100.0.250/30 scope global nmb02

root@host:~# ip route
[ ... ]
100.100.1.3 nhid 37506 proto ospf metric 20
        nexthop via 100.100.2.249 dev tun2 weight 1
        nexthop via 100.100.0.249 dev tun0 weight 1

й що бачу -

root@host:~# ip route get 100.100.1.3
100.100.1.3 via 100.100.2.249 dev **tun2** src 100.100.2.250 uid 0
    cache

root@host:~# tcpdump -i any 'port 53' -n
listening on any, link-type LINUX_SLL2 (Linux cooked v2), snapshot length 262144 bytes
09:56:00.637547 **tun0** Out IP **100.100.2.250**.41102 > 100.100.1.3.53: 11893+ A? i.ua. (22)

тобто - пакет таки формується відповідно до раут-кеш, але лінух його форвардить трішки по іншому :)

-- 
Volodymyr Litovka
  "Vision without Execution is Hallucination." -- Thomas Edison


--
Vladimir Garnick   [nic-hdl: VG-RIPE, VG-UANIC]