This shows you the differences between two versions of the page.
Both sides previous revisionPrevious revisionNext revision | Previous revisionNext revisionBoth sides next revision | ||
software:freebsd:igmpproxy_on_netgraph [2015/05/15 15:06] – root | software:freebsd:igmpproxy_on_netgraph [2015/05/15 15:14] – root | ||
---|---|---|---|
Line 32: | Line 32: | ||
IGMP (IPv4) подпадает под такой фильтр в tcpdump:\\ | IGMP (IPv4) подпадает под такой фильтр в tcpdump:\\ | ||
< | < | ||
- | , где:\\ | + | где:\\ |
- | **ether[0] & 1 = 1** — проверяем первый байт эзернет пакета, | + | **ether[0] & 1 = 1** — проверяем первый байт эзернет пакета, |
**(ether[0: | **(ether[0: | ||
**ip[9] = 2** — Проверяем что IP proto = IGMP\\ | **ip[9] = 2** — Проверяем что IP proto = IGMP\\ | ||
**ether** — означает что смещение и длинна считаются относительно эзернет заголовка, | **ether** — означает что смещение и длинна считаются относительно эзернет заголовка, | ||
- | ip — это смещение относительно эзернет заголовка, | + | ip — это смещение относительно эзернет заголовка, |
- | В случае инкапсуляции в VLAN придётся переписывать условия. | + | В случае инкапсуляции в VLAN придётся переписывать условия.\\ |
Теперь получим ассемблерный код для bpf: | Теперь получим ассемблерный код для bpf: | ||
< | < | ||
- | (имя интерфейса указывать не обязательно, | + | (имя интерфейса указывать не обязательно, |
< | < | ||
48 0 0 0 | 48 0 0 0 | ||
Line 69: | Line 69: | ||
==== Тонкости ==== | ==== Тонкости ==== | ||
- | 1. Пришлось включить **promisc** режим на обоих | + | 1. Адаптеры нужно перевести в «не разборчивый» = promisc режим, иначе они аппаратно отфильтрую весь мультикат, тк OS не настраивала его пропускание.\\ |
+ | < | ||
- | 2. Пришлось включить **autosrc** на интерфейсе в сети провайдера, тк у провайдера на коммутаторе настроен | + | 2. autosrc на WAN интерфейсе лучше включить. Таким образом |
+ | < | ||
3. Моему провайдеру нет дела до того какой src-ip в IP приходит от меня, если бы было, то я бы попробовал гнать трафик в сторону провайдера через **ng_patch** ноду, которая бы заменяла src-ip на нужны, и выставляла CSUM_IP и CSUM_UDP в заголовке пакета - есть шанс что драйвер сетевого адаптера сам рассчитает эти суммы либо что оборудование провайдера проигнорирует неверную контрольную сумму в IGMP пакетах от меня. Нода также подключается обоими хуками к BPF, выход настраивается на passtrouth (пересылку всех пакетов) на __lower__ хук __ng_ether__ на адаптере в сети провайдера, | 3. Моему провайдеру нет дела до того какой src-ip в IP приходит от меня, если бы было, то я бы попробовал гнать трафик в сторону провайдера через **ng_patch** ноду, которая бы заменяла src-ip на нужны, и выставляла CSUM_IP и CSUM_UDP в заголовке пакета - есть шанс что драйвер сетевого адаптера сам рассчитает эти суммы либо что оборудование провайдера проигнорирует неверную контрольную сумму в IGMP пакетах от меня. Нода также подключается обоими хуками к BPF, выход настраивается на passtrouth (пересылку всех пакетов) на __lower__ хук __ng_ether__ на адаптере в сети провайдера, | ||
Line 97: | Line 99: | ||
===== PS ===== | ===== PS ===== | ||
Для создания аналогичного по функционалу моста, в котором будет несколько сетевых интерфейсов в разных сетях с мультикастом и несколько сетевых адаптеров в сетях куда его нужно переправить потребуется на каждый сетевой адаптер вешать по **ng_split** + **ng_one2many** и по одной **ng_one2many** с каждой стороны моста для рассылки копий мультикаста на все интерфейсы. __upper__ хуки **ng_ether** нод по прежнему будут напрямую подключатся к BPF. В случае нескольких сетей - источников мультикаста будет ещё проблема с возможным перекрытием адресных пространств, | Для создания аналогичного по функционалу моста, в котором будет несколько сетевых интерфейсов в разных сетях с мультикастом и несколько сетевых адаптеров в сетях куда его нужно переправить потребуется на каждый сетевой адаптер вешать по **ng_split** + **ng_one2many** и по одной **ng_one2many** с каждой стороны моста для рассылки копий мультикаста на все интерфейсы. __upper__ хуки **ng_ether** нод по прежнему будут напрямую подключатся к BPF. В случае нескольких сетей - источников мультикаста будет ещё проблема с возможным перекрытием адресных пространств, | ||
+ | |||
+ | |||
+ | ===== Ссылки ===== | ||
+ | [[http:// | ||
+ | [[http:// | ||
+ | [[http:// | ||
+ | [[http:// |