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

ipfw превышение pipe

имеется локальная сеть у которой шлюзом является FreeBSD 8.2-RELEASE (IPFW)

 

на клиентов выделен канал 512/512 Кб/с все как бы норм но у 1 клиента идет превышение скорости канала в 4 раза. клиент использует программу Sharaman качает фильмы...

 

2oi_6.png

 

вот конфиг ipfw

 

#!/bin/sh
FwCMD="/sbin/ipfw -q"
${FwCMD} -f flush
IFACE="bce1"
IFNet="bce0"
myLan="x.x.0.0/24"

${FwCMD} -f flush              
${FwCMD} -f pipe flush         

${FwCMD} pipe 1 config bw 512Kbit/s queue 32Kbytes mask dst-ip 0xffffffff       
${FwCMD} pipe 10 config bw 512Kbit/s queue 32Kbytes mask dst-ip 0xffffffff
${FwCMD} pipe 2 config bw 1024Kbit/s  queue 32Kbytes mask dst-ip 0xffffffff
${FwCMD} pipe 3 config bw 2Mbit/s queue 512Kbytes mask dst-ip 0xffffffff
${FwCMD} pipe 4 config bw 15Mbit/s queue 512Kbytes mask dst-ip 0xffffffff

${FwCMD} add 100 allow ip from any to any via lo

${FwCMD} add 4000 pipe 4 ip from table\(1\) to any via $IFACE in
${FwCMD} add 4001 pipe 4 ip from any to table\(1\) via $IFACE out

${FwCMD} add 4100 pipe 3 ip from table\(3\) to any via $IFACE in
${FwCMD} add 4101 pipe 3 ip from any to table\(3\) via $IFACE out

${FwCMD} add 4500 pipe 1 ip from table\(4\) to any via $IFACE in
${FwCMD} add 4501 pipe 2 ip from any to table\(4\) via $IFACE out

${FwCMD} add 5000 pipe 1 ip from table\(2\) to any via $IFACE in
${FwCMD} add 5001 pipe 10 ip from any to table\(2\) via $IFACE out

${FwCMD} add  30000 deny log ip from 0.0.0.0/0 to any via $IFACE in
${FwCMD} add  30000 deny log ip from any to 0.0.0.0/0 via $IFACE out
${FwCMD} add  65530 allow log ip from any to any


 

sysctl.conf

 

net.inet.ip.forwarding=1
net.inet.ip.fw.verbose=1
net.inet.ip.fw.verbose_limit=1000
net.inet.ip.fw.one_pass=1

 

ipfw pipe 10 show

 

ipfw pipe 10 show
00010: 512.000 Kbit/s    0 ms burst 0
q131082 32 KB 0 flows (1 buckets) sched 65546 weight 0 lmax 0 pri 0 droptail
sched 65546 type FIFO flags 0x1 64 buckets 7 active
   mask:  0x00 0x00000000/0x0000 -> 0xffffffff/0x0000
BKT Prot ___Source IP/port____ ____Dest. IP/port____ Tot_pkt/bytes Pkt/Byte Drp
23 ip           0.0.0.0/0         х.х.х.х/0     247033 123869328 74 32862 53537  (проблемный клиент)

 

как быть? в чем проблема? почему идет превышение скорости?

Изменено пользователем subal

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


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

ну по идее клиент присутствует в table 2

 

${FwCMD} pipe 1 config bw 512Kbit/s queue 32Kbytes mask dst-ip 0xffffffff       
${FwCMD} pipe 10 config bw 512Kbit/s queue 32Kbytes mask dst-ip 0xffffffff

${FwCMD} add 5000 pipe 1 ip from table\(2\) to any via $IFACE in
${FwCMD} add 5001 pipe 10 ip from any to table\(2\) via $IFACE out

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


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

${FwCMD} pipe 1 config bw 512Kbit/s queue 32Kbytes mask dst-ip 0xffffffff       

${FwCMD} add 5000 pipe 1 ip from table\(2\) to any via $IFACE in

превышение идет для pipe 1? или для pipe 10?

В pipe 1 config может mask src-ip 0xffffffff писать.

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


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

1) Входящий и исходящий трафик направляется в один и тот же pipe: table 1 = pipe 4, table 3 = pipe 3. Это сделано намеренно?

2) В pipe 1 направляется трафик из двух таблиц, 4 и 2. Это тоже намеренно?

3) Попробуйте вместо "via $IFACE in" написать просто "out" или "via $IFNet out". Шаманство, но иногда почему-то помогает.

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


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

ну по идее клиент присутствует в table 2

 

${FwCMD} pipe 1 config bw 512Kbit/s queue 32Kbytes mask dst-ip 0xffffffff       
${FwCMD} pipe 10 config bw 512Kbit/s queue 32Kbytes mask dst-ip 0xffffffff

${FwCMD} add 5000 pipe 1 ip from table\(2\) to any via $IFACE in
${FwCMD} add 5001 pipe 10 ip from any to table\(2\) via $IFACE out

 

А без идей ? В таблице 3 и/или пайпе 3 его нет ?

 

