Jump to content
Калькуляторы

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  (проблемный клиент)

 

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

Edited by subal

Share this post


Link to post
Share on other sites

ну по идее клиент присутствует в 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

Share this post


Link to post
Share on other sites

${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 писать.

Share this post


Link to post
Share on other sites

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

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

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

Share this post


Link to post
Share on other sites

ну по идее клиент присутствует в 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 это интерфейс куда уходит трафик на Ваших клиентов и отттуда приходиит трафик от них ?

Share this post


Link to post
Share on other sites

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

 

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

 

сделал

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

Share this post


Link to post
Share on other sites

У нас тоже временами скорость где-нибудь да поднимется в 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 всё красиво, но на порту и в нетфлоу-- явное превышение.

Share this post


Link to post
Share on other sites

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

Share this post


Link to post
Share on other sites

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

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

Share this post


Link to post
Share on other sites

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

 

почитайте в районе 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, что несколько маловато для промышленного использования....

Share this post


Link to post
Share on other sites

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

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

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

 

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

Share this post


Link to post
Share on other sites

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

# 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

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

Share this post


Link to post
Share on other sites

Это что за версия ? (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

 

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

Share this post


Link to post
Share on other sites

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

Share this post


Link to post
Share on other sites

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

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
Sign in to follow this