FreeBSD pipes +ipNAt. (не получается ограничить скорость)

Проблемы установки, настройки и работы Правильной Операционной Системы

Модератор: terminus

Правила форума
Убедительная просьба юзать теги [cоde] при оформлении листингов.
Сообщения не оформленные должным образом имеют все шансы быть незамеченными.
Kris
проходил мимо
Сообщения: 7
Зарегистрирован: 2009-02-12 13:07:03

FreeBSD pipes +ipNAt. (не получается ограничить скорость)

Непрочитанное сообщение Kris » 2009-02-12 13:14:09

Добрый день.
Есть FreeBSD 6.2 + ipfw + ipnat. Количество клиентов = 60-700. Задача - ограничивать полосу в зависимости от того - локальный трафик или зарубежный

Правила фаервола:

Код: Выделить всё

#!/bin/sh
#Quietly flush out rules
#/usr/local/etc/list_tmp/ua.sh
/sbin/ipfw -q -f flush
cmd="/sbin/ipfw add"
fwcmd="/sbin/ipfw"
oif="em0"
iif="em1"
skip="skipto 800"
outip="10.1.100.2"
         $cmd allow ip from any to any via lo0
         $cmd deny ip from any to 127.0.0.0/8
         $cmd deny log ip from 127.0.0.0/8 to any

         $cmd allow tcp from any to any 80 in via $oif
         $cmd allow tcp from any to any 22 in via $oif setup keep-state


#FTP
         $cmd allow tcp from any to any 20,21 in via $oif
         $cmd pass tcp from any to me 50000-59999 setup
#NTP
         $cmd allow udp from any to any 123 out via $oif
         $cmd allow udp from 83.218.226.67 to any in via $oif
#DNS external

         $cmd allow udp from any to any 53 in via $oif
         $cmd allow udp from any to any 53 out via $oif
         $cmd allow udp from any to $outip in via $oif

#         $cmd allow tcp from any to any out via $oif setup keep-state
#         $cmd allow udp from any to any out via $oif keep-state

###SHAPING

         $fwcmd table 1 add 192.168.32.0/24
# UA-IX Bandwidth control

         $fwcmd pipe 1 config bw 1024Kbit/s queue 8 mask dst-ip 0xffffffff # in

         $fwcmd pipe 2 config bw 512Kbit/s queue 8 mask src-ip 0xffffffff # out


# World Bandwidth control

         $fwcmd pipe 3 config bw 512Kbit/s queue 8 mask dst-ip 0xffffffff # in

         $fwcmd pipe 4 config bw 128Kbit/s queue 8 mask src-ip 0xffffffff # out

## Pipes work

         $cmd pipe 2 ip from table\(1\) to table\(0\) keep-state out via ${oif}
         $cmd pipe 4 ip from table\(1\) to not table\(0\) keep-state out via ${oif}

#        $cmd divert natd all from table\(1\) to any out via $oif
#        $cmd divert natd all from table\(1\) to any in via $iif
#        $cmd divert natd all from any to 10.1.100.2 in via $oif


         $cmd pipe 1 ip from table\(0\) to table\(1\) in via ${oif}
         $cmd pipe 3 ip from not table\(0\) to table\(1\) in via ${oif}


#####ICMP stuff
         $cmd check-state
         $cmd allow all from any to me in via $iif setup keep-state
         $cmd allow icmp from any to any icmptypes 3
         $cmd allow icmp from any to any icmptypes 4
         $cmd allow icmp from any to any icmptypes 11
         $cmd allow icmp from any to any icmptypes 8
         $cmd allow icmp from any to any icmptypes 0
         $cmd allow tcp from any to any established
         $cmd allow ip from $outip to any out xmit $oif
         $cmd deny log tcp from any to $outip in via $oif setup
# Тут разрешаем юзверям инет, которым он разрешен
         $cmd allow tcp from table\(1\) to not table\(1\) in via $iif setup

