Инструменты пользователя

Инструменты сайта


ru:software:freebsd:igmpproxy_on_netgraph

Различия

Здесь показаны различия между двумя версиями данной страницы.

Ссылка на это сравнение

Предыдущая версия справа и слева Предыдущая версия
Следующая версия
Предыдущая версия
ru:software:freebsd:igmpproxy_on_netgraph [2015/05/15 15:11]
root [Тонкости]
ru:software:freebsd:igmpproxy_on_netgraph [2015/07/18 23:14] (текущий)
root [История]
Строка 20: Строка 20:
  
 ===== Принцип работы ===== ===== Принцип работы =====
 +==== netgraph ====
 +Его можно сравнить с LUA: он даёт широкие возможности по манипуляции с сетевыми пакетами,​ относительно прост в использовании и максимально быстр тк всё происходит в ядре.\\
 +У меня было много разных вариантов но в конце мне удалось свести количество нод к двум: **ng_ether** и **ng_bpf**.\\
 +**ng_ether** — имеет несколько хуков: __lower__ — это вход/​выход сетевого адаптера,​ __upper__ — ввод/​выход в сетевой стёк OS.\\
 +**ng_bpf** — программируемая нода, общий смысл программ:​ один вход и два выхода:​ пакет соответствует заданному условии и для пакетов которые не соответствуют. В ноде есть собственный ассемблер для матчинга пакетов. Но можно написать условия для tcpdump и получить код для **ng_bpf**.\\
 +Не большая хитрость ноды в том, что программа устанавливается на входную ноду. Но ноды которые указаны как выходные тоже могут принимать пакеты и обрабатывать они их будут по тем программам которые ассоциированы с ними.\\
 +
 +==== Передача пакетов ====
 {{:​ru:​software:​freebsd:​ng_bpf_bridge.png|}}\\ {{:​ru:​software:​freebsd:​ng_bpf_bridge.png|}}\\
 **BPF** настроен таким образом чтобы пропускать все без исключения пакеты с __upper__ хуков **ng_ether** нод на __lower__ хуки (пакеты от системы в сеть). Приходящие из сети пакеты с __lower__ хуков нод проверяются в **BPF**, и\\ **BPF** настроен таким образом чтобы пропускать все без исключения пакеты с __upper__ хуков **ng_ether** нод на __lower__ хуки (пакеты от системы в сеть). Приходящие из сети пакеты с __lower__ хуков нод проверяются в **BPF**, и\\
Строка 81: Строка 89:
  
 ===== История ===== ===== История =====
-igmpproxy и mrouted у меня работать отказались:​ PF по умолчанию убивает все пакеты с IP опциями в заголовке (IGMP они нужны для работы) и поэтому добавлять ​специально ​правило:​+igmpproxy и mrouted у меня работать отказались:​ PF по умолчанию убивает все пакеты с IP опциями в заголовке (IGMP они нужны для работы) и поэтому ​нужно ​добавлять правило:​
 <​code>​pass quick proto igmp from any to 224.0.0.0/4 allow-opts</​code>​ <​code>​pass quick proto igmp from any to 224.0.0.0/4 allow-opts</​code>​
 а я этого не сделал.\\ а я этого не сделал.\\
Строка 99: Строка 107:
 ===== PS ===== ===== PS =====
 Для создания аналогичного по функционалу моста, в котором будет несколько сетевых интерфейсов в разных сетях с мультикастом и несколько сетевых адаптеров в сетях куда его нужно переправить потребуется на каждый сетевой адаптер вешать по **ng_split** + **ng_one2many** и по одной **ng_one2many** с каждой стороны моста для рассылки копий мультикаста на все интерфейсы. __upper__ хуки **ng_ether** нод по прежнему будут напрямую подключатся к BPF. В случае нескольких сетей - источников мультикаста будет ещё проблема с возможным перекрытием адресных пространств,​ которую можно частично разрешить настроив в BPF фильтрацию по адресам. Для создания аналогичного по функционалу моста, в котором будет несколько сетевых интерфейсов в разных сетях с мультикастом и несколько сетевых адаптеров в сетях куда его нужно переправить потребуется на каждый сетевой адаптер вешать по **ng_split** + **ng_one2many** и по одной **ng_one2many** с каждой стороны моста для рассылки копий мультикаста на все интерфейсы. __upper__ хуки **ng_ether** нод по прежнему будут напрямую подключатся к BPF. В случае нескольких сетей - источников мультикаста будет ещё проблема с возможным перекрытием адресных пространств,​ которую можно частично разрешить настроив в BPF фильтрацию по адресам.
 +
 +
 +===== Ссылки =====
 +[[http://​www.freebsd.org/​cgi/​man.cgi?​query=ng_bpf&​apropos=0&​sektion=4&​manpath=FreeBSD+9.2-RELEASE&​arch=default&​format=html|man ng_bpf]]\\
 +[[http://​nuclight.livejournal.com/​124989.html?​nojs=1|Как работает tcpdump: ассемблер BPF; фильтрация с ng_bpf на FreeBSD]]\\
 +[[http://​citrin.ru/​freebsd:​ng_ipfw_ng_bpf|Использование ng_ipfw + ng_bpf для фильтрации по телу пакета]]\\
 +[[http://​nuclight.livejournal.com/​122098.html?​nojs=1|Программирование ng_bpf(4) и L7 filtering на FreeBSD]]\\
ru/software/freebsd/igmpproxy_on_netgraph.1431702690.txt.gz · Последние изменения: 2015/05/15 15:11 — root