Общий туннель для определенной группы клиентов на PF

Настройка сетевых служб, маршрутизации, фаерволлов. Проблемы с сетевым оборудованием.
Правила форума
Убедительная просьба юзать теги [code] при оформлении листингов.
Сообщения не оформленные должным образом имеют все шансы быть незамеченными.
Soldier
ст. сержант
Сообщения: 364
Зарегистрирован: 2008-10-02 9:28:30

Общий туннель для определенной группы клиентов на PF

Непрочитанное сообщение Soldier » 2009-11-04 7:15:51

Привет всем.
Столкнулся с трудностью, что надо сделать туннель скоростью N мбит/с для M клиентов, но на pf.
Мне предлагали уйти на ipfw, но я его недолюбливаю. странный он какой-то.

В роли NAS (сервер доступа) выступает MPD5. MPD5 получает инструкции на скорость средствами freeradius'а.

Зачем нужен туннель?
Есть группа качальщиков, чтобы они не отбирали канал у простых абонентов - надо сделать так, чтобы они все попадали в эту трубу (но только качальщики). Читал про pf+ALTQ - не понял ни слова.
Если не трудно - объясните что к чему и почему.
Заранее благодарю за ответ.
Tux: "Kill Bill !!!"

Хостинговая компания 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/

Аватара пользователя
---nebo---
старшина
Сообщения: 424
Зарегистрирован: 2008-11-01 21:06:23
Откуда: Киев
Контактная информация:

Re: Общий туннель для определенной группы клиентов на PF

Непрочитанное сообщение ---nebo--- » 2009-11-04 15:38:56

"Зарезание" скорости состоит из двух этапов: 1) создание очереди(или канала) и 2) направление нужного трафика(от определенных клиентов, или как вам угодно) в эту очередь.

Вот шорошее чтиво

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

http://house.hcn-strela.ru/BSDCert/BSDA-course/apcs02.html
Раздел 2.2.4.

Допустим у вас было правило в PF

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

pass out on $NET from any to any port 80
Нужно подрезать скорость. Дописываете:

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

altq on $NET cbq bandwidth 2Mb queue {boss , zam , other} 
queue boss       bandwidth 20% priority 1
queue zam        bandwidth 15% priority 2
queue other  bandwidth 10% priority 3 cbq (default)

pass out on $NET from any to any port 80 queue other
+смотрите на сайте
http://www.lissyara.su/?id=1671
http://www.lissyara.su/?id=1833
...участки под застройку в живописном месте Интернет

Soldier
ст. сержант
Сообщения: 364
Зарегистрирован: 2008-10-02 9:28:30

Re: Общий туннель для определенной группы клиентов на PF

Непрочитанное сообщение Soldier » 2009-11-06 10:20:56

---nebo--- писал(а):http://www.lissyara.su/?id=1671

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

# СЕКЦИЯ приоретизация и очереди ALTQ
## у меня пустая, т.к. не использую шейпинг и очереди. 
## Всем компам домашней сети доступна
## полная ширина канала без ограничений.
:crazy:
---nebo--- писал(а):altq on $NET cbq bandwidth 2Mb queue {boss , zam , other} queue boss       bandwidth 20% priority 1queue zam        bandwidth 15% priority 2queue other  bandwidth 10% priority 3 cbq (default)pass out on $NET from any to any port 80 queue other
Вот как раз это я и не могу понять.
Я не вижу чтобы тут труба делалась.
Опять же, что за $NET?
Ну и ко всему этому (извиняюсь, что не отписал ранее) у меня будет nat на машине. Натовская сеть 172.16/16.
Tux: "Kill Bill !!!"

Аватара пользователя
---nebo---
старшина
Сообщения: 424
Зарегистрирован: 2008-11-01 21:06:23
Откуда: Киев
Контактная информация:

Re: Общий туннель для определенной группы клиентов на PF

Непрочитанное сообщение ---nebo--- » 2009-11-06 18:37:25

