ALT Linux Community general discussions
 help / color / mirror / Atom feed
From: Eugine Kosenko <eugine.kosenko@gmail.com>
To: ALT Linux Community general discussions <community@lists.altlinux.org>
Subject: [Comm] Равное разделение трафика и наблюдение за его скоростью
Date: Sun, 16 Nov 2014 05:53:40 +0000
Message-ID: <CAB_XSX0sWzLuQmAZMgw7TmtO0bQUEtrFQ7cMd35Q6CM=P5N+SQ@mail.gmail.com> (raw)

Есть типичная ситуация. Два компьютера (станции), соединенных в
скоростную локальную сеть, разделяют общий доступ в Internet по
низкоскоростному EDGE/GPRS. Разделение сделано с помощью простейшего
(в одно правило) маскарадинга через iptables.

Проблема тут, однако, в том, что скорость внешнего соединения не
просто низкая, а непредсказуемо низкая. В зависимости от фаз Луны и
настроения провайдера она может меняться от 8 до 250 кбит/с.

Поэтому прежде всего стоят две задачи. Во-первых, нужно иметь
возможность постоянно контролировать скорость передачи на внешнем
интерфейсе. Во-вторых, нужно контролировать скорость передачи с каждой
станции на внешний интерфейс. Еще достаточно важно, чтобы внешний
канал просто всегда и мягко делился поровну между обеими станциями,
конечно же, при условии, что они обе претендуют на канал. Наконец
нужно видеть общий объем прокачанных с каждой из станций, хотя общее
решение для этой задачи мне примерно понятно.

Итак, уже используются iptables и iproute, которые при желании можно
настроить. Интересует, по возможности, простое решение на их основе
именно под конкретно описанную ситуацию, особенно, если учесть, что я
не имею большого опыта настройки сетей.

После быстрого вникания в iproute я понял, что при настройке
предполагается фиксированная и даже гарантированная ширина внешнего
канала. Если это так, то в самом деле достаточно разделить ее с
помощью дисциплины HTB пополам и все. Но беда ведь как раз в том, что
ширина доступного канала на текущий момент неизвестна! Зарезать канал
на какой-то низкий лимит неинтересно, так как не исключено, что именно
в данный момент мне может быть доступно больше. Я использую простую
дисциплину SFQ, которая, вроде бы, в большинстве случаев работает
именно так, как мне нужно. Однако иногда я замечаю, что полосу
начинают делить по принципу слотов. То есть, некоторое время (секунд
15-30) всю полосу захватывает одна станция, потом примерно столько же
--- вторая. И это при относительно постоянной общей скорости на
внешнем соединении. Понятно, что это тоже "поровну", но хотелось бы
именно "мягкого" деления, когда доступная полоса делится одновременно
и поровну между двумя машинами. Я хотел попробовать для решения этой
проблемы ESFQ, но как понял, в нынешних альтах использовать эту
дисциплину не рекомендуется.

Стоит ли для этих целей все же попробовать HTB (указав заведомо
большую ширину внешнего канала)? Стоит ли ради этой же задачи
попытаться освоить CBQ? Вообще говоря, сделал ли я все возможное в
этой ситуации или можно сделать что-то еще? Или может вообще нужно по
все делать по другому?

Второй момент связан со слежением за скоростью. Так как я новичок, то
попытался найти все, что относится к этой теме в Сизифе:

cban darkstat dsniff-X11 etherape flowscan ipband ipcad iptraf jnettop
tcpdump trafshow trickle ulog-acctd vnstat vnstat-server shapercontrol

Начал пробовать с iptraf и остановился пока на нем. Он достаточно
прост для новичка и дает мне именно то, что нужно. Но у него есть
недостатки. Во-первых, он привязан к интерфейсам. Поэтому я могу
видеть скорость трафика через ppp0 только в целом, без деления на
станции. Приходится из него в голове вычитать скорость трафика,
идущего через NAT с eth0, чтобы получить скорость трафика со станции,
подключенной к Internet напрямую. Это не очень удобно.

В теории я могу отделить пакеты с разных станций на уровне iptables,
но что потом делать с этим разделением? Ведь iptraf (как я понял), не
умеет анализировать поле MASK. Является ли правильным решением тут
создание виртуального сетевого устройства (по этой причине я
интересовался IMQ/IBF)? Или правильно делать (прозрачный) прокси и
вести учет на нем? А может, есть более простое решение на основе
другого инструмента?

Еще раз замечу, что важно наблюдать именно за текущей (мгновенной)
скоростью передачи данных как общую, так и в разрезе по станциям. Как
я понял, учет общего переданного трафика можно сделать просто через
iptables, и эта задача сейчас для меня не так важна.

             reply	other threads:[~2014-11-16  5:53 UTC|newest]

Thread overview: 4+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2014-11-16  5:53 Eugine Kosenko [this message]
2014-11-16 11:35 ` Sergey
2014-11-22  8:23     ` Anton Gorlov
2014-11-22 16:05     ` Sergey

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='CAB_XSX0sWzLuQmAZMgw7TmtO0bQUEtrFQ7cMd35Q6CM=P5N+SQ@mail.gmail.com' \
    --to=eugine.kosenko@gmail.com \
    --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