URL: https://www.opennet.me/cgi-bin/openforum/vsluhboard.cgi
Форум: vsluhforumID1
Нить номер: 83379
[ Назад ]

Исходное сообщение
"как в ipfw пероверить next-hop исходящего пакета?"

Отправлено freeBSDun , 16-Дек-08 19:42 
Дано: Плоский Ethernet-сегмент, в который входит несколько роутеров (рассчитываем на ~10 штук), типа точки обмена трафиком, но не она.  Есть IBGP, OSPF, куча маршрутов. IPv4 Only (пока). Маршрутизаторы разные - Cisco, PS.... в перспективе - что угодно.

В эту сеть смотрит ОДНИМ ИНТЕРФЕЙСОМ маршрутизатор на базе FreeBSD 7.0 (бордер между OSPF-сегментом и BGP).

Задача:

В исходящей цепочке правил проверять next-hop пакета.
Подробнее:
Через интерфес выходят пакеты, которые дальше пойдут через разные маршрутизаторы. Кто-то через 192.168.1.1, кто-то через 192.168.1.2 и т.д.  В зависимости от того, через какой маршрутизатор они дальше пойдут должна проводиться различная обработка - где-то нужен NAT, где-то нет. Где-то надо считать трафик, где-то нет, разные правила шейпинга и т.д.

Нужно в ipfw ввести условие типа
ipfw add 7000 skipto 8000 ip from any to any out via em0 next-hop 192.168.1.1
для пакетов, которые будут направлены через 192.168.1.1

Тупые идеи:
1. Сделать столько интерфейсов, сколько в сегмента маршрутизаторов... ужасно;
2. Периодически выгружать таблицу маршрутизации в ipfw table. Не уютно - маршруты могут меняться достаточно часто, производительность упапдет (второй раз просамтривать таблицу маршрутизации);
3. Включить пропуск через ipfw L2-пакетов, и работать с мак-адресами роутеров... жалко производительность на второй заход в ipfw;
4. Прохачить route.c на предмет навешивания mbuf_tag на каждый прошедший пакет... обновляться будет противно;
5. Нарисовать модуль netgraph, который будет выдирать откуда-то информацию про next-hop, и навешивать ее в виде tag'а... откуда выдирать информацию?

Есть ли какие-то стандартные средства?


Содержание

Сообщения в этом обсуждении
"как в ipfw пероверить next-hop исходящего пакета?"
Отправлено freeBSDun , 17-Дек-08 09:51 
Поправка к пункту 4: прохачить net/ip_output.c

Почитал коды ядра... маршрутная информация по текущему пакету нигде не сохраняется, кроме как в стеке процедуры ip_output. Если пакет возвращается из divert'а, например, - маршруты по нему вичисляются заново. Разочаровался...  


"как в ipfw пероверить next-hop исходящего пакета?"
Отправлено Pahanivo , 17-Дек-08 11:42 
мдаа - плоский сегмент езернет )))



"как в ipfw пероверить next-hop исходящего пакета?"
Отправлено freeBSDun , 17-Дек-08 15:13 
>мдаа - плоский сегмент езернет )))

плоский - в смысле без "выпуклостей" в виде вланов, маршрутизаторов в середине, хировыдуманных ACL и прочего. Ну такой уж у нас внутренни слэнг...