Так у вас є два 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
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:
mtu 1420 qdisc noqueue state UNKNOWN group default qlen 1000 inet 100.100.2.250/30 scope global fks02 25: tun0: 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]