Страница 1 из 1

ipfw tee

СообщениеДобавлено: 10 дек 2018, 22:49
Mechanic
FreeBSD 10.0-RELEASE
задача сделать зеркалирование трафика radius на внешний сервер
хочу использовать ipfw tee и далее отправить трафик natd на другой хост
делаю
Код: Выделить всё
ipfw -q add 5 tee 1234 udp from any to any 1812,1813 via lo0

правило отрабатывает
Код: Выделить всё
00005          164          54144 tee 1234 udp from any to any dst-port 1812,1813 via lo0

но если посмотреть tcpdump
Код: Выделить всё
 tcpdump -i lo0 -n port 1234

трафика на порту нет


вопрос почему ???!!!

Re: ipfw tee

СообщениеДобавлено: 11 дек 2018, 08:51
root
tee port
Send a copy of packets matching this rule to the divert(4) socket
bound to port port. The search continues with the next rule.

Подобное можно реализовать используя netgraph.
Схема примерно следующая:
1. Добавляются в ipfw правила, отправляющие через ngtee копию пакетов в netgraph.
2. Из netgraph при помощи ng_ksocket пакеты отправляются на IP адрес удаленного сервера.
3. Удаленный сервер принимает пакеты в netgraph через ng_ksocket.
4. Из netgraph пакеты передаются на сетевой интерфейс ngX.

Re: ipfw tee

СообщениеДобавлено: 11 дек 2018, 14:00
Mechanic
те пакет пишется в divert(4) socket ?
а потом оттуда нужно его переправить далее ?!

Re: ipfw tee

СообщениеДобавлено: 11 дек 2018, 14:41
lehisnoe
Mechanic, не понимаю, что мешает взять и проверить, что копии пакетов отправляются на порт...
1. Добавляем правило в ipfw:
Код: Выделить всё
ipfw add 1000 tee 1234 icmp from me to 1.1.1.1

2. Запускаем natd "слушать" нужный порт в режиме дебага:
Код: Выделить всё
natd -v -p 1234 -a 172.16.10.37

3. Генерим нужный трафик:
Код: Выделить всё
ping -c 1 1.1.1.1

4. Наблюдаем появление копий ожидаемых пакетов:
Код: Выделить всё
Out {default}[ICMP] [ICMP] 172.16.10.37 -> 1.1.1.1 8(0) aliased to
           [ICMP] 172.16.10.37 -> 1.1.1.1 8(0)

5. Делаем с пакетами то, что нужно.

P.S. С natd можешь прогуляться по граблям из-за того, что он предназначен, мягко говоря, для иных задач, нежели отписанная тобой. Для твоей задачи - лучшим будет решение от root

Re: ipfw tee

СообщениеДобавлено: 11 дек 2018, 15:09
Mechanic
ну все верно формируется, только пакеты бегающие внутри lo0 natd при реверсе копирует назад в lo0, а мне нужно на удл. хост отправить

natd -p 1234 -v -a 1.6.8.251 -s -redirect_port udp 1.6.8.254:1812 1812
Out {default}[UDP] [UDP] 127.0.0.1:40462 -> 127.0.0.1:1812 aliased to
[UDP] 1.6.8.251:40462 -> 127.0.0.1:1812
In {default}[UDP] [UDP] 127.0.0.1:40462 -> 127.0.0.1:1812 aliased to
[UDP] 127.0.0.1:40462 -> 127.0.0.1:1812
In {default}[UDP] [UDP] 1.6.8.251:40462 -> 127.0.0.1:1812 aliased to
[UDP] 1.6.8.251:40462 -> 127.0.0.1:1812
Out {default}[UDP] [UDP] 127.0.0.1:40466 -> 127.0.0.1:1812 aliased to
[UDP] 1.6.8.251:40466 -> 127.0.0.1:1812
In {default}[UDP] [UDP] 127.0.0.1:40466 -> 127.0.0.1:1812 aliased to
[UDP] 127.0.0.1:40466 -> 127.0.0.1:1812
In {default}[UDP] [UDP] 1.6.8.251:40466 -> 127.0.0.1:1812 aliased to
[UDP] 1.6.8.251:40466 -> 127.0.0.1:1812

Re: ipfw tee

СообщениеДобавлено: 11 дек 2018, 15:26
lehisnoe
Ну а это ровно те грабли, о которых я говорил.

Re: ipfw tee

СообщениеДобавлено: 11 дек 2018, 15:47
Mechanic
те natd в этой части не поможет ?!
ок посмотрю в сторону ng

Re: ipfw tee

СообщениеДобавлено: 11 дек 2018, 22:44
Mechanic
не понятно только почему 3 пакета вместо 2х
вначале по lo0
потом копия tee и выход natd

Out {default}[UDP] [UDP] 127.0.0.1:40462 -> 127.0.0.1:1812 aliased to
[UDP] 1.6.8.251:40462 -> 127.0.0.1:1812
In {default}[UDP] [UDP] 127.0.0.1:40462 -> 127.0.0.1:1812 aliased to
[UDP] 127.0.0.1:40462 -> 127.0.0.1:1812
In {default}[UDP] [UDP] 1.6.8.251:40462 -> 127.0.0.1:1812 aliased to
[UDP] 1.6.8.251:40462 -> 127.0.0.1:1812