Доброго времени суток. Задача такая: есть локальная сеть: 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... помогите разобраться в чем проблема. Заранее спасибо
Дык.
У Вас сначала пакеты проходят через divert, на котором, видимо, висит nat. Следовательно, при втором прохождении пакета source-address будет уже не 172.146.16.21, а тот, в который вы натите.
И, вполне естественно, что в пайпы пакеты не попадут - под условие не подходит.
Ставьте пайп до диверта.
>Дык.
>У Вас сначала пакеты проходят через divert, на котором, видимо, висит nat.
>Следовательно, при втором прохождении пакета source-address будет уже не 172.146.16.21, а
>тот, в который вы натите.
>И, вполне естественно, что в пайпы пакеты не попадут - под условие
>не подходит.
>Ставьте пайп до диверта.Хм... если я не ошибаюсь - правила читаются с конца. И в таком случае они стоят до диверта.
Но тем не менее, я сделал так как Вы посоветовали - не помогло.. да и вообще натится перестало....
sysctl -a | grep net.inet.ip.fw.one_pass ?
>sysctl -a | grep net.inet.ip.fw.one_pass ?net.inet.ip.fw.one_pass: 1
Цитирую https://www.opennet.ru/docs/RUS/ipfw/ipfw.html:net.inet.ip.fw.one_pass: 1 Когда установлено, пакет, выходящий из потока dummynet, не проходит через брандмауэр повторно, В противном случае, после обработки канала пакет повторно вводится в брандмауэр по следующему правилу.
>Цитирую https://www.opennet.ru/docs/RUS/ipfw/ipfw.html:
>
>net.inet.ip.fw.one_pass: 1 Когда установлено, пакет, выходящий из потока dummynet, не проходит через
>брандмауэр повторно, В противном случае, после обработки канала пакет повторно вводится
>в брандмауэр по следующему правилу.Хм :) Вроде вижу решение... вот только пока не пойму как реализовать :) Я еще не владею фрибсд даже на уровне пользователя уверенного :) Так вот, как изменить значение net.inet.ip.fw.one_pass на 0 ?
Вообще, man sysctl, конечно :)sysctl net.inet.ip.fw.one_pass=0 от рута.
>Вообще, man sysctl, конечно :)
>
>sysctl net.inet.ip.fw.one_pass=0 от рута.спасибо :) Проблема вроде решилась!
Пожалуйста :)
>Хм... если я не ошибаюсь - правила читаются с конца.Забыл отписаться - ошибаетесь. В противном случае у Вас срабатывало бы первым делом
>${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} add allow ip from any to any
>
>и все остальные правила были бы не задействованными.
>А, т.к. у ipfw последним правилом всегда стоит или allow ip from
>any to any или deny ip from any to any (смотря
>с какими опциями ядро собрано), а оба эти правила (allow, deny)
>являются терминирующими, то, если исходить из Вашего предположения, то смысла в
>фаерволе нет вообще никакого. И nat бы не работал в том
>числе.тоже верно ;)
нет, все таки проблема не решилась... :( поставил пайпы до диверта. и нифига.. не режет :(
В общем резать начал, но не верно. ставлю 1 мбит, а режет на 2, ставлю 256 кбит, а режет на 500. Помогите разобраться. Спасибо.
>В общем резать начал, но не верно. ставлю 1 мбит, а режет
>на 2, ставлю 256 кбит, а режет на 500. Помогите разобраться.
>Спасибо.Хелп, проблема существует! :(
>>В общем резать начал, но не верно. ставлю 1 мбит, а режет
>>на 2, ставлю 256 кбит, а режет на 500. Помогите разобраться.
>>Спасибо.
>
>Хелп, проблема существует! :(
Не мучайся!
Я так понимаю биллинг стоит?1.Научи свой радиус, чтоб мог понимать mpd
# cat dictionary
ATTRIBUTE mpd-rule 1 string mpd
ATTRIBUTE mpd-pipe 2 string mpd
ATTRIBUTE mpd-queue 3 string mpd2.После укажи в базе своих тарифов, в соответствии со скоростью
(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