Кто использует сеть в linux. Linux на службе у провайдера


This is the default welcome page used to test the correct operation of the Apache2 server after installation on Ubuntu systems. It is based on the equivalent page on Debian, from which the Ubuntu Apache packaging is derived. If you can read this page, it means that the Apache HTTP server installed at this site is working properly. You should replace this file (located at /var/www/html/index.html) before continuing to operate your HTTP server.

If you are a normal user of this web site and don"t know what this page is about, this probably means that the site is currently unavailable due to maintenance. If the problem persists, please contact the site"s administrator.

Configuration Overview

Ubuntu"s Apache2 default configuration is different from the upstream default configuration, and split into several files optimized for interaction with Ubuntu tools. The configuration system is fully documented in /usr/share/doc/apache2/README.Debian.gz . Refer to this for the full documentation. Documentation for the web server itself can be found by accessing the manual if the apache2-doc package was installed on this server.

The configuration layout for an Apache2 web server installation on Ubuntu systems is as follows:

/etc/apache2/ |-- apache2.conf | `-- ports.conf |-- mods-enabled | |-- *.load | `-- *.conf |-- conf-enabled | `-- *.conf |-- sites-enabled | `-- *.conf

  • apache2.conf is the main configuration file. It puts the pieces together by including all remaining configuration files when starting up the web server.
  • ports.conf is always included from the main configuration file. It is used to determine the listening ports for incoming connections, and this file can be customized anytime.
  • Configuration files in the mods-enabled/ , conf-enabled/ and sites-enabled/ directories contain particular configuration snippets which manage modules, global configuration fragments, or virtual host configurations, respectively.
  • They are activated by symlinking available configuration files from their respective *-available/ counterparts. These should be managed by using our helpers a2enmod, a2dismod, a2ensite, a2dissite, and a2enconf, a2disconf . See their respective man pages for detailed information.
  • The binary is called apache2. Due to the use of environment variables, in the default configuration, apache2 needs to be started/stopped with /etc/init.d/apache2 or apache2ctl . Calling /usr/bin/apache2 directly will not work with the default configuration.

Document Roots

By default, Ubuntu does not allow access through the web browser to any file apart of those located in /var/www , public_html directories (when enabled) and /usr/share (for web applications). If your site is using a web document root located elsewhere (such as in /srv) you may need to whitelist your document root directory in /etc/apache2/apache2.conf .

The default Ubuntu document root is /var/www/html . You can make your own virtual hosts under /var/www. This is different to previous releases which provides better security out of the box.

Reporting Problems

Please use the ubuntu-bug tool to report bugs in the Apache2 package with Ubuntu. However, check before reporting a new bug.

Please report bugs specific to modules (such as PHP and others) to respective packages, not to the web server itself.

Современный компьютер предоставляет пользователю много возможностей, без доброй половины которых он мог бы запросто обойтись. В сети по сей день идут дебаты о том, нужны ли ему 3D-графика и высококачественный звук. Однако есть одна функция, необходимость которой не оспаривается ни кем, — это выход в сеть.

Знатоки свободной ОС утверждают, что Linux создана для сети, как птица для полета. Правда, тут же делают поправку на то, что истинную мощь этой системы увидят только избранные, поскольку настройка сетевых интерфейсов — занятие сложное и требующее серьезных знаний.

Спорить с этим утверждением сложно, поскольку очевиден его всеобъемлющий характер. Действительно, не обладая специальными умениями, даже табуретки не сколотить. Тем не менее мы и тут имеем дело с некоторым преувеличением. Linux —система простая. Пользователю Windows приходится держать в памяти значительно больше информации для того, чтобы обеспечить комфортную работу с ней.

Дабы последнее утверждение не выглядело голословным, рассмотрим процедуру настройки сети в системе Linux. Причем, как это принято в мире свободного ПО, не один путь, а несколько вариантов. А пользователь сам выберет тот, который ему больше понравится.

Команда ifconfig

