subal Posted June 27, 2012 Posted June 27, 2012 (edited) имеется локальная сеть у которой шлюзом является FreeBSD 8.2-RELEASE (IPFW) на клиентов выделен канал 512/512 Кб/с все как бы норм но у 1 клиента идет превышение скорости канала в 4 раза. клиент использует программу Sharaman качает фильмы... вот конфиг 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 (проблемный клиент) как быть? в чем проблема? почему идет превышение скорости? Edited June 27, 2012 by subal Вставить ник Quote
subal Posted June 27, 2012 Author Posted June 27, 2012 ну по идее клиент присутствует в 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 Вставить ник Quote
nnb Posted June 27, 2012 Posted June 27, 2012 ${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 писать. Вставить ник Quote
Ilya Evseev Posted June 27, 2012 Posted June 27, 2012 1) Входящий и исходящий трафик направляется в один и тот же pipe: table 1 = pipe 4, table 3 = pipe 3. Это сделано намеренно? 2) В pipe 1 направляется трафик из двух таблиц, 4 и 2. Это тоже намеренно? 3) Попробуйте вместо "via $IFACE in" написать просто "out" или "via $IFNet out". Шаманство, но иногда почему-то помогает. Вставить ник Quote
st_re Posted June 27, 2012 Posted June 27, 2012 ну по идее клиент присутствует в 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 это интерфейс куда уходит трафик на Ваших клиентов и отттуда приходиит трафик от них ? Вставить ник Quote
subal Posted June 28, 2012 Author Posted June 28, 2012 извините за лишний конфиг... запутал вас! клиент находится в table 2 т.к. pipe на этой таблице настроен 512/512. остальные тестовые и временные.... канал мерил на порту т.е. там показывает превышение исходящего трафика! а насчет mask dst-ip и src-ip да это логично! что то я об этом не подумал... конфиг создавал давно про это и позабыл... сейчас данную маску поправил и попробую понаблюдать за каналами! $IFACE это интерфейс в локальную сеть сделал ${FwCMD} pipe 1 config bw 512Kbit/s queue 32Kbytes mask SRC-IP 0xffffffff Вставить ник Quote
ixi Posted June 28, 2012 Posted June 28, 2012 У нас тоже временами скорость где-нибудь да поднимется в 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 всё красиво, но на порту и в нетфлоу-- явное превышение. Вставить ник Quote
st_re Posted June 28, 2012 Posted June 28, 2012 Ну если нетфлов до шейпера, то там таки может быть все что угодно... никто не мешает залить клиенту гигабит. Через шейпер оно пролезать не должно. Вставить ник Quote
ixi Posted June 28, 2012 Posted June 28, 2012 Ну если нетфлов до шейпера, то там таки может быть все что угодно... никто не мешает залить клиенту гигабит. Через шейпер оно пролезать не должно. Нетфлоу после шейпера, это видно из конфига. Да и физический канал после. Вставить ник Quote
st_re Posted June 28, 2012 Posted June 28, 2012 тогда ищите где оно не в те пайпы попадает или не попадает вовсе. почитайте в районе 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, что несколько маловато для промышленного использования.... Вставить ник Quote
ixi Posted June 28, 2012 Posted June 28, 2012 тогда ищите где оно не в те пайпы попадает или не попадает вовсе. Не подходит. Левых адресов и удвоений не наблюдалось, пайпы правильные (на момент проверок), и как правило работают нормально (всплески разовые на полчаса-час, у разных пользователей). 8.0-RELEASE, hash_size/buckets с запасом. Добавлю сохранение таблиц/пайпов в крон, понаблюдаю, может что и всплывёт в момент таких аномалий. Вставить ник Quote
ixi Posted June 28, 2012 Posted June 28, 2012 Очередной инцидент не заставил себя ждать. # 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 Похоже, что проблема таки с таблицами. Вставить ник Quote
ixi Posted June 29, 2012 Posted June 29, 2012 Это что за версия ? (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 Похоже, что придётся таки искать резерв и пересобирать. Вставить ник Quote
Hawk128 Posted June 29, 2012 Posted June 29, 2012 В первую очередь обновись до stable. Там изменений туча была. Вставить ник Quote
st_re Posted June 29, 2012 Posted June 29, 2012 ну да, 8.0 в продакшене вообще не ставил. Дождался 8.1. Массово ставил уже 8.2. Я бы начал с обновления. х.0-RELEASE вообще стремно. Ее массово почитай и не пользовал никто до выхода. Вставить ник Quote
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.