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

Вопрос по шейпингу посредством ipfw на freebsd

Не получается разобраться с проблемой, подскажите пути решения и где я не прав. FreeBSD 8.2+natd+ipfw В организации есть общий канал, порядка 80Мбит, в некоторых локальных подсетях установлены роутеры\точки доступа wi-fi, используемые адреса у которых хотелось бы ограничить по скорости), ну и чтобы на других пользователей ограничения ни коем образом не сказывались. Предполагаю реализовать следующим образом (пока с использованием одной таблицы, у каждого адреса точки должны быть свои 512Кбит):

 

 #!/bin/sh 

        fwcmd="/sbin/ipfw" 

        ${fwcmd} -f flush 
        ${fwcmd} -f pipe flush 
#      ${fwcmd} -f queue flush 
        ${fwcmd} table 1 flush 

#      ${fwcmd} pipe 1 config bw 512Kbit/s buckets 128 mask dst-ip 0x000000ff 
#      ${fwcmd} pipe 2 config bw 512Kbit/s buckets 128 mask src-ip 0x000000ff 
        ${fwcmd} pipe 1 config bw 512Kbit/s buckets 128 mask dst-ip 0xffffffff 
        ${fwcmd} pipe 2 config bw 512Kbit/s buckets 128 mask src-ip 0xffffffff 
        ${fwcmd} add 11 pipe 1 ip from any to table\(1\) out 
        ${fwcmd} add 12 pipe 2 ip from table\(1\) to any in 
        ${fwcmd} table 1 add 192.168.0.200 
        ${fwcmd} table 1 add 192.168.2.30 
        ${fwcmd} table 1 add 192.168.0.222 
        ${fwcmd} table 1 add 192.168.9.30 

        ...   

Какое-то время работает исправно, после у всех адресов, помещенных в table, инет встает колом, т.е. перестают грузиться страницы вообще, при этом тот же пинг проходит ровно. Убираешь IP из таблицы, все нормализуется. Если в таблицу добавить новый IP, то к нему применяются ограничения и он работает в рамках положенной скорости совершенно правильно. Ощущение, что забиваются то ли кэши какие, то ли очереди, таблицы, кто может подсказать куда копать?

Share this post


Link to post
Share on other sites

ipfw show

Немного поясню по выводу ниже, после правил natd и check-state идут разрешающие правила для доступа пользователей к локальным портам DNS, SQUID-а, адресу и портам корпоративной почты, прохождению icmp, разрешающие прохождения трафика с самого шлюза наружу, прочие разрешающие прохождение трафика правила под определенные IP и конкретные нужды, дабы не перегружать, я опустил все эти фрагменты.

У адресов, которые в т.ч. на wi-fi точках, которые нужно зашейпить, доступ наружу полный и прямой (т.е. allow ip from 192.168.0.200 to any keep-state), завершающими идут все для всех запрещено.

 