Как правило, подключение драйверов сетевых адаптеров происходит при установке системы. Чтобы убедиться в этом, достаточно в консоли набрать ifconfig -a. Кстати, данное название вовсе не является исковерканным имени команды ipconfig, знакомой пользователям Windows. Это просто сокращение от Interface Configuration.

В ответ пользователь получит информацию о характеристиках Ethernet-соединения и о параметрах так называемого кольцевого интерфейса. Первый обозначается как eth0 (если сетевых адаптеров несколько, то для каждого будет своя секция eth[порядковый номер]), а второй — как lo.

Эту же команду можно использовать для активации интерфейса. Чаще всего она выглядит так:

ifconfig [обозначение интерфейса] netmask [маска сети] broadcast [широковещательный адрес] up.

Впрочем, на практике все параметры можно и не указывать. Например, если маска сети и широковещательный адрес не задаются явно, то система применит стандартные значения (сетевой адрес с машинной частью 255 и маской 255.255.255.0).

Для активации PLIP, SLIP и РРР необходимо использовать опцию pointopoint. При этом интерфейсы будут именоваться так:

– plip[порядковый номер начиная с нуля] — для PLIP;

– slip[порядковый номер начиная с нуля] — для SLIP;

– ppp[порядковый номер начиная с нуля] — для PPP.

Например, для того чтобы сконфигурировать интерфейс PLIP, соединяющий два компьютера с адресами [адрес1] и [адрес2], следует в консоли набрать:

ifconfig plip0 [адрес1] pointopoint [адрес2].

Отключение интерфейса производится командой ifconfig [обозначение интерфейса] down. Таким образом, используя всего одну команду, вы можете управлять сетевым устройством. И разумеется, держать в памяти все ее опции нет никакого смысла — если что-то забыли, то man ifconfig всегда придет на помощь.

Команда route

Команда route отвечает за маршрутизацию. То есть она указывает системе, на какой сетевой компьютер должны передаваться пакеты, чтобы достичь пункта назначения.

Данная команда выводит на экран таблицу маршрутизации. При этом каждая запись состоит из нескольких полей:

– Destination — IP-адрес конечного пункта маршрута;

– Gateway — IP-адрес или имя шлюза (если его нет, то используется символ “*”);

– Genmask — маска сети маршрута;

– Flags — указатель типа или состояния маршрута (может принимать следующие значения: U — активный, Н — хост, С — шлюз, D — динамический, М — модифицированный);

– MSS — максимальное количество данных, предаваемых за один раз;

– Metric — число переходов до шлюза;

– Ref — количество обращений к маршруту на определённый момент времени;

Window — максимальное количество данных для принимающей стороны;

– Use — число пакетов, переданных по маршруту;

– Iface — тип интерфейса.

Чтобы добавить адрес в таблицу маршрутизации, надо использовать команду route с ключом add. При этом следует учесть, что если соответствующий интерфейс уже сконфигурирован при помощи ifconfig, то система сама может получить сведения о нем. В таком случае нет смысла в употреблении спецификаторов — достаточно указать адрес пункта назначения. Все остальные данные будут избыточными, а стало быть, и необязательными.

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

Для удаления маршрута используйте команду route del -net .

Другие команды

Если настройки интерфейса хранятся в системе, то для быстрой активации и деактивации можно использовать команды ifup и ifdown следующим образом:

– ifup [обозначение интерфейса] — для включения.

– ifdown [обозначение интерфейса] — для отключения.

Для вывода на экран списка сетевых подключений, таблиц маршрутизации, статистики интерфейсов и т. п. применяется команда netstat. Помимо всего прочего она позволяет отобразить статус соединения, что полезно при анализе системы на предмет её безопасности.

Например, LISTEN означает, что служба ждет соединения с другой машиной, а ESTABLISHED говорит о том, что оно уже установлено. Если нет запущенных программ, для которых такое состояние является нормальным, то это может быть небезопасным и свидетельствовать об атаке на хост.

Конфигурационые файлы

