ALT Linux Community general discussions
 help / color / mirror / Atom feed
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

-- 
    С уважением,
       Сергей Иванов.






  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