Я не вижу чтобы тут труба делалась.
Труба здесь и не делается. Создается очередь.
ДОпустим у вас шлюз:

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

LAN---[$int]GATE[$ext]---INET
на интерфейсе вы создаете очередь, а у же в нее вы загоняете пакеты. Поступившие в очередь пакеты "толпятся" в этой очереди. Это как на выходе из супермаркета - вы стоите в очереди в кассу. Если касс - 10 шт. - одно дело, если в таком же магазине их - 2 шт. - большая задержка, соответственно скорость меньше (параметр bandwidth).

Если запросы полностью не занимают полосу пропускания - все ОК, если превышают(в случае перегрузки) - работает механизм определения приоритета пакетов, там их несколько видов(CBQ, HFSC, RED, Приоритетные, ...).

Если у вас будет NAT, то обратите внимание п.2.1.5.2

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

Трансляция осуществляется до фильтрации. Правила фильтра увидят уже оттранслированные пакеты.
Тоесть если нат у вас будет на $ext, то правила фильтра у вас увидят пакеты с источником НЕ 172.16.Х.Х , а ОТТРАНСЛИРОВАННЫЕ, тогда очередь нужно создавать на $int.
...участки под застройку в живописном месте Интернет

Soldier
ст. сержант
Сообщения: 364
Зарегистрирован: 2008-10-02 9:28:30

Re: Общий туннель для определенной группы клиентов на PF

Непрочитанное сообщение Soldier » 2009-11-08 18:22:30

---nebo--- писал(а):Тоесть если нат у вас будет на $ext, то правила фильтра у вас увидят пакеты с источником НЕ 172.16.Х.Х , а ОТТРАНСЛИРОВАННЫЕ, тогда очередь нужно создавать на $int.
Немного не понял хода мысли.
Натовская сеть у меня как раз 172.16.Х.Х, соответственно все клиенты лезут через $ext в инет.
На какой ифейс создавать очередь тогда?
Вопрос еще стоит в том - как добавить качальщиков под белыми ip в этот же туннель?

Опять же вопрос.
Выдержит ли такой метод ограничивания пользователей 1000 человек?
Просто я работаю в провайдинговой компании и для меня важен именно этот результат... ну или больше.

Еще раз благодарю за ответ.
Tux: "Kill Bill !!!"

Аватара пользователя
---nebo---
старшина
Сообщения: 424
Зарегистрирован: 2008-11-01 21:06:23
Откуда: Киев
Контактная информация:

Re: Общий туннель для определенной группы клиентов на PF

Непрочитанное сообщение ---nebo--- » 2009-11-08 20:00:00

Выдержит ли такой метод ограничивания пользователей 1000 человек?
лично у меня такого кол-ва пользователей нету, для 150 - без проблем. А вообще, если у вас будет 1000 пользователей, то просто больше нагрузка на железо, ну и, если будут проблемы, подкрутите ядро, поиграетесь с sysctl. Слыхал у ребят VPN серваки стоят MPD+PF, так по пару тысяч сессий держут и нечего, нормально :smile: . Другое дело на чем и как настроено.

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

LAN---[$int]GATE[$ext]---INET
Натовская сеть у меня как раз 172.16.Х.Х, соответственно все клиенты лезут через $ext в инет.
На какой ифейс создавать очередь тогда?
Создавайте очереди на $int, а НАТ у вас соответственно на $ext. Потому, что если создадите очереди на $ext, то ваши заначеный пакеты их(фильтрующие правила и соответственно очереди) просто не увидят.
Вопрос еще стоит в том - как добавить качальщиков под белыми ip в этот же туннель?
допустим

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

table <white_ip>     const { 1.1.1.1 , 1.1.1.2 , 1.1.1.3 } 

altq on $int cbq bandwidth 2Mb queue {user , other} 
queue user      bandwidth 20% priority 2
queue other  bandwidth 10% priority 1 cbq (default)

