Здравствуйте все! =)Сразу опишусь: если добавил тему не туда, прошу перенести в нужное место и сильно не ругать, так как это мой первый пост здесь, да и вообще, я только начинаю изучать GNU/Linux, так что ещё не разобрался что куда и как (по поводу самого вопроса).
А теперь вопрос, точнее задача: организовать общий доступ в интернет из домашней сети используя NAT (iptables) и Ubuntu (или что лучше, если оно действительно лучше = проще и эффективнее), но не простой, так как это уже знаю как делать, а именно ДИНАМИЧЕСКОЕ распределение канала по всем ТОЛЬКО В ДАННЫЙ МОМЕНТ качающим пользователям. То есть если качает один в локальной сети через этот сервер - отдать весь канал ему, если двое - то ХОТЯ БЫ поровну, а лучше, конечно, чтобы можно было указывать конкретно (25% на 75% например). Сейчас стоит сервер роутер Windows 2003 Server, но, мягко говоря, производительность низкая, к тому же если кто-то "торрентит", то у остальных всё лежит. То есть, на сколько я понимаю, требуется делить не по подключениям (по-умолчанию, без шейпера), а по IP-адресам, причём только активным.
Да, кстати, ситуация стандартная: есть сервак с двумя сетевухами, которые смотрят в сеть провайдера и в локалку.
Как я себе сейчас представляю решение: создаётся некая очередь из всех возможных адресов локальной сети, которая позволяет пропускать только по одному пакету за один проход для одно IP-адреса. Причем если другие адреса не активны (так и будет почти всегда), то просто переходить на следующую строку очереди. Так же можно, например, два раза указать строку №1 с первым адресом сети и получится, что у него будет приоритет выше в два раза по сравнению с другими. Вот как это реализовать? Причём как это сделать универсально и просто, чтобы не нужно было писать кучу длинных строк для tc, а чтобы можно было в каком-нибудь скрипте изменить только адрес подсети и всё заработало?
В общем главное, что я создал свою тему, чтобы можно было задать прямые вопросы знающим людям, потому как уже очень давно ищу подобное решение, перебрал всё для Windows, но там всё платное да и тормознутое, если учитывать то, что люди на Пне 166-м всё держат и всё у них работает с Линуксом. А хочется узнать, как люди с этим борятся, ведь даже СТАТИЧНЫЙ шейпинг не решение, так как канал будет всегда почти на половину простаивать.
Перерыл весь интернет, знаю и про HTB, и про другие темы здесь на ОпенНет, но именно решения какого я ищу нигде нет, так что прошу не посылать. Разве что если ДЕЙСТВИТЕЛЬНО такое решение найдёте. Я не нашёл.
А хочется найти универсальное решение не только для меня, но и для любого не совсем знающего дебри Линукс человека, потому как просто НАТ никого не устраивает. То есть если кто может, написал бы скрипт раз и навсегда и все бы им пользовались (самому не позволяют пока ещё очень скудные познания в *никсах). А "раздавать интернет дома" всё более и более востребованной темой становится.
Ну всё, вроде всё описал! 8)
Заранее благодарю за ответы!
http://www.opennet.me/docs/294.shtml
>http://www.opennet.me/docs/294.shtmlПоловина ссылок - фиолетовые, я там был. Прошу именно конкретные решения или направления, так как самому не понять.
Ребят, ну неужели никто не задумывался над такой же задачей?
>Ребят, ну неужели никто не задумывался над такой же задачей?Я задумывался и решил, но у меня FreeBSD, и я использую IPFW/DUMMYNET.
Принцип решения можно глянуть вот здесь: http://www.opennet.me/openforum/vsluhforumID1/88086.html?n=D...
>>Ребят, ну неужели никто не задумывался над такой же задачей?
>
>Я задумывался и решил, но у меня FreeBSD, и я использую IPFW/DUMMYNET.
>
>
>Принцип решения можно глянуть вот здесь: http://www.opennet.me/openforum/vsluhforumID1/88086.html?n=D...Я, собственно, и пришёл к идее очередей из-за прочтения инфы о ipfw. Но мне кажется, что если ставить *BSD систему, то я просто не доберусь до конфигурации сервера в силу сложности системы в общем. К тому же в будущем хотелось бы накрутить на сервер ещё другие полезные вещи, в том числе с графическим интерфейсом (мониторинг трафика).
Я не прав? Будет ли легче использовать *BSD в рассматриваемом случае?
>>>Ребят, ну неужели никто не задумывался над такой же задачей?
>>
>>Я задумывался и решил, но у меня FreeBSD, и я использую IPFW/DUMMYNET.
>>
>>
>>Принцип решения можно глянуть вот здесь: http://www.opennet.me/openforum/vsluhforumID1/88086.html?n=D...
>
>Я, собственно, и пришёл к идее очередей из-за прочтения инфы о ipfw.
>Но мне кажется, что если ставить *BSD систему, то я просто
>не доберусь до конфигурации сервера в силу сложности системы в общем.ИМХО, сложность систем сравнима, но имеется разница в подходах, потому кому-то будет сложнее, кому-то легче, в зависимости от опыта и взглядов.
>К тому же в будущем хотелось бы накрутить на сервер ещё
>другие полезные вещи, в том числе с графическим интерфейсом (мониторинг трафика).как связаны "графический интерфейс" и "мониторинг трафика" ?
>Я не прав? Будет ли легче использовать *BSD в рассматриваемом случае?
Используйте то, что легче _вам_. Когда поймете, что на этой системе сделать какую-то конкретную фичшку сделать невозможно - будете использовать другую систему. Но это уже другой уровень понимания.
>[оверквотинг удален]
>>К тому же в будущем хотелось бы накрутить на сервер ещё
>>другие полезные вещи, в том числе с графическим интерфейсом (мониторинг трафика).
>
>как связаны "графический интерфейс" и "мониторинг трафика" ?
>
>>Я не прав? Будет ли легче использовать *BSD в рассматриваемом случае?
>
>Используйте то, что легче _вам_. Когда поймете, что на этой системе сделать
>какую-то конкретную фичшку сделать невозможно - будете использовать другую систему. Но
>это уже другой уровень понимания.В том то и дело, что опыта пока ноль. Я только начинаю разбираться в НЕвиндоусе. Соответственно, не знаю что выбрать. Но познания в сетевых технологиях немного есть.
Мониторинг - а можно по другому? Лично я не представляю, как можно будет КРАСИВО реализовать таблички с возможностью выбора нужных колонок и всеми прелестями ГУИ-интерфейса в консоли...
Просто опять же, вернёмся к теме изначальной: неужели нет какого-нибудь простого решения для динамического распределения канала в интернет ПОРОВНУ (хотя бы) между активными пользователями с минимальной необходимостью что-нибудь править?
Я, конечно, не против изучить никсы и так и делаю. Но процесс это далеко не скоротечный (чего стоит один tc в iptables), а на это время решение какое-то нужно.
Вот и решил разобраться, как ЛЮДИ решают эту проблему. К тому же, когда решение будет найдено (рано или поздно) я уверен, что это поможет МНОГИМ.
Задача: составить скрипт, при минимальном редактировании которого можно будет спокойно запустить домашний маршрутизатор, поддерживающий выше описанную функцию.
К тому же не хотелось бы сносить свой текущий сервак, устанавливать никсы, а потом понять, что получилось ещё хуже, так как пока я решения не нашёл. А соответственно, пробовать негде. Вот и хотелось бы услышать готовые ПРОВЕРЕННЫЕ и ОТКАТАННЫЕ решения.
>Вот и решил разобраться, как ЛЮДИ решают эту проблему. К тому же,
>когда решение будет найдено (рано или поздно) я уверен, что это
>поможет МНОГИМ.Ссылка на мой пост - это и есть решение. Оно вам помогло?
"Нажмите Ок и откиньтесь на спинку кресла" - это НЕ решение. Это ответ. Решение - это последовательность шагов, лежащих от условия задачи к ответу. Иногда - всего лишь один маленький шаг, но требующий основательной подготовки.
Если хочется ничего не понимая в предметной области, найти готовый продукт, относительно функциональный по дефолту - это дорога в винды и в мир проприетарного софта. За деньги. В *никсах от вас потребуют не денег, но знаний. И вместо рыбы дадут удочку.
>[оверквотинг удален]
>
>"Нажмите Ок и откиньтесь на спинку кресла" - это НЕ решение. Это
>ответ. Решение - это последовательность шагов, лежащих от условия задачи к
>ответу. Иногда - всего лишь один маленький шаг, но требующий основательной
>подготовки.
>
>Если хочется ничего не понимая в предметной области, найти готовый продукт, относительно
>функциональный по дефолту - это дорога в винды и в мир
>проприетарного софта. За деньги. В *никсах от вас потребуют не денег,
>но знаний. И вместо рыбы дадут удочку.Да я понимаю. Потому и написал, что УЖЕ разбираюсь, но ПОКА ещё не дошёл до этого самого понимания. К тому же сложности разных уровней бывают. Например НАТ настроить для меня не проблема в iptables. А вот с tc разобраться не по силам ПОКА.
Твой пост учёл. Если не будет других предложений - буду пробовать БСД. А пока жду либо готового проверенного ОТВЕТА на чём угодно, либо основательные подсказки и указания к tc или чего либо под Линукс.
З.Ы. Чего плохого в ОТВЕТАХ по-дефолту, если они устраивают по всем параметрам? К тому же опять же, глубина сложности и настройки бывает разная. И понимать что-то можно не только полностью или совсем не понимать, а между. Соответственно и решения бывают разные. Чем больше знаешь, тем глубже можешь настраивать. Значит можешь более эффективно использовать что либо. Но это затрата времени на изучение. А заставлять всех знать всё чуть ли не до исходников это глупо, если некоторым это сто лет не надо. Значит им достаточно небольшой глубины настройки.
В общем нужно учитывать что мы имеем и что хотим и выбирать путь с НАИМЕНЬШИМИ затратами.
З.З.Ы. Никого ни в чём не обвиняю. Просто хотел высказаться чтобы меня поняли, с каких позиций я вещаю.
Не будет никаких предложений - придётся самому ВСЁ изучать, потому как коммерция не устраивает своей деревянностью (настроить ничего нельзя). А пока жду... =)
"дефолтные" решения плохи только тем что если через некоторое время что-то (изменится) сломается вам будет вдвойне сложно понять почему.
И что тогда делать?
Если у вас знаний не было, а все сразу заработает то знаний по теме и не будет;))
>"дефолтные" решения плохи только тем что если через некоторое время что-то (изменится)
>сломается вам будет вдвойне сложно понять почему.
>И что тогда делать?
>Если у вас знаний не было, а все сразу заработает то знаний
>по теме и не будет;))Согласен! =)
Но есть же тот, кто это написал! И можно спросить у него!
А знания будут, как будет время на них.
Просто пока приоритет у знаний о ядре Линукс и его модуле маршрутизации стоит ниже других задач в жизни.
>>"дефолтные" решения плохи только тем что если через некоторое время что-то (изменится)
>>сломается вам будет вдвойне сложно понять почему.
>>И что тогда делать?
>>Если у вас знаний не было, а все сразу заработает то знаний
>>по теме и не будет;))
>
>Согласен! =)
>Но есть же тот, кто это написал! И можно спросить у него!
>хДД
и он конечно же ждет вас, с вашими проблемами
>>[оверквотинг удален]
>А пока жду либо готового проверенного ОТВЕТА на чём угодно, либо
>основательные подсказки и указания к tc или чего либо под Линукс.Понимаете, опенсорс - это темный лес, в котором есть множество путей, в т.ч. и кратчайших, к конкретному, нужному именно вам, результату. Но нужно иметь базовые навыки ориентирования на местности, этакий скаутский минимум. А проприетарщина - это "решения", вроде "выберите наше (платное) направление, и идите не отклоняясь". Ввиду объективной конечности протяженности леса, вы безусловно выйдете рано или поздно из этого леса. Но с крайне невысокой вероятностью путь будет кратчайшим и выведет вас в желаемую вами точку. Но, зато, проприетарный путь требует минимальных знаний и усилий межушного нервного узла.
В опенсорсе очень немного готовых универсальных решений не потому, что всех душит амфибия поделиться. На самом деле условия задач у всех разные, у всех своя желаемая точка прибытия, и свое представление о расстояниях. Кому-то нужно просто побыстрей, кому-то - с максимальным учетом дополнительных требований по интеграции, у кого-то параноидальный страх перед серым волком. Поэтому конечная конфигурация, устраивающая меня, не устраивает 90% остальных. Единственное, что имеет ценность - это навык навигации и понимание сущностей, обитающих в темном лесу.
В случае динамической дележки полосы главное - это не конкретный конфиг для ipfw/dummynet или iptables/altq. Главное - понимание того, что на любой платформе существует некая инкарнация пайпов и очередей, понимание того, с какой стороны у них рабочая кромка и как за эти инструменты браться. Без этого понимания готовым конфигом скорей удастся намотать себе кишки на сверло, чем добиться эффективного и безопасного решения.
Кроме того, понимание принципов позволяет решить ЛЮБУЮ возникшую задачу, а не только частную сиюминутную, каковой, собсно, и является дележка канала. Потому что непременно еще возникнут задачи трансляции адресов, проброса портов, фильтрации входящих соединений етц. Поэтому, как говаривал дедушка Ульянов-Ленин - учиться, учиться и еще раз учиться. А если учиться некогда - нанять человека, которому поставить внятное ТЗ. А потом смотреть, как оно сделано - и учиться, учиться и так далее.
>[оверквотинг удален]
>этого понимания готовым конфигом скорей удастся намотать себе кишки на сверло,
>чем добиться эффективного и безопасного решения.
>
>Кроме того, понимание принципов позволяет решить ЛЮБУЮ возникшую задачу, а не только
>частную сиюминутную, каковой, собсно, и является дележка канала. Потому что непременно
>еще возникнут задачи трансляции адресов, проброса портов, фильтрации входящих соединений етц.
>Поэтому, как говаривал дедушка Ульянов-Ленин - учиться, учиться и еще раз
>учиться. А если учиться некогда - нанять человека, которому поставить внятное
>ТЗ. А потом смотреть, как оно сделано - и учиться, учиться
>и так далее.Блин, я думал уже не встречу людей со ЗДРАВЫМ пониманием действительности! =)
Согласен во всём на 100% и больше! ;)
Конечно, я всё это понимаю и буду изучать в скором времени эту тематику досконально и до конца. Но ПОКА, пока руки не дошли, думал уже есть готовые ответы, вот и решил поинтересоваться, как народ решает эту задачу.
Вот как я сейчас понимаю решение моей задачи (псевдо-текст скрипта):
//--------------------------------------------------------
переменная1=192.168.0;
добавить в очередь ожидания пакетов адрес <переменная1>.1;
добавить в очередь ожидания пакетов адрес <переменная1>.2;
...
добавить в очередь ожидания пакетов адрес <переменная1>.254;
//--------------------------------------------------------
...и всё. Что-то типа того. Очередь здесь - это что-то внутри фаервола, через которую проходят все пакеты. Так вот всё же просто. Надо адресу 192.168.0.1 поднять приоритет - добавим ещё одну строку:
//--------------------------------------------------------
переменная1=192.168.0;
добавить в очередь ожидания пакетов адрес <переменная1>.1;
добавить в очередь ожидания пакетов адрес <переменная1>.1;
добавить в очередь ожидания пакетов адрес <переменная1>.2;
...
добавить в очередь ожидания пакетов адрес <переменная1>.254;
//--------------------------------------------------------
Тогда получим два пакета за один момент времени t от первого адреса и по одному на остальных. Причём если пакетов от некоторых адресов не будет, просто переходим на следующую строку.Вроде всё просто, покрывает требуемые условия и решает задачу. Только куда это всё запихать?
linux:
iptabes + nat + iproute2 (для хитрых заворотов с маркерами по иптэблсу)
Шейперы:в1. (Динамический) tc & QoS - в свое время сильно долго с ним парился. Суть в том что создаешь классы и рулишь юзера (ипы) в класс. Нагрузка зависит от скоростей каналов, пользователей и интенсивности
в2. (Статический) iptables: limit & limit-burst - в частном случае подбирается методом тыка, т.к. сильно зависит от многих факторов и т.п., и т.д. ( метод не очень красивый, т.к. считает только кол. пакетов, а не все содержимое, но намного легче чем ТС). если сеть не коммерческая, то можно заставить железку типа linksys & dd-wrt обслуживать всю сеть... скажем компов на 20, лично я так 15 машин держал.
если считать трафло не нужно, то за пол часа по в2 строится весь сервер :), если нужно, то учи баш - блочишь иптейбл, снимаешь статистику, запускаешь тейблз, скидываешь цифры в БД, суммируешь, выбираешь зажравшихся, удаляешь с иптйблза / для красоты к БД крутишь(точнее пишешь сам на пхп или чемугодно, я например мордашку за час навуаял на парсере3, которым пять лет пользовался для обслуги 60 клиентов).В любом случае при динамическом шейпировании нужно часть канала отдать на резерв (для погашении перегрузок) от 10% до 30% все зависит от многих факторов.
Если сеть "домашняя" и скажем режешь для 10 компов 1 МиБ, то проще статически прикинуть или поровну как для 5 компов порезать. Себе ессесно заготовить 3-5 ипов с разной порезкой и сидеть, по быстее :) а если комуто в онлайне погамать не хватает - переходишь да другой ип и отпускаешь часть канала.
Если бушь штудить:
http://www.opennet.me/docs/RUS/iptables/
http://www.opennet.me/docs/RUS/bash_scripting_guide/
http://www.mysql.ru/docs/man/
ну, http и скриптовый язык выбирай сам
>[оверквотинг удален]
>проще статически прикинуть или поровну как для 5 компов порезать. Себе
>ессесно заготовить 3-5 ипов с разной порезкой и сидеть, по быстее
>:) а если комуто в онлайне погамать не хватает - переходишь
>да другой ип и отпускаешь часть канала.
>
>Если бушь штудить:
>http://www.opennet.me/docs/RUS/iptables/
>http://www.opennet.me/docs/RUS/bash_scripting_guide/
>http://www.mysql.ru/docs/man/
>ну, http и скриптовый язык выбирай самАга! Благодарю!
Вариант 2 не совсем подходит, а вот 1й очень даже ничего, если я всё правильно понял!
Это, я так понял, нужно изучать весь iptables и всё что с ним связано, в частности tc?
каждому своё, это лично мое мнение, и лично так я бы делал...
юникс нужно знать, достаточно знать хорошо, что то одно, а другое само собой въедет когда будет тому место и время (фря/линь/солярка/и другие).
лет 7 назад было 3-4 бесплатных биллингов, изних более менее (вроде как) нормальных было 50%... времени много прошло, поищи хорошо должны быть варианты.
но если хочешь можешь и сам строить, на то оно и линукс, чтоб за несколько десятков минут связывать приложения парой-тройкойкой скриптиков и запускать готовые решения. Но такое требует хороший уровень знаний, и умения быстро ориентироватся в поисковиках :)
кстати, графика на сервер - это шутка :) если хочешь видить загрузку каналов - смотри в man iptraf
>кстати, графика на сервер - это шутка :) если хочешь видить загрузку
>каналов - смотри в man iptrafДа я понимаю, что это не совсем верно. Просто привык к винде.
Если будет устраивать iptraf то я буду только рад.
Попробуйте TraffPro-free, traffpro.ru Прекрасно решит ваши задачи
>
>Попробуйте TraffPro-free, traffpro.ru Прекрасно решит ваши задачиБлагодарю за наводку! Обязательно гляну!