Указанных выше команд вполне достаточно для настройки сети. Однако у этих утилит есть один существенный недостаток: результат их работы будет действителен в течение только одной сессии. После перезагрузки все придется начинать сначала. По этой причине значительно удобнее один раз отредактировать конфигурационные файлы.

Несмотря на то что их устройство не зависит от дистрибутива, располагаться они могут в разных местах. Например, в Debian за настройку интерфейсов и маршрутизации отвечает файл /etc/init.d/network, а в Slackware (MOPS, Zenwalk) — /etc/rc.d/rc.inet1. На этот счет можно дать только один универсальный совет: приступая к работе с тем или иным продуктом, обязательно ознакомьтесь с технической документацией.

В качестве примера рассмотрим дистрибутив ASPLinux. Для хранения настроек сетевых интерфейсов там используется каталог /etc/sysconfig/network-scripts/. Каждый из них определяется файлом ifcfg-[обозначение интерфейса].

Этот файл состоит из строк вида: [параметр]=[значение]. Параметры могут быть следующие:

– NAME — произвольное название соединения;

– DEVICE — обозначение интерфейса;

– IPADDR — IP-адрес интерфейса;

– NETMASK — маска сети;

– GATEWAY — IP-адрес шлюза;

– ONBOOT — указатель на необходимость активации во время загрузки;

– USERCTL — указывает на то, что активировать интерфейс может обычный пользователь;

– MTU — значение MTU (максимальный размер пакета, передаваемого через интерфейс);

– PEERDNS — указывает на необходимость использования серверов DNS, полученных при активации интерфейса;

– DNS1, DNS2 — IP-адреса первичного и вторичного серверов DNS;

– BOOTPROTO — указатель режима настройки интерфейса (none — при помощи пользовательских параметров, boottp или dhcp — при помощи соответствующих протоколов).

За настройку DNS отвечают файлы /etc/host.conf и /etc/resolv.conf. Первый из них — это обычный текстовый файл, в котором задаются правила работы подсистемы поиска имен и адресов узлов. Его устройство типично для всех объектов такого типа — в каждой строке содержится параметр и его значения (их может быть несколько).

Параметр order задает метод поиска IP-адреса узла. Он может принимать следующие значения: bind (использовать сервер DNS), hosts (использовать локальную базу адресов), nis (использовать сервер NIS). Они должны располагаться в том порядке, в котором будет осуществляться поиск.

Для описания исключений предназначен параметр trim. В соответствующей строке задается домен, который будет автоматически удаляться из имени.

Параметр reorder может принимать значения on/off. Он отвечает за включение режима работы, при котором локальные адреса получают приоритет перед всеми найденными. Spoofalert включает режим записи в системный журнал результатов проверки ложных имен. А multi позволяет настроить метод обработки локальной базы узлов. Разумеется, все параметры указывать не обязательно. На практике часто встречаются файлы /etc/host.conf, состоящие из двух строк.

Файл /etc/resolv.conf описывает некоторые параметры, которые используются подсистемой поиска имен. Он может состоять из следующих строк:

– nameserver — адреса серверов DNS;

– domain — имя локального домена для поиска адресов в локальной сети;

– search — список доменов для поиска адресов.

Очевидно, что параметры domain и search не могут быть актуальными одновременно. Если система обнаружит это противоречие, то будет учитывать только последнюю запись.

А может ли Linux вообще не использовать сервер имен? Теоретически — да, хотя на практике описанный ниже способ применяется только в очень маленьких сетях, где другие методы не оправданны.

Способ заключается в использовании файла /etc/hosts. Он представляет собой список имен хостов и их IP-адресов, причем для одного адреса можно указывать несколько имен.

Графические средства настройки

Хотя настройка сети путем прямого редактирования конфигурационных файлов — задача не очень сложная, практически все современные дистрибутивы предлагают пользователю графические инструменты, предназначенные для её решения. Даже Zenwalk, который не принято считать дружественным в Windows-понимании этого слова, позволяет сконфигурировать сетевые интерфейсы без помощи командной строки.

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