##### This section is for exposing services to the internet from the LAN
#####  It is placed AFTER the NATD Divert rule, so these services can be
#####  diverted in /etc/natd.conf
         $cmd allow ip from table\(1\) to table\(1\) in via em1
         $cmd allow ip from table\(1\) to table\(1\) in via em1
         $cmd 65000 deny log logamount 1000 all from any to any

table\(1\) --- локальная сеть
table\(0\) --- зона UA-IX

Правила IPNAT :

cat /etc/ipnat.rules

Код: Выделить всё

map  em1 0/0 -> 0/32 proxy port ftp ftp/tcp
map  em0 192.168.32.0/24 -> 10.1.100.2 proxy port ftp ftp/tcp
map  em0 192.168.32.0/24 -> 10.1.100.2
Проблема -- пакеты не попадают в pipe :(((

Код: Выделить всё

[root@bcp-gw /etc]# ipfw show
00100   0      0 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 log logamount 5 ip from 127.0.0.0/8 to any
00400   0      0 allow tcp from any to any dst-port 80 in via em0
00500   0      0 allow tcp from any to any dst-port 22 in via em0 setup keep-state
00600   0      0 allow tcp from any to any dst-port 20,21 in via em0
00700   0      0 allow tcp from any to me dst-port 50000-59999 setup
00800   0      0 allow udp from any to any dst-port 123 out via em0
00900   0      0 allow udp from 83.218.226.67 to any in via em0
01000   0      0 allow udp from any to any dst-port 53 in via em0
01100   0      0 allow udp from any to any dst-port 53 out via em0
01200   0      0 allow udp from any to 10.1.100.2 in via em0
01300   0      0 pipe 2 ip from table(1) to table(0) out via em0 keep-state
01400   0      0 pipe 4 ip from table(1) to not table(0) out via em0 keep-state
01500   0      0 pipe 1 ip from table(0) to table(1) in via em0
01600   0      0 pipe 3 ip from not table(0) to table(1) in via em0
01700   0      0 check-state
01800   0      0 allow ip from any to me in via em1 setup keep-state
01900   0      0 allow icmp from any to any icmptypes 3
02000   0      0 allow icmp from any to any icmptypes 4
02100   0      0 allow icmp from any to any icmptypes 11
02200   0      0 allow icmp from any to any icmptypes 8
02300   0      0 allow icmp from any to any icmptypes 0
02400 104  16088 allow tcp from any to any established
02500   0      0 allow ip from 10.1.100.2 to any out xmit em0
02600   0      0 deny log logamount 5 tcp from any to 10.1.100.2 in via em0 setup
02700   0      0 allow tcp from table(1) to not table(1) in via em1 setup
02800   2    156 allow ip from table(1) to table(1) in via em1
02900   0      0 allow ip from table(1) to table(1) in via em1
65000   1    328 deny log logamount 1000 ip from any to any
65535 350 132492 allow ip from any to any
Скажите пожалуйста, как грамотно организовать правила, при условии работы с IPNAT что бы пакеты попадали в трубу ?

IPNAT - работает.
И еще одно, что отрабатывает раньше IPNAT или IPFW ? Думаю IPNAT .... но тогда как бы так завернуть пакеты, что бы пакеты попадали в трубу ...
Последний раз редактировалось hizel 2009-02-12 13:27:30, всего редактировалось 1 раз.
Причина: [code][/code]

Хостинговая компания Host-Food.ru
Хостинг HostFood.ru
 

Услуги хостинговой компании Host-Food.ru

Хостинг HostFood.ru

Тарифы на хостинг в России, от 12 рублей: https://www.host-food.ru/tariffs/hosting/
Тарифы на виртуальные сервера (VPS/VDS/KVM) в РФ, от 189 руб.: https://www.host-food.ru/tariffs/virtualny-server-vps/
Выделенные сервера, Россия, Москва, от 2000 рублей (HP Proliant G5, Intel Xeon E5430 (2.66GHz, Quad-Core, 12Mb), 8Gb RAM, 2x300Gb SAS HDD, P400i, 512Mb, BBU):
https://www.host-food.ru/tariffs/vydelennyi-server-ds/
Недорогие домены в популярных зонах: https://www.host-food.ru/domains/

Аватара пользователя
hizel
дядя поня
Сообщения: 9032
Зарегистрирован: 2007-06-29 10:05:02
Откуда: Выборг

Re: FreeBSD pipes +ipNAt. (не получается ограничить скорость)

Непрочитанное сообщение hizel » 2009-02-12 13:30:58

миль пардон, какой интерфейс в мир смотрит(аплинк) ?
В дурацкие игры он не играет. Он просто жуткий, чу-чу, паровозик, и зовут его Блейн. Блейн --- это Боль.


Аватара пользователя
hizel
дядя поня
Сообщения: 9032
Зарегистрирован: 2007-06-29 10:05:02
Откуда: Выборг

Re: FreeBSD pipes +ipNAt. (не получается ограничить скорость)

Непрочитанное сообщение hizel » 2009-02-12 13:51:52

тогда шейпить на iif :-D
В дурацкие игры он не играет. Он просто жуткий, чу-чу, паровозик, и зовут его Блейн. Блейн --- это Боль.

Kris
проходил мимо
Сообщения: 7
Зарегистрирован: 2009-02-12 13:07:03

Re: FreeBSD pipes +ipNAt. (не получается ограничить скорость)

Непрочитанное сообщение Kris » 2009-02-12 15:10:01

Попробовал поменять правила на

Код: Выделить всё

01300     0        0 pipe 2 ip from table(1) to table(0) out via em1 keep-state
01400 26602  1728820 pipe 4 ip from table(1) to not table(0) out via em1 keep-state
01500     0        0 pipe 1 ip from table(0) to table(1) in via em1
01600  5264   394060 pipe 3 ip from not table(0) to table(1) in via em1
Но это не помогло :(((((

Кроме того заметил, что очень много пакетов проходит по правилу

Код: Выделить всё

02400 68381 52687100 allow tcp from any to any established
По моему это все пакеты которые идут при загрузке канала ....
Последний раз редактировалось zingel 2009-02-12 20:18:52, всего редактировалось 1 раз.
Причина: не забывайте юзать [code][/code]

paradox
проходил мимо
Сообщения: 11620
Зарегистрирован: 2008-02-21 18:15:41

Re: FreeBSD pipes +ipNAt. (не получается ограничить скорость)

Непрочитанное сообщение paradox » 2009-02-12 15:12:02

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

Аватара пользователя
hizel
дядя поня
Сообщения: 9032
Зарегистрирован: 2007-06-29 10:05:02
Откуда: Выборг

Re: FreeBSD pipes +ipNAt. (не получается ограничить скорость)

Непрочитанное сообщение hizel » 2009-02-12 15:31:14

почему не помогло?, счетчики увеличиваются?
эээ, а зачем вы там keep-state внедрили? :shock:
В дурацкие игры он не играет. Он просто жуткий, чу-чу, паровозик, и зовут его Блейн. Блейн --- это Боль.

Kris
проходил мимо
Сообщения: 7
Зарегистрирован: 2009-02-12 13:07:03

Re: FreeBSD pipes +ipNAt. (не получается ограничить скорость)

Непрочитанное сообщение Kris » 2009-02-12 15:38:01

Да прекрасно я понимаю что делаю. Просто делаю это уже 3-и сутки .... и бросаюсь на каждую идею ....
Я знаю, что пакеты сначала проходят через ipfilter а потом только через ipfw (при условии. что они оба скомпилированы в ядро).
Неужели выход один - подгружать ipfilter как модуль ?
Или вообще плюнуть и собрать pf + ALTQ ?

Kris
проходил мимо
Сообщения: 7
Зарегистрирован: 2009-02-12 13:07:03

Re: FreeBSD pipes +ipNAt. (не получается ограничить скорость)

Непрочитанное сообщение Kris » 2009-02-12 16:16:29

Хотя нет ...ALTQ не подойдет. Он не умеет нарезать одинаковые гарантированные полосы для каждого клиента ..... мне в любом случае надо использовать pipes от ipfw ...
Подскажите пожалуйста.
Для задачи : выделить каждому клиенту (порядка 600 человек) по гарантированной полосе (1024 Mbit/s UA-IX 512 мир) из общей большой трубы. кто что использует ?
Хотя бы знать что с чем пытаться склеить .... (может ipfw + ng_nat) ?

paradox
проходил мимо
Сообщения: 11620
Зарегистрирован: 2008-02-21 18:15:41

Re: FreeBSD pipes +ipNAt. (не получается ограничить скорость)

Непрочитанное сообщение paradox » 2009-02-12 16:46:42

выделить каждому клиенту
вы с дуба не рухнули??

подходите к своей задаче с другой стороны

Kris
проходил мимо
Сообщения: 7
Зарегистрирован: 2009-02-12 13:07:03

Re: FreeBSD pipes +ipNAt. (не получается ограничить скорость)

Непрочитанное сообщение Kris » 2009-02-12 17:16:29

Подскажите пожалуйста в каком направлении двигаться ? А я уже дальше буду копать.
Ситуация такая.
Есть толстая труба в интернет.
Надо сделать так, что бы для пользователей действовали такие ограничения :

1. Входящий из UA-IX (есть скрипт обновляющия таблицу для ipfw) 1024 kbits/s
2. Исходящий в UA-IX - 128 kbits/s
3. Входящий из мира - 256 kbits/s
4. Исходящий в мир - 64 kbits/s

Полоса должна распределяться равномерно между пользователями. Учет трафика не нужет.
Поскольку нагрузка на сервер будет большая - natd я отбросил сразу ...
Какую связку посоветуете ?

Kris
проходил мимо
Сообщения: 7
Зарегистрирован: 2009-02-12 13:07:03

Re: FreeBSD pipes +ipNAt. (не получается ограничить скорость)

Непрочитанное сообщение Kris » 2009-02-12 17:48:32

Появилась еще одна идея : ipfw nat во FreeBSD 7.
Как считаете, стоит попробовать ? (насколько я понимаю в 7-ке NAT уже работает на уровне ядра). Потянет он 600 активных пользователей и при

Код: Выделить всё

[root@bcp-gw /etc]# sysctl -a | egrep -i 'hw.machine|hw.model|hw.ncpu'
hw.machine: i386
hw.model: Intel(R) Core(TM)2 Duo CPU     E6750  @ 2.66GHz
hw.ncpu: 1
hw.machine_arch: i386

Kris
проходил мимо
Сообщения: 7
Зарегистрирован: 2009-02-12 13:07:03

Re: FreeBSD pipes +ipNAt. (не получается ограничить скорость)

Непрочитанное сообщение Kris » 2009-02-12 18:44:24

Вообщем, если кто то будет еще задаваться подобным вопросом, вот линк по которому можно почитать
http://www.securitylab.ru/forum/forum21 ... /messages/

SysadminT
проходил мимо

Re: FreeBSD pipes +ipNAt. (не получается ограничить скорость)

Непрочитанное сообщение SysadminT » 2009-02-16 4:41:12

Kris писал(а):Появилась еще одна идея : ipfw nat во FreeBSD 7.
Как считаете, стоит попробовать ? (насколько я понимаю в 7-ке NAT уже работает на уровне ядра). Потянет он 600 активных пользователей и при

Код: Выделить всё

[root@bcp-gw /etc]# sysctl -a | egrep -i 'hw.machine|hw.model|hw.ncpu'
hw.machine: i386
hw.model: Intel(R) Core(TM)2 Duo CPU     E6750  @ 2.66GHz
hw.ncpu: 1
hw.machine_arch: i386
ИМХО
pf (nat) & ipfw + dummynet 2300 юзверей скорость гарантировано есть ))

Аватара пользователя
zingel
beastie
Сообщения: 6204
Зарегистрирован: 2007-10-30 3:56:49
Откуда: Moscow
Контактная информация:

Re: FreeBSD pipes +ipNAt. (не получается ограничить скорость)

Непрочитанное сообщение zingel » 2009-02-16 7:17:46

ограничивать полосу в зависимости от того - локальный трафик или зарубежный
иш чего захотел, netams ставь и не взрывай мозг
Z301171463546 - можно пожертвовать мне денег