pass in on $int from 172.16.0.0/16 to any port 80 queue other
pass in on $int from <white_ip>      to any port 80 queue other
...участки под застройку в живописном месте Интернет

Soldier
ст. сержант
Сообщения: 364
Зарегистрирован: 2008-10-02 9:28:30

Re: Общий туннель для определенной группы клиентов на PF

Непрочитанное сообщение Soldier » 2009-11-08 21:24:24

У меня вот такие правила:

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

$ cat pf.conf
table <rfcnets> {10.0.0.0/8, !192.168.1.0/24, 192.168.0.0/16, !172.16.0.0/24, 172.16.0.0/12 }
table <vpn>     persist
#table <vpn>    {172.16.0.0/24}
table <me>      { self, 172.16.0.1}
# Options: tune the behavior of pf, default values are given.
set timeout { interval 10, frag 30 }
set timeout { tcp.first 120, tcp.opening 30, tcp.established 86400 }
set timeout { tcp.closing 900, tcp.finwait 45, tcp.closed 5 }
set timeout { udp.first 60, udp.single 30, udp.multiple 60 }
set timeout { icmp.first 20, icmp.error 10 }
set timeout { other.first 60, other.single 30, other.multiple 60 }
set timeout { adaptive.start 0, adaptive.end 0 }
set limit { states 50000, frags 5000 }
set loginterface none
#set optimization normal
set block-policy drop
set require-order yes
set fingerprints "/etc/pf.os"
#set state-policy if-bound
# Normalization: reassemble fragments and resolve or reduce traffic ambiguities.
scrub in all
nat on em0 from 172.16.0.0/16 to any -> em0
pass quick on lo from any to any
block in quick on em0 from <rfcnets> to any

# icmp
pass in quick inet proto icmp from any to <me> icmp-type echoreq keep state
# ssh
pass in quick proto tcp from any to <me> port ssh flags S/SA keep state
# http,https
pass in quick proto tcp from any to 10.10.0.2  port {443, 80} flags S/SA keep state
# dns
pass in quick proto {tcp, udp} from any to <me> port domain flags S/SA keep state
# pptp
pass in quick proto tcp from any to <me> port 1723 flags S/SA keep state
# GRE наружу
pass in quick proto gre from any to <me> keep state
pass in quick proto tcp from any to <me> port 11758 flags S/SA keep state
# MPD
pass in quick proto tcp from any to <me> port 5006 flags S/SA keep state
#SNMP
pass in quick proto udp from 10.10.10.99 to <me> port 161 keep state
block in quick from any to <me>
block quick from 172.16.0.0/16 to 172.16.0.0/16
pass in quick inet from <vpn> to any
pass in quick inet from any to <vpn>
block in quick all
block out quick on em0 from <rfcnets> to any
pass out quick from <me> to any keep state
pass out quick from <rfcnets> to <rfcnets>
pass out quick from any to <vpn>
pass out quick from <vpn> to any
block out quick all
Если не трудно, то на их примере покажите.
Еще раз благодарен за помощь.

ЗЫ. Если не трудно, смогли бы вы переделать эти правила на ipfw?
Tux: "Kill Bill !!!"

Аватара пользователя
---nebo---
старшина
Сообщения: 424
Зарегистрирован: 2008-11-01 21:06:23
Откуда: Киев
Контактная информация:

Re: Общий туннель для определенной группы клиентов на PF

Непрочитанное сообщение ---nebo--- » 2009-11-10 22:31:32

1. Как в IPFW первести след. секцию - нужно спросить у товарищей, вероятно не все можно однозначно сопоставить+функционал разный

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