Так, пользователи дистрибутива Linux XP Desktop настраивают VPN-соединение при помощи удобного инструмента с графическим интерфейсом, который устроен даже проще, чем аналогичное средство в Windows. Примерно то же самое предлагают потребителю ASPLinux, Mandriva и SuSE Linux.

В общем, Linux действительно создан для сети. И оценить это могут не только опытные пользователи, но и новички.

Современный компьютер предоставляет пользователю много возможностей, без доброй половины которых он мог бы запросто обойтись. В сети по сей день идут дебаты о том, нужны ли ему 3D-графика и высококачественный звук. Однако есть одна функция, необходимость которой не оспаривается ни кем, — это выход в сеть.

Знатоки свободной ОС утверждают, что Linux создана для сети, как птица для полета. Правда, тут же делают поправку на то, что истинную мощь этой системы увидят только избранные, поскольку настройка сетевых интерфейсов - занятие сложное и требующее серьезных знаний.

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

Дабы последнее утверждение не выглядело голословным, рассмотрим процедуру настройки сети в системе Linux. Причем, как это принято в мире свободного ПО, не один путь, а несколько вариантов. А пользователь сам выберет тот, который ему больше понравится.

Команда ifconfig

Как правило, подключение драйверов сетевых адаптеров происходит при установке системы. Чтобы убедиться в этом, достаточно в консоли набрать ifconfig -a. Кстати, данное название вовсе не является исковерканным имени команды ipconfig, знакомой пользователям Windows. Это просто сокращение от Interface Configuration.

В ответ пользователь получит информацию о характеристиках Ethernet-соединения и о параметрах так называемого кольцевого интерфейса. Первый обозначается как eth0 (если сетевых адаптеров несколько, то для каждого будет своя секция eth[порядковый номер]), а второй - как lo.

Эту же команду можно использовать для активации интерфейса. Чаще всего она выглядит так:

ifconfig [обозначение интерфейса] netmask [маска сети] broadcast [широковещательный адрес] up.

Впрочем, на практике все параметры можно и не указывать. Например, если маска сети и широковещательный адрес не задаются явно, то система применит стандартные значения (сетевой адрес с машинной частью 255 и маской 255.255.255.0).

Для активации PLIP, SLIP и РРР необходимо использовать опцию pointopoint. При этом интерфейсы будут именоваться так:

Plip[порядковый номер начиная с нуля] - для PLIP;

– slip[порядковый номер начиная с нуля] - для SLIP;

– ppp[порядковый номер начиная с нуля] - для PPP.

Например, для того чтобы сконфигурировать интерфейс PLIP, соединяющий два компьютера с адресами [адрес1] и [адрес2], следует в консоли набрать:

ifconfig plip0 [адрес1] pointopoint [адрес2].

Отключение интерфейса производится командой ifconfig [обозначение интерфейса] down. Таким образом, используя всего одну команду, вы можете управлять сетевым устройством. И разумеется, держать в памяти все ее опции нет никакого смысла - если что-то забыли, то man ifconfig всегда придет на помощь.

Команда route

Команда route отвечает за маршрутизацию. То есть она указывает системе, на какой сетевой компьютер должны передаваться пакеты, чтобы достичь пункта назначения.

Данная команда выводит на экран таблицу маршрутизации. При этом каждая запись состоит из нескольких полей:

– Destination - IP-адрес конечного пункта маршрута;

– Gateway - IP-адрес или имя шлюза (если его нет, то используется символ “*”);

– Genmask - маска сети маршрута;

– Flags - указатель типа или состояния маршрута (может принимать следующие значения: U - активный, Н - хост, С - шлюз, D - динамический, М - модифицированный);

– MSS - максимальное количество данных, предаваемых за один раз;

– Metric - число переходов до шлюза;

– Ref - количество обращений к маршруту на определённый момент времени;

Window - максимальное количество данных для принимающей стороны;

