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

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 строк это обвязка нетграфа и комментарии.

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


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

Создайте аккаунт или войдите в него для комментирования

Вы должны быть пользователем, чтобы оставить комментарий

Создать аккаунт

Зарегистрируйтесь для получения аккаунта. Это просто!

Зарегистрировать аккаунт

Войти

Уже зарегистрированы? Войдите здесь.

Войти сейчас