set timeout { interval 10, frag 30 }
set timeout { tcp.first 120, tcp.opening 30, tcp.established 86400 }
set timeout { tcp.closing 900, tcp.finwait 45, tcp.closed 5 }
set timeout { udp.first 60, udp.single 30, udp.multiple 60 }
set timeout { icmp.first 20, icmp.error 10 }
set timeout { other.first 60, other.single 30, other.multiple 60 }
set timeout { adaptive.start 0, adaptive.end 0 }
set limit { states 50000, frags 5000 }
set fingerprints "/etc/pf.os"
scrub in all
2. Судя из конфига я уловил только один интерфейс - em0. Если их два, то напишите, если один, тогда не понятно какую функцию выполняет нат и что вообще под этим подразумевается.

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

nat on em0 from 172.16.0.0/16 to any -> em0

По остальному(перевод, без вникания в смысл что и как делает, и для чего):

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

#!/bin/sh

cmd="/sbin/ipfw"
ext="em0"
ks="keep-state"

$cmd -f flush
$cmd table all flush
$cmd add check-state

#rfcnets
$cmd table 1 add 10.0.0.0/8
$cmd table 1 add 172.16.0.0/12
$cmd table 1 add 192.168.0.0/16

#VPN
$cmd table 2 add 172.16.0.0/24

$cmd add allow all from any to any via lo
$cmd add deny  all from table\(1\) to any in via $ext
$cmd add deny  all from { not 192.168.1.0/24 or not 172.16.0.0/24 } to any in via $ext

$cmd add allow tcp  from any to any established

$cmd add allow icmp from any to me icmptypes 0,8,11 $ks
$cmd add allow tcp  from any to me 22 $ks
$cmd add allow tcp  from any to 10.10.0.2 443,80 $ks
$cmd add allow tcp  from any to me 53 $ks
$cmd add allow udp  from any to me 53 $ks
$cmd add allow tcp  from any to me 1723 $ks

$cmd add allow gre from any to me $ks
$cmd add allow tcp from any to me 11758 $ks

$cmd add allow tcp from any to me 5006 $ks
$cmd add allow udp from 10.10.10.99 to me 161 $ks

$cmd add deny all from any to me
$cmd add deny all from 172.16.0.0/16 to 172.16.0.0/16

$cmd add allow all from table\(2\) to any
$cmd add allow all from any to table\(2\)

$cmd add deny all from any to any in via $ext

$cmd add deny all from table\(1\) to any via $ext
$cmd add deny all from { not 192.168.1.0/24 or not 172.16.0.0/24 } to any via $ext
$cmd add allow all from me to any $ks
$cmd add allow all from table\(1\) to table\(1\)
$cmd add allow all from { not 192.168.1.0/24 or not 172.16.0.0/24 } to { not 192.168.1.0/24 or not 172.16.0.0/24 } via $ext

$cmd add allow all from any to table\(2\)
$cmd add allow all from table\(2\) to any

$cmd add deny all from any to any out via $ext
...участки под застройку в живописном месте Интернет

Soldier
ст. сержант
Сообщения: 364
Зарегистрирован: 2008-10-02 9:28:30

Re: Общий туннель для определенной группы клиентов на PF

Непрочитанное сообщение Soldier » 2009-11-11 7:16:01

---nebo--- писал(а):2. Судя из конфига я уловил только один интерфейс - em0. Если их два, то напишите, если один, тогда не понятно какую функцию выполняет нат и что вообще под этим подразумевается.
Ифейсов 2.
Em0 - внешний.
Em1 - внутренний.

В приведенном конфиге вы указываете:

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

#VPN
$cmd table 2 add 172.16.0.0/24
и

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

$cmd add deny  all from { not 192.168.1.0/24 or not 172.16.0.0/24 } to any in via $ext
Так же

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

$cmd add allow all from { not 192.168.1.0/24 or not 172.16.0.0/24 } to { not 192.168.1.0/24 or not 172.16.0.0/24 } via $ext
Почему сеть /24, если у меня NAT на /16 сети?
---nebo--- писал(а):1. Как в IPFW первести след. секцию - нужно спросить у товарищей, вероятно не все можно однозначно сопоставить+функционал разный
Это оптимизация pf. Я не думаю, что что переводить это есть необходимость.

Единственная просьба - объясните, куда в мой конфиг pf.conf
вставить это:

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

