The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]




Версия для распечатки Пред. тема | След. тема
Новые ответы [ Отслеживать ]
Помогите разобраться в правилах?, !*! asphix, 09-Июл-08, 00:35  [смотреть все]
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

то инет вообще перестаёт работать.

Очень надеюсь на помощь сообщества!

  • Помогите разобраться в правилах?, !*! RSG, 10:41 , 14-Июл-08 (1)
    >[оверквотинг удален]
    ># Запрещаем всё остальное
    >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

    А зачем определено значение queue ?
    Ifconfig + описание где внутренний, а где внешний интерфейс.

    • Помогите разобраться в правилах?, !*! asphix, 11:41 , 14-Июл-08 (2)
      >[оверквотинг удален]
      >>
      >>Подскажите, что не так? Всю голову сломал :-( Предположительно где-то пакеты совершают
      >>два прохода, но где - не пойму.. если в правилах указать
      >>направления, типа:
      >># выпускаем юзеров в инет
      >>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
      >
      >А зачем определено значение queue ?
      >Ifconfig + описание где внутренний, а где внешний интерфейс.

      дело не в queue.

      fxp0 - внешний
      em0 - внутренний

      Тут косяк со вторым проходом где-то :(

      • Помогите разобраться в правилах?, !*! RSG, 09:48 , 15-Июл-08 (3)
        >[оверквотинг удален]
        >>
        >>А зачем определено значение queue ?
        >>Ifconfig + описание где внутренний, а где внешний интерфейс.
        >
        >дело не в queue.
        >
        > fxp0 - внешний
        > em0 - внутренний
        >
        >Тут косяк со вторым проходом где-то :(

        Это понятно что дело не в размере очереди... Просто не вижу глубокого смысла определять размер очерди..

        Интересуют IP на интерфейсах. Я правильно понимаю, что 10.101.0.5 это ip пользователя?

  • Помогите разобраться в правилах?, !*! RSG, 10:10 , 15-Июл-08 (4)
    >[оверквотинг удален]
    >
    ># Запрещаем всё остальное
    >ipfw add 65530 deny all from any to any
    >два прохода, но где - не пойму.. если в правилах указать
    >направления, типа:
    ># выпускаем юзеров в инет
    >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
    >
    > то инет вообще перестаёт работать.

    Правила 30000 и 30010 срабатывают на внутреннем интерфейсе em0, по этому правильнее было бы писать

    ipfw add 30000 pipe 2 ip from any to 10.101.0.5 out
    ipfw add 30010 pipe 1 ip from 10.101.0.5 to any in

    Как я понимаю надо ограничить ширину канала для 10.101.0.5 т.е. для одного Ip-адреса. И для этого одного адреса есть один пайп. Как результат указывать маску в конфиге пайпа не нужно.

    Потом... так как у Вас написано, в пайпе 1 маска из конфига применяется к dst-ip, т.е. канал выделяется для каждого отдельного ипа на который идет соединение. С пайпом 2 все с точности до наобарот.


    На заметку :

    MASK SRC-IP/DST-IP mask - инвертированая маска.  /24 - 0.255.255.255
    однако /32 - 255.255.255.255, all - 0.0.0.0

                                     ip1        ip2
                                    1.1.1.1   1.1.2.1
    mask src-ip/dst-ip   0.0.0.ff  0.0.0.ff
    result                      0.0.0.1 = 0.0.0.1 => одна труба


                                      ip1        ip2
                                  1.1.1.1    1.1.2.1
    mask src-ip/dst-ip   0.0.ff.ff  0.0.ff.ff
    result                      0.0.1.1 <> 0.0.2.1 => разные трубы


    Есть возможность указать сразу префикс сети, и для каждого ипа из этого  префикса установить ширину канала:

    Например:

    ipfw pipe 1 config bw 64KB/s mask dst-ip 0xffffffff
    ipfw add 50 pipe 1 ip from any to 10.0.0.0/24

    При этом _каждый_ хост из диапазона 10.0.0.1-10.0.0.254 получит полосу
    по 64KB/s, т.е. на каждый IP будет создана отдельная pipe.

    • Помогите разобраться в правилах?, !*! asphix, 12:46 , 15-Июл-08 (5)
      >[оверквотинг удален]
      >>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
      >>
      >> то инет вообще перестаёт работать.
      >
      >Правила 30000 и 30010 срабатывают на внутреннем интерфейсе em0, по этому правильнее
      >было бы писать
      >
      >ipfw add 30000 pipe 2 ip from any to 10.101.0.5 out
      >ipfw add 30010 pipe 1 ip from 10.101.0.5 to any in

      так тоже пробовал. Инет таки не пашет.. почему и грешу на проходы..


      >Как я понимаю надо ограничить ширину канала для 10.101.0.5 т.е. для одного
      >Ip-адреса. И для этого одного адреса есть один пайп. Как результат
      >указывать маску в конфиге пайпа не нужно.

      На самом деле начиная с № 30000 - правила для многих юзеров добавляются динамически. Т.е. идея была создать общий пайп для безлимитчиков так, чтобы в него загонять любые ип, поэтому применил маску.. наверное имеет смысл создавать для каждого ип свой пайп..


      • Помогите разобраться в правилах?, !*! RSG, 14:31 , 15-Июл-08 (6)
        >>[оверквотинг удален]
        > На самом деле начиная с № 30000 - правила для многих
        >юзеров добавляются динамически. Т.е. идея была создать общий пайп для безлимитчиков
        >так, чтобы в него загонять любые ип, поэтому применил маску.. наверное
        >имеет смысл создавать для каждого ип свой пайп..

        Макски то зачем если всех в один пайп пихаешь?
        Можно сделать несколько правил с таблицами. На каждое правило свой пайп без всяких масок. Пользователей динамически помещать в нужную таблицу и они будут делить между собой этот общий пайп.

        >ipfw add 30000 pipe 2 ip from any to 10.101.0.5 out
        >ipfw add 30010 pipe 1 ip from 10.101.0.5 to any in
        >так тоже пробовал. Инет таки не пашет.. почему и грешу на проходы..

        Посмотри tcpdump'ом, видешь входящие пакеты на внутренеем интерфейсе при таком написании правил? И поправь конфиги к пайпам, если ты всех в одну трубу загоняешь, то тебе не надо ни масок указыать ни размер очереди определять.




Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2024 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру