From: Sergey Ivanov <seriv@parkheights.dyndns.org>
To: ALT Linux Community <community@lists.altlinux.org>
Subject: Re: [Comm] Снова про htb
Date: Fri, 02 Dec 2005 11:14:50 -0500
Message-ID: <439072FA.4010608@parkheights.dyndns.org> (raw)
In-Reply-To: <op.s01wjikiglg102@post.cnt.ru>
Владимир Гусев wrote:
> Здравствуйте!
>
> Кому-нибудь удалось разобраться с htb? Кто-нибудь из участников
> рассылки уже применяет htb для управления исходящим траффиком на ADSL
> ? Поделитесь опытом и конфигами-образцами.. Никак не могу въехать,
> хотя теорию вопроса в принципе понял..
>
Попробую описать, как обстоит дело с htb в Сизифе. Основной инструмент
для конфигурации - пакет etcnet.
1. Я советую, поставив этот пакет, сначала спрятать куда-нибудь все
директроии интерфейсов из /etc/net/ifaces ( кроме lo, default и
unknown) и запустить /etc/net/scripts/initconf. Его выдачу сохранить и
на основании этой выдачи организовать файл /etc/net/iftab, который
определит логические имена интерфейсов. Например, одну сетевую карту
можно из eth0 переименовать в соответствии с её макадресом в wan, другую
- в lan. Я для себя использовал вместо wan имя провайдера (comcast), а
вместо lan - придуманное самим имя локального домена своей сети
192.168.10.0/24 (menlo). Ну и дальше буду их использовать, чтобы не
ошибиться где-нибудь заменяя их на более нейтральные типа wan и lan.
Далее создайте директории с именами определёнными в таблице
/etc/net/iftab, внутри /etc/ifaces. Я создал /etc/net/ifaces/comcast и
/etc/net/ifaces/comcast. И положил туда нужные мне файлы options. Для
внешней сети comcast достаточно определить TYPE и BOOTPROTO, я добавил
строчку MODULE как того рекомендовал initconf:
---
# cat <<EOF >/etc/net/ifaces/comcast/options
TYPE=eth
BOOTPROTO=dhcp
MODULE=tulip
EOF
---
Для интерфейса локальной сети menlo адрес задан статически, так что там
кроме файла options ещё нужен файл ipv4address:
---
# cat <<EOF >/etc/net/ifaces/menlo/options
TYPE=eth
BOOTPROTO=static
MODULE=natsemi
EOF
# echo "192.168.10.1/24" >/etc/net/ifaces/menlo/ipv4address
---
2. Дальше настраиваете ip-forwarding и nat masquarading. За первый
отвечает строчка
net.ipv4.ip_forward = 1
в файле /etc/net/sysctl.conf, в то время как другое делается добавлением
строки
"masquerade out-iface comcast"
в файл /etc/net/ifaces/default/fw/iptables/nat/POSTROUTING:
---
echo "masquerade out-iface comcast"
>>/etc/net/ifaces/default/fw/iptables/nat/POSTROUTING
---
После этого ваш раутер после # service network restart уже должен начать
выполнять свою функцию разделения доступа в интернет.
3. Далее я настраивал распознавание и маркирование пакетов, кторым надо
было обеспечить гарантированную ширину пропускания канала. Для меня это
были два телефонных адаптера, которые не искажают звук только если им
предоставлены 10 килобит в секунду. Эти адаптеры стоят в локальной сети
и dhcp сервер по их макадресам даёт им статические адреса. Эти адреса я
и использовал в качестве критерия для маркировки. Маркировка
обеспечивается следующим образом:
---
#cat <<EOF >/etc/net/ifaces/default/fw/iptables/mangle/PREROUTING
mark 21 if from 192.168.10.21 from-iface menlo
mark 22 if from 192.168.10.5 from-iface menlo
EOF
---
Мысль для себя на будущее: наверно можно было маркировать по мак-адресу,
и тем самым избежать необходимости настраивать статические адреса
выдаваемые dhcpd.
4. Ну а теперь остаётся самое настроить qos htb для идущего наружу
интерфейса comcast.
---
## создаём дисциплину 1
# mkdir -p /etc/net/ifaces/comcast/qos/1
## определяем что эта дисциплина - htb
## и её дефолтный класс для неклассифицированного траффика 77.
# echo "htb default 77" /etc/net/ifaces/comcast/qos/1/qdisc
## создаём корневой класс 1 (1:1)
# mkdir /etc/net/ifaces/comcast/qos/1/1
## определяем ширину пропускания интерфейса (upload)
# echo "htb rate 360kbps" /etc/net/ifaces/comcast/qos/1/1/class
## создаём класс для первого телефонного адаптера
# mkdir /etc/net/ifaces/comcast/qos/1/1/21/
## определяем для него ширину пропускания 80 килобит/сек.
# echo "htb rate 80kbps" >/etc/net/ifaces/comcast/qos/1/1/21/class
## задаём фильтр этого класса, отбирающий для него пакеты с маркой "21"
# echo "protocol ip prio 1 handle 21 fw"
>/etc/net/ifaces/comcast/qos/1/1/21/filter
## создаём класс для второго телефонного адаптера
# mkdir /etc/net/ifaces/comcast/qos/1/1/22/
## определяем для него ширину пропускания 80 килобит/сек.
# echo "htb rate 80kbps" >/etc/net/ifaces/comcast/qos/1/1/22/class
## задаём фильтр этого класса, отбирающий для него пакеты с маркой "22"
# echo "protocol ip prio 1 handle 22 fw"
>/etc/net/ifaces/comcast/qos/1/1/22/filter
## создаём класс для дефолтного траффика:
# mkdir /etc/net/ifaces/comcast/qos/1/1/77/
## определяем для него ширину пропускания 200 (= 360 - (80 + 80))
килобит/сек.
## с возможностью заимствования неиспользуемого в данный момент траффика
других классов
## вплоть до 360kbps, то есть полной ширины исходящего канала
# echo "htb rate 200kbps ceil 360kbps"
>/etc/net/ifaces/comcast/qos/1/1/77/class
---
И, если бы etcnet поддерживал htb, то больше ничего не надо бы делать.
Однако увы, приходится портить его скрипты, так как они не обращают
внимания на то, что фильтры должны прикрепляться к корню, то есть к
дисциплине 1:, то есть к директории /etc/net/ifaces/comcast/qos/1, хотя
и иметь в качестве направления фильтрации именно тот класс в директории
которого созданы.
Так что берём и заменяем строчку
---
$TC filter add dev $NAME $PARENTNODE `head -1 $NODEDIR/extra.filter
2>/dev/null` $FILTEREXPR flowid $NODEID
---
в файле /etc/net/scripts/config-qos
на строчку:
---
$TC filter add dev $NAME parent 1\:0 `head -1 $NODEDIR/extra.filter
2>/dev/null` $FILTEREXPR flowid $NODEID
---
Строчка "parent 1\:0" согласована с тем, что корневую дисциплину этого
интерфейса я назвал дисциплиной "1".
Теперь телефонам будет предоставляться 80 килобит в секунду как только
они того потребуют, а если они недоиспользуют эти 80kbps, всё оставшееся
будет предоставляться другим соединениям.
Других дисциплин, кроме htb, не пробовал. Возможно, что для них
правильно именно так, как устроено изначально в файле
/etc/net/scripts/config-qos
--
С уважением,
Сергей Иванов.
next prev parent reply other threads:[~2005-12-02 16:14 UTC|newest]
Thread overview: 21+ messages / expand[flat|nested] mbox.gz Atom feed top
2005-11-30 11:22 Владимир Гусев
2005-11-30 12:22 ` Alexey V. Novikov
2005-11-30 13:13 ` Владимир Гусев
2005-11-30 13:21 ` Alexey V. Novikov
2005-11-30 14:25 ` [Comm] Снова про htb (теперь и про cbq) Владимир Гусев
2005-12-01 5:48 ` Alexey V. Novikov
2005-12-01 10:10 ` Владимир Гусев
2005-12-02 7:42 ` Владимир Гусев
2005-12-02 9:24 ` Alexey V. Novikov
2005-12-02 10:20 ` Владимир Гусев
2005-12-02 10:43 ` Alexey V. Novikov
2005-12-02 11:24 ` Владимир Гусев
2005-12-02 11:54 ` Alexey V. Novikov
2005-12-02 13:40 ` Владимир Гусев
2005-11-30 15:00 ` [Comm] Снова про htb sergey ivanov
2005-11-30 20:50 ` [Comm] " Michael Shigorin
2005-12-02 16:14 ` Sergey Ivanov [this message]
2005-12-02 19:42 ` Michael Shigorin
2005-12-02 21:00 ` Sergey Ivanov
2005-12-03 16:32 ` [Comm] " Владимир Гусев
2005-12-03 1:00 ` Aleksey Avdeev
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=439072FA.4010608@parkheights.dyndns.org \
--to=seriv@parkheights.dyndns.org \
--cc=community@lists.altlinux.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
ALT Linux Community general discussions
This inbox may be cloned and mirrored by anyone:
git clone --mirror http://lore.altlinux.org/community/0 community/git/0.git
# If you have public-inbox 1.1+ installed, you may
# initialize and index your mirror using the following commands:
public-inbox-init -V2 community community/ http://lore.altlinux.org/community \
mandrake-russian@linuxteam.iplabs.ru community@lists.altlinux.org community@lists.altlinux.ru community@lists.altlinux.com
public-inbox-index community
Example config snippet for mirrors.
Newsgroup available over NNTP:
nntp://lore.altlinux.org/org.altlinux.lists.community
AGPL code for this site: git clone https://public-inbox.org/public-inbox.git