– Use - число пакетов, переданных по маршруту;

– Iface - тип интерфейса.

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

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

Для удаления маршрута используйте команду route del -net .

Другие команды

Если настройки интерфейса хранятся в системе, то для быстрой активации и деактивации можно использовать команды ifup и ifdown следующим образом:

– ifup [обозначение интерфейса] - для включения.

– ifdown [обозначение интерфейса] - для отключения.

Для вывода на экран списка сетевых подключений, таблиц маршрутизации, статистики интерфейсов и т. п. применяется команда netstat. Помимо всего прочего она позволяет отобразить статус соединения, что полезно при анализе системы на предмет её безопасности.

Например, LISTEN означает, что служба ждет соединения с другой машиной, а ESTABLISHED говорит о том, что оно уже установлено. Если нет запущенных программ, для которых такое состояние является нормальным, то это может быть небезопасным и свидетельствовать об атаке на хост.

Конфигурационые файлы

Указанных выше команд вполне достаточно для настройки сети. Однако у этих утилит есть один существенный недостаток: результат их работы будет действителен в течение только одной сессии. После перезагрузки все придется начинать сначала. По этой причине значительно удобнее один раз отредактировать конфигурационные файлы.

Несмотря на то что их устройство не зависит от дистрибутива, располагаться они могут в разных местах. Например, в Debian за настройку интерфейсов и маршрутизации отвечает файл /etc/init.d/network, а в Slackware (MOPS, Zenwalk) - /etc/rc.d/rc.inet1. На этот счет можно дать только один универсальный совет: приступая к работе с тем или иным продуктом, обязательно ознакомьтесь с технической документацией.

В качестве примера рассмотрим дистрибутив ASPLinux. Для хранения настроек сетевых интерфейсов там используется каталог /etc/sysconfig/network-scripts/. Каждый из них определяется файлом ifcfg-[обозначение интерфейса].

Этот файл состоит из строк вида: [параметр]=[значение]. Параметры могут быть следующие:

– NAME - произвольное название соединения;

– DEVICE - обозначение интерфейса;

– IPADDR - IP-адрес интерфейса;

– NETMASK - маска сети;

– GATEWAY - IP-адрес шлюза;

– ONBOOT - указатель на необходимость активации во время загрузки;

– USERCTL - указывает на то, что активировать интерфейс может обычный пользователь;

– MTU - значение MTU (максимальный размер пакета, передаваемого через интерфейс);

– PEERDNS - указывает на необходимость использования серверов DNS, полученных при активации интерфейса;

– DNS1, DNS2 - IP-адреса первичного и вторичного серверов DNS;

– BOOTPROTO - указатель режима настройки интерфейса (none - при помощи пользовательских параметров, boottp или dhcp - при помощи соответствующих протоколов).

За настройку DNS отвечают файлы /etc/host.conf и /etc/resolv.conf. Первый из них - это обычный текстовый файл, в котором задаются правила работы подсистемы поиска имен и адресов узлов. Его устройство типично для всех объектов такого типа - в каждой строке содержится параметр и его значения (их может быть несколько).

Параметр order задает метод поиска IP-адреса узла. Он может принимать следующие значения: bind (использовать сервер DNS), hosts (использовать локальную базу адресов), nis (использовать сервер NIS). Они должны располагаться в том порядке, в котором будет осуществляться поиск.

Для описания исключений предназначен параметр trim. В соответствующей строке задается домен, который будет автоматически удаляться из имени.

Параметр reorder может принимать значения on/off. Он отвечает за включение режима работы, при котором локальные адреса получают приоритет перед всеми найденными. Spoofalert включает режим записи в системный журнал результатов проверки ложных имен. А multi позволяет настроить метод обработки локальной базы узлов. Разумеется, все параметры указывать не обязательно. На практике часто встречаются файлы /etc/host.conf, состоящие из двух строк.

Файл /etc/resolv.conf описывает некоторые параметры, которые используются подсистемой поиска имен. Он может состоять из следующих строк:

