Перейти к содержимому
Калькуляторы

netgraph: новый сетевой интерфейс

не получается через 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 

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Всё просто:

 

ifconfig em0 up

ngctl msg em0: setpromisc 1

ngctl msg em0: setautosrc 0

 

либо

ifconfig ngeth0 link 00:11:22:33:44:55 - меняй мак на тот который в сетевухе

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Всё просто:

 

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.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Попробуй так:

 

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 мак?

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Похоже, там баг в самом мосту.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Похоже, там баг в самом мосту.

И каким образом это связано с /usr/src/sys/netgraph/ng_bridge.c ?

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Похоже, там баг в самом мосту.

И каким образом это связано с /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. Код трех файлов не смотрел и не анализировал.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Не использует. Совсем.

Я смотрел и думал переписать на получше, чтобы без глобал лока стало, но идею до конца не додумал и переключился на другое.

Внутри там на 500 строк кода виртуальный коммутатор, который запоминает какие маки на каких хуках есть, умеет броадкаст и мультикаст рассылать по всем подряд хукам, и считает пакеты.

Это примерно всё.

Остальные 500 строк это обвязка нетграфа и комментарии.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Гость
Ответить в тему...

×   Вставлено в виде отформатированного текста.   Вставить в виде обычного текста

  Разрешено не более 75 смайлов.

×   Ваша ссылка была автоматически встроена.   Отобразить как ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставить изображения напрямую. Загрузите или вставьте изображения по ссылке.