hi, all!FreeBSD 6.0
Есть скрипт файрволла. В целом работает, но есть две проблемки, решение которых ниасилил, сколько вариантов не пробовал:
1. Исходящая скорость юзера ровно в два раза меньше размера пайпа, со входящей всё нормально.
2. Если юзер начинает качать с торрента, то, к примеру при пайпе в 64Кбит/с такую скорость он получает с каждого пира, что в итоге приводит к забиванию канала :(
Сам скрипт:
# Сброс текущих правил, пайпов и таблиц
ipfw -f flush
ipfw -f pipe flush
# юзерский сегмент
ipfw table 1 flush
# Описания интерфейсов
ext="fxp0"
int="em0"
srv="em1"
# Пайпы для безлимитных тарифов
ipfw pipe 1 config mask dst-ip 0xffffffff bw 64Kbit/s queue 4Kbytes
ipfw pipe 2 config mask src-ip 0xffffffff bw 64Kbit/s queue 4Kbytes
ipfw pipe 3 config mask dst-ip 0xffffffff bw 128Kbit/s queue 8Kbytes
ipfw pipe 4 config mask src-ip 0xffffffff bw 128Kbit/s queue 8Kbytes
# some security
ipfw add 30 pass all from any to any via lo0
ipfw add 40 deny all from any to 127.0.0.0/8
ipfw add 50 deny all from 127.0.0.0/8 to any
# NAT
ipfw add 70 divert natd ip from any to any out via ${ext}
ipfw add 80 divert natd ip from any to me in via ${ext}
# Разрешаем icmp-протокол
ipfw add 90 pass icmp from any to any in icmptype 0,3,4,11,12
ipfw add 100 pass icmp from any to any out icmptype 3,8,12
# Разрешаем раздачу адресов по DHCP
ipfw add 110 pass udp from 0.0.0.0 68 to me 67 in recv ${int}
ipfw add 120 pass udp from any 68 to 255.255.255.255 67 in recv ${int}
ipfw add 130 pass udp from me 67 to 255.255.255.255 68 out xmit ${int}
# Разрешаем юзерам подключатся к серверу для авторизации
ipfw add 165 pass tcp from 'table(1)' to me via ${int}
ipfw add 170 pass udp from 'table(1)' to me 5555 in via ${int}
ipfw add 180 pass udp from me 5555 to 'table(1)' out via ${int}
# Разрешаем dns-запросы и ntp для всех
ipfw add 190 pass udp from any to any 53,123
ipfw add 200 pass udp from any 53,123 to any
# Разрешаем роутеру связь с миром
ipfw add 210 pass ip from me to any keep-state
# выпускаем юзеров в инет
ipfw add 30000 pipe 2 ip from any to 10.101.0.5
ipfw add 30010 pipe 1 ip from 10.101.0.5 to any
# Запрещаем всё остальное
ipfw add 65530 deny all from any to any
-------------------8<---------------------------
Подскажите, что не так? Всю голову сломал :-( Предположительно где-то пакеты совершают два прохода, но где - не пойму.. если в правилах указать направления, типа:
# выпускаем юзеров в инет
ipfw add 30000 pipe 2 ip from any to 10.101.0.5 in
ipfw add 30010 pipe 1 ip from 10.101.0.5 to any out
то инет вообще перестаёт работать.
Очень надеюсь на помощь сообщества!