00011    51449   19448020 pipe 1 ip from any to table(1) out
00012    69410   36623503 pipe 2 ip from table(1) to any in
00100  1960240 2704227026 allow ip from any to any via lo0
00200        0          0 deny ip from any to 127.0.0.0/8
00300        0          0 deny ip from 127.0.0.0/8 to any
...
...
00900   508900  361048541 divert 8668 ip from 192.168.0.0/24 to any out via msk0
00910        0          0 divert 8669 ip from 192.168.0.0/24 to any out via msk2
01000      141      11160 divert 8668 ip from 192.168.1.0/24 to any out via msk0
01010        0          0 divert 8669 ip from 192.168.1.0/24 to any out via msk2
01100     9995    1480436 divert 8668 ip from 192.168.2.0/24 to any out via msk0
01110        0          0 divert 8669 ip from 192.168.2.0/24 to any out via msk2
01200     4482     773504 divert 8668 ip from 192.168.3.0/24 to any out via msk0
01210        0          0 divert 8669 ip from 192.168.3.0/24 to any out via msk2
01300    18730    7281521 divert 8668 ip from 192.168.4.0/24 to any out via msk0
01310        0          0 divert 8669 ip from 192.168.4.0/24 to any out via msk2
01400   115139   16669005 divert 8668 ip from 192.168.5.0/24 to any out via msk0
01410        0          0 divert 8669 ip from 192.168.5.0/24 to any out via msk2
01500    23037    9370001 divert 8668 ip from 192.168.6.0/24 to any out via msk0
01510        0          0 divert 8669 ip from 192.168.6.0/24 to any out via msk2
01600     3693     167808 divert 8668 ip from 192.168.7.0/24 to any out via msk0
01610        0          0 divert 8669 ip from 192.168.7.0/24 to any out via msk2
01700        0          0 divert 8668 ip from 192.168.8.0/24 to any out via msk0
01710        0          0 divert 8669 ip from 192.168.8.0/24 to any out via msk2
01800  1315376  421028446 divert 8668 ip from 192.168.9.0/24 to any out via msk0
01810        2        248 divert 8669 ip from 192.168.9.0/24 to any out via msk2
01900        2        120 divert 8668 ip from 192.168.10.0/24 to any out via msk0
01910        0          0 divert 8669 ip from 192.168.10.0/24 to any out via msk2
02100    48778   11860451 divert 8668 ip from 192.168.11.0/24 to any out via msk0
02110        1         47 divert 8669 ip from 192.168.11.0/24 to any out via msk2
02200    58961   11038970 divert 8668 ip from 192.168.12.0/24 to any out via msk0
02210        0          0 divert 8669 ip from 192.168.12.0/24 to any out via msk2
02320        0          0 divert 8668 ip from 192.168.40.0/24 to any out via msk0
02330        0          0 divert 8669 ip from 192.168.40.0/24 to any out via msk2
02400  5959110 5338402459 divert 8668 ip from any to **.***.***.*** in via msk0
02410      701      44535 divert 8668 ip from any to **.***.***.*** in via msk0
02450    17312    9943219 divert 8669 ip from any to ***.***.***.*** in via msk2
02500        0          0 check-state
...
...
23700  1212959  570924307 deny log logamount 1000 ip from any to any
65535        1        282 deny ip from any to any

 

ipfw pipe show в момент проблемы

Вчера вечером перегружал шлюз, сегодня как начнется затык, приложу вывод pipe show.

Share this post


Link to post
Share on other sites

Wi-Fi точки\роутеры "лежат", при этом обычное рабочее место с виндой работает исправно.

 

# ipfw pipe show
00001:   1.000 Mbit/s    0 ms burst 0 
q131073  50 sl. 0 flows (1 buckets) sched 65537 weight 0 lmax 0 pri 0 droptail
sched 65537 type FIFO flags 0x1 128 buckets 2 active
   mask:  0x00 0x00000000/0x0000 -> 0x000000ff/0x0000
BKT Prot ___Source IP/port____ ____Dest. IP/port____ Tot_pkt/bytes Pkt/Byte Drp
20 ip           0.0.0.0/0            0.0.0.20/0        3      388  0    0   0
177 ip           0.0.0.0/0           0.0.0.177/0        5     1518  0    0   0
00002:   1.000 Mbit/s    0 ms burst 0 
q131074  50 sl. 0 flows (1 buckets) sched 65538 weight 0 lmax 0 pri 0 droptail
sched 65538 type FIFO flags 0x1 128 buckets 2 active
   mask:  0x00 0x000000ff/0x0000 -> 0x00000000/0x0000
BKT Prot ___Source IP/port____ ____Dest. IP/port____ Tot_pkt/bytes Pkt/Byte Drp
40 ip          0.0.0.20/0             0.0.0.0/0        4      237  0    0   0
98 ip         0.0.0.177/0             0.0.0.0/0       10      556  0    0   0

 

# ipfw table 1 list
192.168.2.20/32 0
192.168.2.177/32 0
192.168.3.178/32 0
192.168.9.205/32 0

Share this post


Link to post
Share on other sites

Похоже разобрался.

Рабочее место, на котором все работало, и сбивало с толку, имело двухсторонние разрешающие правила:

 

10800    22237    3944560 allow ip from 192.168.9.205 to any
10900    59352   62791890 allow ip from any to 192.168.9.205

А все адреса точек динамические:

 

14800    56514   42658391 allow ip from 192.168.3.178 to any keep-state

net.inet.ip.fw.one_pass=0 выставлено не было, соответственно после прохождения шейпинга последующие правила не применялись, а по умолчанию в системе deny ip from any to any.

Но только почему вначале все работало тем не менее, а только спустя время затыкалось, а не сразу, не совсем мне понятно.

Вернее дело в задании check-state в списке правил, которое походу при net.inet.ip.fw.one_pass=1 шло лесом получается.

Share this post


Link to post
Share on other sites

Join the conversation

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

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.