– nameserver - адреса серверов DNS;

– domain - имя локального домена для поиска адресов в локальной сети;

– search - список доменов для поиска адресов.

Очевидно, что параметры domain и search не могут быть актуальными одновременно. Если система обнаружит это противоречие, то будет учитывать только последнюю запись.

А может ли Linux вообще не использовать сервер имен? Теоретически - да, хотя на практике описанный ниже способ применяется только в очень маленьких сетях, где другие методы не оправданны.

Способ заключается в использовании файла /etc/hosts. Он представляет собой список имен хостов и их IP-адресов, причем для одного адреса можно указывать несколько имен.

Графические средства настройки

Хотя настройка сети путем прямого редактирования конфигурационных файлов - задача не очень сложная, практически все современные дистрибутивы предлагают пользователю графические инструменты, предназначенные для её решения. Даже Zenwalk, который не принято считать дружественным в Windows-понимании этого слова, позволяет сконфигурировать сетевые интерфейсы без помощи командной строки.

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

Так, пользователи дистрибутива Linux XP Desktop настраивают VPN-соединение при помощи удобного инструмента с графическим интерфейсом, который устроен даже проще, чем аналогичное средство в Windows. Примерно то же самое предлагают потребителю ASPLinux, Mandriva и SuSE Linux.

В общем, Linux действительно создан для сети. И оценить это могут не только опытные пользователи, но и новички.

Linux изначально создавался для работы с сетью, поэтому, работа с сетью -- это одна из сильных сторон Linux.

Linux поддерживает популярные сетевые протоколы, такие как TCP/IP и SMB (NetBIOS), обладает усовершенствованными инструментами для мониторинга и фильтрации сетевого трафика. В Linux доступны такие службы как FTP, web-сервер, Windows файл- и принтсервер. Linux даже предоставляет возможность централизованного управления службами, Virtual Private Networking (VPN) и удаленного вызова процедур.

Linux может работать с любым сетевым оборудованием, для которого у него есть драйвер. Драйвера Linux либо встраиваются в ядро, либо компилируются как загружаемые модули. Многие распространенные сетевые карты по умолчанию поддерживаются ядром Linux. При выборе сетевого оборудования стоит использовать устройства, перечисленные в списке совместимых устройств "Hardware Compatibility List". Используйте самые последние версии дистрибутивов Linux.


Как правило, если вы используете совместимое сетевое оборудование, ваша карта будет автоматически распознана при инсталляции системы. Вы можете проверить сетевое оборудование, обнаруженное системой, используя команду ifconfig. По умолчанию ifconfig демонстрирует вам активные сетевые устройства. Для того чтобы увидеть все сетевые устройства, добавьте ключ -a:

Оставьте свой комментарий!

Просмотрев большинство тематических постов на хабре был безмерно удивлён тому факту, что крайне скудно освещена тема использования ОС Unix/Linux на службе интернет провайдеров (Internet service provider). Данной статьёй я частично попытаюсь восполнить данный пробел.

Почему в сети интернет наблюдается полное отсутствие таких статей догадаться не сложно - всех кто использует Linux/FreeBSD в ISP сразу же обвиняют в нищебродстве и советуют купить Cisco или уж на совсем крайний случай Juniper. Именно поэтому вторая цель данной статьи показать читателю, что некоторые технические решения на базе ОС Linux по многим показателям на порядки превосходят брэндовые решения от самых известных вендоров.

Шейпинг
Наш первый опыт «нестандартного» использования Linux появился сразу после начала предоставления услуг широкополосного доступа для физических лиц. Необходимо было чем-то «порезать» внешний канал каждого из наших пользователей. Здесь ввиду отсутствия собственных наработок на данную тему пришлось изобретать свой собственный велосипед применяя cbq и собственной обвязки к нему. Данная схема проработала пару месяцев пока мы не осознали всех ее минусов и не упёрлись в производительность машины.

