URL: https://www.opennet.ru/cgi-bin/openforum/vsluhboard.cgi
Форум: vsluhforumID15
Нить номер: 1812
[ Назад ]

Исходное сообщение
"IPFW не режет скорость"

Отправлено stufford , 04-Мрт-08 02:22 
Доброго времени суток. Задача такая: есть локальная сеть: 10.10.16.0, есть сеть провайдера: 192.168.7.0. стоит сервер маршрутизации на FreeBSD c mpd5. Все подключается. NAT работает. но вот только скорость не режет. надо на каждого пользователя резать скорость. у всех скорость должна соответствовать тарифному плану. В конфиге вписан только один пользователь для теста.

в ipfw пишу вот так:

#!/bin/sh
ipfw='/sbin/ipfw -q'

VPN="172.146.16.0" #Виртуальная внп-сеть
NetIn="10.10.16.0"    # Внутренняя сеть
NetMask="24"            # маска сети
IpOut="192.168.7.217" # внешний IP адрес машины
LanOut="rl0"            # внешний интерфейс
LanIn="rl1"             # внутренний интерфейс

${ipfw} -f flush
${ipfw} add check-state

${ipfw} add divert natd ip from ${VPN}/${NetMask} to any out via ${LanOut}
${ipfw} add divert natd ip from any to ${IpOut} in via ${LanOut}
${ipfw} add allow udp from any 53 to any via ${LanOut}
${ipfw} add allow tcp from any to any established
${ipfw} add allow udp from any 53 to any via ${LanOut}
${ipfw} add allow udp from any to any 123 via ${LanOut}

${ipfw} -f pipe flush

${ipfw} add pipe 3 ip from any to 172.146.16.21 in
${ipfw} add pipe 3 ip from 172.146.16.21 to any out
${ipfw} pipe 3 config bw 1Mbit/s queue 10

${ipfw} add allow ip from any to any

скорость не режет... хоть убей.. в ядре прописано DUMMYNET... помогите разобраться в чем проблема. Заранее спасибо



Содержание

Сообщения в этом обсуждении
"IPFW не режет скорость"
Отправлено MOV_ah , 04-Мрт-08 09:01 
Дык.
У Вас сначала пакеты проходят через divert, на котором, видимо, висит nat. Следовательно, при втором прохождении пакета source-address будет уже не 172.146.16.21, а тот, в который вы натите.
И, вполне естественно, что в пайпы пакеты не попадут - под условие не подходит.
Ставьте пайп до диверта.

"IPFW не режет скорость"
Отправлено stufford , 04-Мрт-08 12:20 
>Дык.
>У Вас сначала пакеты проходят через divert, на котором, видимо, висит nat.
>Следовательно, при втором прохождении пакета source-address будет уже не 172.146.16.21, а
>тот, в который вы натите.
>И, вполне естественно, что в пайпы пакеты не попадут - под условие
>не подходит.
>Ставьте пайп до диверта.

Хм... если я не ошибаюсь - правила читаются с конца. И в таком случае они стоят до диверта.
Но тем не менее, я сделал так как Вы посоветовали - не помогло.. да и вообще натится перестало....


"IPFW не режет скорость"
Отправлено MOV_ah , 04-Мрт-08 12:23 
sysctl -a | grep net.inet.ip.fw.one_pass ?

"IPFW не режет скорость"
Отправлено stufford , 04-Мрт-08 12:44 
>sysctl -a | grep net.inet.ip.fw.one_pass ?

net.inet.ip.fw.one_pass: 1


"IPFW не режет скорость"
Отправлено MOV_ah , 04-Мрт-08 12:52 
Цитирую https://www.opennet.ru/docs/RUS/ipfw/ipfw.html:

net.inet.ip.fw.one_pass: 1 Когда установлено, пакет, выходящий из потока dummynet, не проходит через брандмауэр повторно, В противном случае, после обработки канала пакет повторно вводится в брандмауэр по следующему правилу.


"IPFW не режет скорость"
Отправлено stufford , 04-Мрт-08 12:59 
>Цитирую https://www.opennet.ru/docs/RUS/ipfw/ipfw.html:
>
>net.inet.ip.fw.one_pass: 1 Когда установлено, пакет, выходящий из потока dummynet, не проходит через
>брандмауэр повторно, В противном случае, после обработки канала пакет повторно вводится
>в брандмауэр по следующему правилу.

Хм :) Вроде вижу решение... вот только пока не пойму как реализовать :) Я еще не владею фрибсд даже на уровне пользователя уверенного :) Так вот, как изменить значение net.inet.ip.fw.one_pass на 0 ?


"IPFW не режет скорость"
Отправлено MOV_ah , 04-Мрт-08 13:03 
Вообще, man sysctl, конечно :)

sysctl net.inet.ip.fw.one_pass=0 от рута.


