
В текущей версии Quagga для Linux я обнаружил правило, которое может подавлять передачу некоторой информации о маршрутах соседним маршрутизаторам через RIPv2.
Если маршрутизатор r1 подключается к другому маршрутизатору r2 через интерфейс 'nic0', а у r1 есть другой интерфейс 'nic1', подключенный к другой сети 'net1'. Тогда r1 надеется объявить маршрут к 'net1' своему соседу r2. Сеть, скажем, net0, является сетью, соединяющей r1 и r2, которая, скажем, 10.3.1.32/27, а сеть 'net1', скажем, 10.3.1.0/24.
В этом случае запись маршрута 10.3.1.0/24 (через nic1) не будет отправлена на r2, поскольку программа RIPv2 в Quagga внутренне подавила запись и удалила ее.
Я проверил исходный код RIPv2 Quagga и обнаружил, что это происходит из-за правила: 10.3.1.0/24 имеет сетевой префикс, который содержится в сетевом префиксе 10.3.1.32/27, другими словами, самые левые 24 бита 10.3.1.0 являются подстрокой самых левых 27 бит 10.3.1.32.
Но я не понимаю, почему есть такое правило. Это определено стандартом RIPv2 или просто причудой Quagga? В моем понимании, перекрытие между net0 и net1 допустимо и не должно быть проблемой из-за «правила сопоставления самого длинного сетевого префикса» в маршрутизации, и маршрутизатору r2 действительно нужно знать, что существует большая сеть net1 (по сравнению с net0), к которой можно добраться через r1. Если эта информация о маршруте была подавлена Quagga, r2 не будет знать об этом, и к хостам в net1 нельзя будет получить доступ из net0 со стороны r2.
Есть ли кто-нибудь, кто это знает?
Спасибо, Вуди.
решение1
Если сеть 10.3.1.0/24 напрямую подключена к R1, это может вызвать проблему. В этом случае R1 имеет перекрывающиеся IP-адреса на обоих своих интерфейсах. Я не эксперт по Linux, но я знаю, что это не поддерживается на маршрутизаторах Cisco (и я почти уверен, что это не поддерживается ни на каком другом маршрутизаторе/брандмауэре).
Если сеть не подключена напрямую к R1, то в сети должен быть третий маршрутизатор, назовем его R0. R0 напрямую подключен к сети 10.3.1.0/24 и подключается к R1 через какую-то другую сеть, например, 172.16.0.0/24. В этом случае настройка должна работать нормально. Я тестировал это на маршрутизаторах Cisco.
10.0.0.0/8 is variably subnetted, 4 subnets, 4 masks
R 10.3.1.0/24 [120/1] via 172.16.0.101, 00:00:13, Ethernet0/1 (nic1)
C 10.3.1.32/27 is directly connected, Ethernet0/0 (nic0)
Возможно, Quagga — хотя и не жалуется на это — также не может обрабатывать эти перекрывающиеся диапазоны IP-адресов на обоих своих интерфейсах.