skeletor Posted September 7, 2015 · Report post не получается через netgraph заставить работать сетевой интерфейс. Он создаётся, но трафик по нему ходит только в пределах сервера. А из-вне недостучаться. tcpdump вообще молчит. Когда-то на freebsd 7-8 создавал через netgraph интерфейсы вот так: kldload /boot/kernel/ng_ether.ko ngctl mkpeer em0: bridge lower link0 ngctl connect em0: em0:lower upper link1 ngctl name em0:lower em0Bridge ngctl mkpeer em0:lower eiface link3 ether ifconfig ngeth0 link 00:11:22:33:44:55 ifconfig ngeth0 192.168.5.44/24 sysctl net.inet.ip.forwarding=1 и после этого сеть на ngeth0 работала. На FreeBSD 10.2 не работает. Вроде бы ничего не упустил. Возможно что-то изменилось или я что-то делаю не так? tcpdump вообще не показывает никаких пакетов отправленных на ngeth0. В arp запись с новым МАСом появляется. Непосредственно в самой FreeBSD сеть ngeth0 работает. # kldstat Id Refs Address Size Name 1 29 0xffffffff80200000 179ddb0 kernel 2 1 0xffffffff81a11000 3832 ng_socket.ko 3 11 0xffffffff81a15000 b9db netgraph.ko 4 1 0xffffffff81a21000 34c0 ng_bridge.ko 5 1 0xffffffff81a25000 3c48 ng_eiface.ko 6 1 0xffffffff81a29000 7430 ng_netflow.ko 7 1 0xffffffff81a31000 93b5 if_bridge.ko 8 1 0xffffffff81a3b000 53fa bridgestp.ko 9 1 0xffffffff81a41000 40fa ng_ether.ko # ngctl list There are 6 total nodes: Name: ngeth0 Type: eiface ID: 00000012 Num hooks: 1 Name: ngeth1 Type: eiface ID: 00000014 Num hooks: 1 Name: ngeth2 Type: eiface ID: 00000016 Num hooks: 1 Name: ngctl1184 Type: socket ID: 00000019 Num hooks: 0 Name: em0 Type: ether ID: 0000000c Num hooks: 2 Name: em0Bridge Type: bridge ID: 0000000e Num hooks: 5 # netstat -rn -I ngeth0 Name Mtu Network Address Ipkts Ierrs Idrop Opkts Oerrs Coll ngeth 1500 <Link#3> 00:11:22:33:44:55 426 0 0 74 0 0 ngeth - 192.168.5.0/2 192.168.5.44 81 - - 60 - - # netstat -rn -I em0Bridge Name Mtu Network Address Ipkts Ierrs Idrop Opkts Oerrs Coll Вставить ник Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
Ivan_83 Posted September 7, 2015 · Report post Всё просто: ifconfig em0 up ngctl msg em0: setpromisc 1 ngctl msg em0: setautosrc 0 либо ifconfig ngeth0 link 00:11:22:33:44:55 - меняй мак на тот который в сетевухе Вставить ник Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
skeletor Posted September 9, 2015 · Report post Всё просто: ifconfig em0 up ngctl msg em0: setpromisc 1 ngctl msg em0: setautosrc 0 либо ifconfig ngeth0 link 00:11:22:33:44:55 - меняй мак на тот который в сетевухе К сожалению не помогло - пакеты всё равно не ловятся через tcpdump. Мне нельзя менять на тот же МАС, что у em0, так как в этом случае мне проще повесить алиас, нежели возится с netgraph. Вставить ник Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
Ivan_83 Posted September 9, 2015 · Report post Попробуй так: kldload /boot/kernel/ng_ether.ko ifconfig em0 up ngctl msg em0: setpromisc 1 ngctl msg em0: setautosrc 0 ngctl mkpeer em0: one2many lower one ngctl name em0:lower em0Bridge ngctl connect em0: em0Bridge: upper many0 ngctl mkpeer em0Bridge: eiface many1 ether Ещё. ng_bridge - по сути однопоточный, по крайней мере раньше таким был, из за глобальной блокировки таблицы с маками-портами. На коммутаторе маки появляются? Может на коммутаторе портсекурити = 1 мак? Вставить ник Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
vlad11 Posted September 10, 2015 · Report post Похоже, там баг в самом мосту. Вставить ник Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
Ivan_83 Posted September 10, 2015 · Report post Похоже, там баг в самом мосту. И каким образом это связано с /usr/src/sys/netgraph/ng_bridge.c ? Вставить ник Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
vlad11 Posted September 10, 2015 · Report post Похоже, там баг в самом мосту. И каким образом это связано с /usr/src/sys/netgraph/ng_bridge.c ? Наверное, /usr/src/sys/netgraph/ng_bridge.c использует основной функционал из /usr/src/sbin/ifconfig/ifbridge.c и /usr/src/sys/net/if_bridge.c. P.S. Код трех файлов не смотрел и не анализировал. Вставить ник Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
Ivan_83 Posted September 10, 2015 · Report post Не использует. Совсем. Я смотрел и думал переписать на получше, чтобы без глобал лока стало, но идею до конца не додумал и переключился на другое. Внутри там на 500 строк кода виртуальный коммутатор, который запоминает какие маки на каких хуках есть, умеет броадкаст и мультикаст рассылать по всем подряд хукам, и считает пакеты. Это примерно всё. Остальные 500 строк это обвязка нетграфа и комментарии. Вставить ник Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...