table <white_ip>     const { 1.1.1.1 , 1.1.1.2 , 1.1.1.3 } 

altq on $int cbq bandwidth 2Mb queue {user , other} 
queue user      bandwidth 20% priority 2
queue other  bandwidth 10% priority 1 cbq (default)

pass in on $int from 172.16.0.0/16 to any port 80 queue other
pass in on $int from <white_ip>      to any port 80 queue other
Заранее благодарен за помощь.
Tux: "Kill Bill !!!"

Аватара пользователя
---nebo---
старшина
Сообщения: 424
Зарегистрирован: 2008-11-01 21:06:23
Откуда: Киев
Контактная информация:

Re: Общий туннель для определенной группы клиентов на PF

Непрочитанное сообщение ---nebo--- » 2009-11-11 16:20:52

1.
В приведенном конфиге вы указываете:

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

#VPN
$cmd table 2 add 172.16.0.0/24
пропустил коментарий в конфиге pf.conf



2.

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

$cmd add deny  all from { not 192.168.1.0/24 or not 172.16.0.0/24 } to any out via $ext
$cmd add allow all from { not 192.168.1.0/24 or not 172.16.0.0/24 } to { not 192.168.1.0/24 or not 172.16.0.0/24 } out via $ext
это на ваше(там где !192.168.1.0/24 и !172.16.0.0/24)

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

table <rfcnets> {10.0.0.0/8, !192.168.1.0/24, 192.168.0.0/16, !172.16.0.0/24, 172.16.0.0/12 }
...
block out quick on em0 from <rfcnets> to any
pass out quick from <rfcnets> to <rfcnets>
просто эти сети не попали в таблицу table1

3.

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

 table <white_ip>     const { 1.1.1.1 , 1.1.1.2 , 1.1.1.3 }
- в ваш раздел с таблицами

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

altq on $int cbq bandwidth 2Mb queue {user , other} 
queue user      bandwidth 20% priority 2
queue other  bandwidth 10% priority 1 cbq (default)
- после scrub in all, перед НАТом.

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

pass in on $int from 172.16.0.0/16 to any port 80 queue other
pass in on $int from <white_ip>      to any port 80 queue other
- это вам решить куда его поставить, тоесть на каком моменте вы хотиче чтобы пользователи попали в очередь, поставте в самом начале.
...участки под застройку в живописном месте Интернет

Soldier
ст. сержант
Сообщения: 364
Зарегистрирован: 2008-10-02 9:28:30

Re: Общий туннель для определенной группы клиентов на PF

Непрочитанное сообщение Soldier » 2009-11-11 21:09:48

Все. Понял. спасибо.
Последний вопрос.
Я буду просто создавать очередь по портам (23, 80, 445 и т.п.) или могу задать конкретно туннель 20 mb для 192.168.1.3-192.168.1.25, 192.168.1.26 и для 192.168.1.30?
Tux: "Kill Bill !!!"

Аватара пользователя
---nebo---
старшина
Сообщения: 424
Зарегистрирован: 2008-11-01 21:06:23
Откуда: Киев
Контактная информация:

Re: Общий туннель для определенной группы клиентов на PF

Непрочитанное сообщение ---nebo--- » 2009-11-12 0:48:56

Soldier писал(а):Все. Понял. спасибо.
Последний вопрос.
Я буду просто создавать очередь по портам (23, 80, 445 и т.п.) или могу задать конкретно туннель 20 mb для 192.168.1.3-192.168.1.25, 192.168.1.26 и для 192.168.1.30?
У очереди - параметры: скорость обработки пакетов, метод обработки пакетов в ней ....
А то, какой тип трафика(23, 80, 445), и с каких адресов(192.168.1.3-192.168.1.25, 192.168.1.26) попадет в какую очередь - вы задаете ФИЛЬТРУЮЩИМИ ПРАВИЛАМИ.
...участки под застройку в живописном месте Интернет