Все дело в том, что система начала «съедать» слишком много soft interrupts даже при не большом трафике, на вскидку при транзитном трафике в 300 мегабит и 30 kpps при 1000 линейных правил cbq (по 2 правила вход/выход на пользователя) на каждом интерфейсе в top si достигал 100%.

Если бы в данный момент перед нами бы встала та же самая задача при тех де самых технических средствах мы бы решали ее с помошью Linux htb tc + хэш фильтры .

NAT
Так как на тот момент мы являлись небольшим местячковым домашним провайдером, то при подключении абонентов физических лиц у нас остро встал вопрос выдавать ли клиенту «белый» маршрутизируемый ip адрес, либо ограничиться выдачей «серых» ip адресов.

Остановились на «серых» адресах, т. к. при их использовании существенно экономился столько ценных на тот момент материал как реальные адреса. Также несколько повышалась безопасность и комфортность работы наших пользователей, т. к. извне их компьютеры не были доступны всей сети интернет «напрямую».

Собрали схему при которой мы «выгоняем» копию всего трафика пользователей (SPAN PORT) в нужные сетевые порты сервера с ОС Linux на борту, а далее с помощью ipt_NETFLOW формируем поток FLOWS на нужный сервер.

Более подробно вместе с конфигами схема работы приведена .

P.S. Мы в курсе, что большинство оборудования Cisco может лить уже сформированный NETFLOW поток в указанный Netflow коллектор, но в нашей схеме сети на тот момент такого оборудования просто не могло быть:)

Терминация пользовательских сетей.
Изначально хотелось дать пользователю ip адрес, маску подсети, и шлюз и не грузить его настройками PPPoE, PPTP, VPN что в конечном итоге должно было несколько разгрузить службу технической поддержки (что и произошло на практике), так как настройка сети становилась достаточно тривиальной в любой пользовательской ОС.

Решив применить наш предыдущий опыт использования ОС Linux пришли к следующей схеме, в ключевых местах сети устанавливаются Linux сервера с парой четырех-портовых сетевых адаптеров, один линк «уходит» в сторону ядра сети остальные в сторону «кластеров». В результате на каждом интерфейсе поднимается куча VLAN -ов с несколькими сетями в каждом из них.

Всего у нас на всю сеть было 4 сервера примерно по 10k абонентов на каждом.

Пиковый трафик достигаемый каждым сервером в часы пик стремился к полутора мегапакетам в секунду. Сервера обменивались друг с другом маршрутами по протоколу ospf .

Блокирование доступа пользователям осуществлялось с помошью ipset.

Бордер
Тут бы на этой счастливой ноте и закончить, но хочется написать о еще одном «не стандартном» применении Linux - в качестве бордера. Так получилось, что у нас вышла из строя Cisco ASR выполняющая функции бордера на который приходило 2 full view от двух аплинков.

Здесь следует небольшое лирическое отступление. Компания Cisco на 100% сдержала свои обязательства и выслала замену в течении нескольких часов после заполнения необходимых документов, но как Вы понимаете клиенты не будут ждать сутки пока новое железо прилетит в наши края. Решение было спонтанным.

Со склада взяли сервер установили на него Linux + quagga и благополучно поставили вместо вышедшей из строя Cisco.

В час пик это чудо инженерной мысли «прожевало» входящий поток 1.4Гбит/c, при суммарном kpps на всех интерфейсах порядка 400.

P.S. В ходе работы нами было собрано и протестировано множество RPM пакетов для дистрибутива CentOS 5 вот лишь небольшой их список:

  • ipset
  • connlimit
  • conntrack-tools
  • ipt_netflow
  • flow-tools
  • quagga

Cкачать их можно из данного репозитория.

P.P.S. Если у Вас есть свои собственные наработки или заметки по поводу использования *nix like OS на службе ISP, добро пожаловать.

Статья пользователя , к сожалению ему нахватает кармы на то чтобы самому запостить, поэтому все плюсы/минусы прошу оставлять в его карме