мы вообще что ищем вход или исход? Как тут верно заметили у Вас там вообще бардель с пайпами и таблицами. В приведенном куске у Вас в одну сторону режется трафик к Вашим клиентам по 512 кб на каждого Вашего клиента, а в обратную сторону по 512 кбит на хост получателя (mask dst-ip). т.е. 2 человека одновременно заливающие на наг картинку будут толкаться в очереди. но 1 человек зальет на скорости порта торентов во все направления по миру. ибо DST у небо будет 100500 разных (и каждому не быстрее 512 кб).

 

зы

$IFACE это интерфейс куда уходит трафик на Ваших клиентов и отттуда приходиит трафик от них ?

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


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

извините за лишний конфиг... запутал вас! клиент находится в table 2 т.к. pipe на этой таблице настроен 512/512. остальные тестовые и временные.... канал мерил на порту т.е. там показывает превышение исходящего трафика! а насчет mask dst-ip и src-ip да это логично! что то я об этом не подумал... конфиг создавал давно про это и позабыл... сейчас данную маску поправил и попробую понаблюдать за каналами!

 

$IFACE это интерфейс в локальную сеть

 

сделал

${FwCMD} pipe 1 config bw 512Kbit/s queue 32Kbytes mask SRC-IP 0xffffffff

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


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

У нас тоже временами скорость где-нибудь да поднимется в 4-5 раз больше разрешённой. С чем связано -- так и не разобрались (торрентами грузить пытались, всё ровно).

 

disable one_pass
deny ip from table(2) to table(2)
divert tablearg ip from any to table(96) in via em0
pipe tablearg ip from any to table(0) out
pipe tablearg ip from table(1) to any out
netgraph 100 ip from 10.2.0.0/16 to any out
netgraph 100 ip from any to 10.2.0.0/16 out
divert tablearg ip from table(97) to not table(2) out via em0

Таблицы правильные, в ipfw pipe list всё красиво, но на порту и в нетфлоу-- явное превышение.

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


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

Ну если нетфлов до шейпера, то там таки может быть все что угодно... никто не мешает залить клиенту гигабит. Через шейпер оно пролезать не должно.

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


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

Ну если нетфлов до шейпера, то там таки может быть все что угодно... никто не мешает залить клиенту гигабит. Через шейпер оно пролезать не должно.

Нетфлоу после шейпера, это видно из конфига. Да и физический канал после.

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


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

тогда ищите где оно не в те пайпы попадает или не попадает вовсе.

 

почитайте в районе kern/127209, kern/144269 and kern/143474

 

У меня в то время когда данная проблема бывала левые IP в show pipe появлялись.

опять же у меня в варианте

pipe tablearg ip from any to table(0) out

были только проблемы попадания в пайп когда IP вообще нет в таблице, а попадания в другой пайп небыло, но не факт, что такое невозможно в принципе. В вариате конфига же из первого сообщения IP вместо 10 пайпа моглдо попасть и во 2 и в 3 и в 4.

Если у Вас 8.х и оно попадает не в тот пайп, то отпишите sendpr ибо я не видел это в 8. но сначала убедиться, что в логике все на месте.

 

И для кучи kern/148429.

 

И еще.

 

net.inet.ip.dummynet.hash_size: ? ( или ipfw pipe xxx config xxx buckets ___) ? его хватает ? Там по умолчанию 64, что несколько маловато для промышленного использования....

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


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

тогда ищите где оно не в те пайпы попадает или не попадает вовсе.

Не подходит. Левых адресов и удвоений не наблюдалось, пайпы правильные (на момент проверок), и как правило работают нормально (всплески разовые на полчаса-час, у разных пользователей).

8.0-RELEASE, hash_size/buckets с запасом.

 

Добавлю сохранение таблиц/пайпов в крон, понаблюдаю, может что и всплывёт в момент таких аномалий.

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


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

Очередной инцидент не заставил себя ждать.

# ipfw table 0 list | grep 1.2.3.4
1.2.3.4/32 828
# ipfw -a list
15149         140          59507 count ip from any to 1.2.3.4 out
15150 26610746597 29639299137601 pipe tablearg ip from any to table(0) out
# ipfw pipe list | grep 1.2.3.4
<пусто>

# ipfw -f pipe flush
# ipfw -f queue flush
# <восстанавливаем>
# ipfw pipe list | grep 1.2.3.4
<пусто>

# ipfw table 0 delete 1.2.3.4/32
# ipfw table 0 add 1.2.3.4/32 828
# ipfw pipe list | grep 1.2.3.4
<пусто>

# ipfw table all flush
# <восстановливаем>
# ipfw pipe list | grep 1.2.3.4
5891 ip           0.0.0.0/0            1.2.3.4/0     6267  8995803  0    0   0
3084 ip          1.2.3.4/0             0.0.0.0/0     2875   177227  0    0   0

Похоже, что проблема таки с таблицами.

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


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

Это что за версия ? (uname -a)

FreeBSD *** 8.0-RELEASE FreeBSD 8.0-RELEASE #0: Tue Dec 8 13:58:20 MSK 2009 root@fiziki1:/usr/obj/usr/src/sys/fiziki.2009-08-12 i386

 

Похоже, что придётся таки искать резерв и пересобирать.

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


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

В первую очередь обновись до stable. Там изменений туча была.

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


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

ну да, 8.0 в продакшене вообще не ставил. Дождался 8.1. Массово ставил уже 8.2. Я бы начал с обновления. х.0-RELEASE вообще стремно. Ее массово почитай и не пользовал никто до выхода.

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


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

Join the conversation

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

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

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

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

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

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

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