"IPFW не режет скорость"
Отправлено stufford , 04-Мрт-08 13:12 
>Вообще, man sysctl, конечно :)
>
>sysctl net.inet.ip.fw.one_pass=0 от рута.

спасибо :) Проблема вроде решилась!


"IPFW не режет скорость"
Отправлено MOV_ah , 04-Мрт-08 13:17 
Пожалуйста :)


>Хм... если я не ошибаюсь - правила читаются с конца.

Забыл отписаться - ошибаетесь. В противном случае у Вас срабатывало бы первым делом
>${ipfw} add allow ip from any to any

и все остальные правила были бы не задействованными.
А, т.к. у ipfw последним правилом всегда стоит или allow ip from any to any или deny ip from any to any (смотря с какими опциями ядро собрано), а оба эти правила (allow, deny) являются терминирующими, то, если исходить из Вашего предположения, то смысла в фаерволе нет вообще никакого. И nat бы не работал в том числе.


"IPFW не режет скорость"
Отправлено stufford , 04-Мрт-08 13:29 
>[оверквотинг удален]
>делом
>>${ipfw} add allow ip from any to any
>
>и все остальные правила были бы не задействованными.
>А, т.к. у ipfw последним правилом всегда стоит или allow ip from
>any to any или deny ip from any to any (смотря
>с какими опциями ядро собрано), а оба эти правила (allow, deny)
>являются терминирующими, то, если исходить из Вашего предположения, то смысла в
>фаерволе нет вообще никакого. И nat бы не работал в том
>числе.

тоже верно ;)


"IPFW не режет скорость"
Отправлено stufford , 04-Мрт-08 14:58 
нет, все таки проблема не решилась... :( поставил пайпы до диверта. и нифига.. не режет :(

"IPFW не режет скорость"
Отправлено stufford , 04-Мрт-08 16:10 
В общем резать начал, но не верно. ставлю 1 мбит, а режет на 2, ставлю 256 кбит, а режет на 500. Помогите разобраться. Спасибо.

"IPFW не режет скорость"
Отправлено stufford , 06-Мрт-08 13:25 
>В общем резать начал, но не верно. ставлю 1 мбит, а режет
>на 2, ставлю 256 кбит, а режет на 500. Помогите разобраться.
>Спасибо.

Хелп, проблема существует! :(


"IPFW не режет скорость"
Отправлено Touch , 06-Мрт-08 14:25 
>>В общем резать начал, но не верно. ставлю 1 мбит, а режет
>>на 2, ставлю 256 кбит, а режет на 500. Помогите разобраться.
>>Спасибо.
>
>Хелп, проблема существует! :(

http://ipfw.ism.kiev.ua/


"IPFW не режет скорость"
Отправлено PeNDaL , 27-Мрт-08 10:14 
Не мучайся!
Я так понимаю биллинг стоит?

1.Научи свой радиус, чтоб мог понимать mpd
# cat dictionary
ATTRIBUTE       mpd-rule        1       string          mpd
ATTRIBUTE       mpd-pipe        2       string          mpd
ATTRIBUTE       mpd-queue       3       string          mpd

2.После укажи в базе своих тарифов, в соответствии со скоростью
(mpd может передавать правила ipwf)

Acct-Interim-Interval = 60, Service-Type = Framed-User, mpd-pipe += '1=bw 526Kbit/s', mpd-pipe += '5=bw 526Kbit/s', mpd-rule += '1=pipe %p1 tcp from any to any in', mpd-rule += '2=pipe %p5 tcp from any to any out'


3.После этого должно получится
ipfw list | grep pipe
10000 pipe 10000 tcp from any to any in via ng1
10001 pipe 10001 tcp from any to any out via ng1
10002 pipe 10002 tcp from any to any in via ng8
10003 pipe 10003 tcp from any to any out via ng8
10004 pipe 10004 tcp from any to any in via ng10
10005 pipe 10005 tcp from any to any out via ng10
10006 pipe 10006 tcp from any to any in via ng2
10007 pipe 10007 tcp from any to any out via ng2
10008 pipe 10008 tcp from any to any in via ng9
10009 pipe 10009 tcp from any to any out via ng9
10012 pipe 10012 tcp from any to any in via ng5
10013 pipe 10013 tcp from any to any out via ng5
10014 pipe 10014 tcp from any to any in via ng15
10015 pipe 10015 tcp from any to any out via ng15
10030 pipe 10030 tcp from any to any in via ng21
10031 pipe 10031 tcp from any to any out via ng21

Прошу заметить, что шейпится интерфейс и не нужно себе ломать голову с подсетями и ip. В данном методе назначай ip какие хочешь

p.s. Извените за столь скудное описание! Небыло времени! Данное описание подходит для связки FREENIBS1.9+FREERADIUS1.1.7+MPD4.4+IPFW