ASPLinux 9.2
PoPToP-pptpd
pppd
VPN настроен и работает отлично. Оплата за потребленный трафик.
Возникла задача сделать почасовой доступ с ограничением по скорости в 32 и 64 Кбит.
Почитав необходимые материалы вообще, на сайте нетапа и тут, на форуме, пришел к выводу, что проще это сделать так... Маркировка пакетов в iptables меня не устраивает, поэтому...
С ограничением по скорости вопрос решился только через ppp.
Т.е. в дополнение к файлам ip-up и ip-down создал ip-up.local и ip-down.local, соответственно.
ip-up.local:
Т.е. я решил использовать iproute2 и htb (CBQ не подходит, так как неизвестен заранее интерфейс ppp). После поднятия ррр-интерфейса, скрипт извлекает выданный IP-адрес, создает необходимые устройство, классы и фильтр для него с указанной скоростью шейпинга.#!/bin/bash
# This file should not be modified -- make local changes to
# /etc/ppp/ip-up.local instead
PATH=/sbin:/usr/sbin:/bin:/usr/bin
export PATH
case "$5" in
172.16.16.1)
#IP-адрес, который необходимо шейпить
tc qdisc add dev $1 root handle 1: htb
tc class add dev $1 parent 1: classid 1:1 htb rate 100mbit ceil 100mbit burst 200k
tc class add dev $1 parent 1:1 classid 1:10 htb rate 32kbit burst 4k
tc filter add dev $1 parent 1: protocol ip prio 3 u32 match ip dst $5 classid 1:10
;;
*)
esac
exit 0
ip-down.local:
После отключения абонента, всё приводится в исходное состояние.#!/bin/bash
# This file should not be modified -- make local changes to
# /etc/ppp/ip-down.local instead
PATH=/sbin:/usr/sbin:/bin:/usr/bin
export PATH
case $1 in
172.16.16.1)
/sbin/tc qdisc del dev $1 root
;;
*)
esac
exit 0
Это работает, хотя, возможно, и в корне неправильно. Если кто-то может поправить или подсказать - буду только рад!
Далее почасовка....
Завел нового абонента, создал услугу коммутируемого доступа, назначил ее абоненту. Тариф не создавал.
Коннекчусь к серверу через VPN-соединение, соединение устанавливается. Деньги снимаются согласнопроведенному времени. Всё как надо.
Но!
Так как явно нигде не указан IP абонента (он выдается из пула), следовательно iptables ничего не знает об этом, следовательно в инет не пускают. И как я понял, в случае коммутируемого доступа, передать хоть какой-нибудь IP через правила фаервола нельзя.
Или я неправ?
Получается, что весь пул адресов нужно заранее открывать в фаерволе??? И доступ с этих адресов в инет будет всегда? В принципе, это не проблема, т.к. используется коммутируемый доступ, но всё же!
Кто-то решал подобную задачу в целом и частности???
Буду весьма рад и благодарен услышать разносторонние мнения, в том числе и от разработчиков биллинга.