согласно статье:
http://www.opennet.me/tips/info/1421.shtml
настраиваю перенаправление входящего трафикапосле:
# modprobe ifb
# ip link set dev ifb0 upимеем интерфейс ifb0
# ifconfig ifb0
ifb0 Link encap:Ethernet HWaddr E2:A2:13:DD:08:CF
inet6 addr: fe80::e0a2:13ff:fedd:8cf/64 Scope:Link
UP BROADCAST RUNNING NOARP MTU:1500 Metric:1
RX packets:3 errors:0 dropped:3 overruns:0 frame:0
TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:32
RX bytes:210 (210.0 b) TX bytes:0 (0.0 b)как видим он поднялся в режиме "Link encap:Ethernet"
при попытке перенаправить входящий трафик с интерфейса ppp0 на псевдоинтерфейс ifb0 получается, что ifb0 пытается усмотреть во входном потоке ethernet кадры
вот вывод tcpdump:
# tcpdump -i ifb0
tcpdump: WARNING: ifb0: no IPv4 address assigned
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on ifb0, link-type EN10MB (Ethernet), capture size 96 bytes
16:21:02.305734 01:43:90:26:00:00 (oui Unknown) > 00:03:00:21:45:00 (oui Unknown), ethertype Unknown (0x6c11), length 327:
0x0000: c1c4 4a74 b6b0 5639 a461 ea99 1ae1 012f ..Jt..V9.a...../
0x0010: 4560 6431 3a72 6432 3a69 6432 303a 27e0 E`d1:rd2:id20:'.
0x0020: 68e7 94c2 8b67 995e edd6 cc87 6da8 9e7a h....g.^....m..z
0x0030: 9f34 353a 6e6f 6465 7332 3038 3a26 bce9 .45:nodes208:&..
0x0040: 439d f045 228f f7b2 a601 782f 4845 cbaf C..E".....x/HE..
0x0050: 2e53 .S
16:21:02.339518 00:38:df:16:40:00 (oui Unknown) > 00:03:00:21:45:00 (oui Unknown), ethertype Unknown (0x7406), length 60:
0x0000: a7f5 5434 30e5 5639 a461 27ef b1bd a1c6 ..T40.V9.a'.....
0x0010: cd43 ed9c 5f1d 8018 ff59 dcf4 0000 0101 .C.._....Y......
0x0020: 080a 0004 8eee 00e0 f56a 0000 0000 .........j....
16:21:02.439985 00:34:43:77:40:00 (oui Unknown) > 00:03:00:21:45:00 (oui Unknown), ethertype Unknown (0x6f06), length 56:
0x0000: 8eee 55fa e8c9 5639 a461 7972 eaa8 dfdd ..U...V9.ayr....
0x0010: 0eeb 2008 0b87 8010 2134 2bdd 0000 0101 ........!4+.....
0x0020: 080a 004e 91dd 00e1 decd ...N......можно ли поднимать ifb интерфейсы в режиме point-to-point?
Я заворачиваю траф в ifb с вланов (ethX.Y) - в tcpdumpe та же фигня:
08:58:14.175298 44:bf:f9:46:00:11 (oui Unknown) > 00:02:44:bf:00:02 (oui Unknown), ethertype Unknown (0xd8e6), length 110:
0x0000: dfef 0800 4500 005c f720 0000 3f01 bcf9 ....E..\....?...
0x0010: c16c 268e d582 0a0a 0800 86c4 de04 3609 .l&...........6.
0x0020: 5069 6e67 696e 6720 6672 6f6d 2044 656c Pinging.from.Del
0x0030: 7068 6920 636f 6465 2077 7269 7474 656e phi.code.written
0x0040: 2062 7920 462e 2050 6965 7474 6520 2020 .by.F..Piette...
0x0050: 2020 ..
08:58:14.479744 44:bf:f9:46:00:11 (oui Unknown) > 00:02:44:bf:00:02 (oui Unknown), ethertype Unknown (0xd8e6), length 64:
0x0000: dfef 0800 4500 0028 926b 4000 7f06 7d2b ....E..(.k@...}+
0x0010: c16c 268e 50ef b34f 041c 0e8c 922e d030 .l&.P..O.......0
0x0020: 3bdf c225 5010 fb31 555d 0000 0000 0000 ;..%P..1U]......
0x0030: 0000 ..
08:58:14.900103 44:bf:f9:46:00:11 (oui Unknown) > 00:02:44:bf:00:02 (oui Unknown), ethertype Unknown (0xd8e6), length 77:
0x0000: dfef 0800 4500 003b 926c 4000 7f06 7d17 ....E..;.l@...}.
0x0010: c16c 268e 50ef b34f 041c 0e8c 922e d030 .l&.P..O.......0
0x0020: 3bdf c225 5018 fb31 470f 0000 5738 b3f6 ;..%P..1G...W8..
0x0030: bee7 f603 0000 0200 f363 59a7 0f0c f0 .........cY....
08:58:14.904438 44:bf:f9:46:00:11 (oui Unknown) > 00:02:44:bf:00:02 (oui Unknown), ethertype Unknown (0xd8e6), length 945:
0x0000: dfef 0800 4500 039f 2c63 4000 7f06 eda1 ....E...,c@.....
0x0010: c16c 268e c243 3416 060f 0050 9a86 9dfd .l&..C4....P....
0x0020: b4c3 d295 5018 ff12 0a70 0000 4745 5420 ....P....p..GET.
0x0030: 2f6d 792f 6d65 7373 6167 652e 7068 746d /my/message.phtm
0x0040: 6c3f 6369 643d 3130 3937 3032 2048 5454 l?cid=109702.HTT
0x0050: 502f P/Однако траф шейпится нормально. ;)
>Я заворачиваю траф в ifb с вланов (ethX.Y) - в tcpdumpe та
>же фигня:***
>Однако траф шейпится нормально. ;)угу,
только не обрабатываются метки проставленные iptablesвот пример моего скрипта:
#root disc
tc qdisc add dev ifb0 root handle 1: htb default 11#root class
tc class add dev ifb0 parent 1: classid 1:1 htb rate 100kbit ceil 100kbit#classes
tc class add dev ifb0 parent 1:1 classid 1:10 htb rate 50kbit ceil 100kbit prio 0
tc class add dev ifb0 parent 1:1 classid 1:11 htb rate 50kbit ceil 100kbit prio 1#filters
tc filter add dev ifb0 parent 1:0 protocol ip prio 1 handle 1 fw classid 1:10
tc filter add dev ifb0 parent 1:0 protocol ip prio 2 handle 2 fw classid 1:11#icmp
iptables -t mangle -A INPUT -i ppp0 -p icmp -j MARK --set-mark 0x1
iptables -t mangle -A INPUT -i ppp0 -p icmp -j RETURN#default
iptables -t mangle -A INPUT -i ppp0 -j MARK --set-mark 0x2
Есть такое подозрение (не претендующее на точность), что tcpdump пытается узреть айпи траф на интерфейсе, если сам интерфейс имеет адрес. В случае с ifb вероятно ему остается только видеть фреймы и узревать в них канальную информацию. Или я заблуждаюсь?
>Есть такое подозрение (не претендующее на точность), что tcpdump пытается узреть айпи
>траф на интерфейсе, если сам интерфейс имеет адрес. В случае с
>ifb вероятно ему остается только видеть фреймы и узревать в них
>канальную информацию. Или я заблуждаюсь?если смотреть прямо в ppp:
# tcpdump -i ppp0
то получается нормальная картинка
# ifconfig ppp0
ppp0 Link encap:Point-to-Point Protocolя думаю дело все же не в адресе, а в том как интерфейс объявлен
есть мысль переадресовывать поток не напрямую с инрерфейса, а через iptables
можно ли так сделать?
>есть мысль переадресовывать поток не напрямую с инрерфейса, а через iptables
>можно ли так сделать?Это уже IMQ будет. По-моему, ifb это для iproute2. Кстати, в той статье про ifb - 2 примера на тему с разбором меток из iptables и без разбора. ;)
в том то и дело, что метки не разбираются т.к. интерфейс не может расшифровать чего в него приходитзы
к тому же imq в ядро системы не встроен по умолчанию (fedora 7)
>есть мысль переадресовывать поток не напрямую с инрерфейса, а через iptables
>можно ли так сделать?Кстати, интересно - нет ли реализаций шейпера через механизм QUEUE в iptables? Было бы очень красиво в плане схожести с dummynet во Фре, правда плохо, что траф бы вылазил в юзерспейс.
>есть мысль переадресовывать поток не напрямую с инрерфейса, а через iptables
>можно ли так сделать?хм, нету в iptables модуля работы с IFB... (а с IMQ есть)
...что делать...
Сделал схему заворота трафика с ppp на ifb в скрипте ip-up. Сам pptp реализовывал на accel-pptp. Шейпера на ifb0 навесил при помощи htb.init. Сам долго тестировал, гонял - все ок. Посадил клиентов - через 10 минут kernel panic. Не успел увидеть его сути. Решил, что трабла в accel-pptp. Поставил poptop 1.3.4. Опять 10 мин с клиентами и kernel panic. Успел зафоткать:
трабла оказалась в том, что не смогло обработаться softirq на ifb0 в функции dev_queue_xmit. Почесал репу и до выяснения обстоятельств закатал на место линуха FreeBSD.....