Системное администрирование ОС Solaris 10

Настройка и обслуживание сетевых соединений

Разбить на страницы
Показывать лекцию целиком

Обзор протокола TCP/IP

Мы предполагаем, что читатель знает, что такое семиуровневая модель межсетевого взаимодействия ISO/OSI, или хотя бы представляет себе, что такое протоколы сетевого и транспортного уровня. Однако для освежения памяти мы рассмотрим, какое отношение к TCP/IP имеют эти понятия.

Модель межсетевого взаимодействия описывает семь уровней абстракции, которым соответствуют реальные сетевые протоколы передачи и обработки данных. Чтобы эти уровни обрели для нас смысл, рассмотрим вначале, как одни программы передают другим данные по сети. Некое приложение А желает получить данные от приложения В. Для этого приложение А оформляет свой запрос к приложению В в соответствии с некими правилами, которые хорошо известны обоим приложениям. Так, например, происходит при просмотре веб-страниц. Веб-обозреватель пользователя посылет запрос веб-серверу и ожидает от него ответ. Чтобы послать запрос, приложение А должно не только оформить этот запрос в соответствии с правилами, известными приложению В, но и потребовать от своей системы этот запрос передать. Для передачи запроса должнен быть установлен сеанс связи, в котором произойдет передача пакета с запросом и получение подтверждения об успешном прохождении пакета, а затем сеанс связи может быть завершен. Отметим при этом, что пакет может передава ться через сети различной природы, например, веб-обозреватель пользователя, подключенного к Интернету по технологии ADSL в Москве, может обратиться к веб-серверу Yahoo, подключенному к Интернету через канал АТМ.

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

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

(рис 3.1) Модель OSI/ISO

Уровень приложения этой модели описывает правила передачи данных от приложения к приложению. В случае веб-обозревателя и вебсервера этому уровню соответствует протокол HTTP.

Уровень представления описывает представление данных (например, в случае с HTTP символы национальных алфавитов кодируются последовательностями типа %E20; это легко видеть, когда вы делаете запрос в поисковой системе по-русски и в строке адреса этот запрос отображается такими последовательностями). Протокол уровня представления может зависеть от смысла передаваемых данных, используемой ОС и т.п.

Сеансовый уровень определяет правила управления сеансом связи (как начать сеанс, какие команды можно использовать для согласования параметров сеанса, как передать данные и как завершить сеанс – все это в примере с веб-обозревателем определяется протоколом HTTP, который, как видно, охватывает целых три уровня модели межсетевого взаимодействия).

Транспортный уровень задает правила передачи пакетов и гарантирует их доставку. Существуют два типа протоколов транспортного уровня – с гарантией доставки и без оной. Например, протокол UDP (User Datagram Protocol) – это протокол транспортного уровня без гарантии доставки пакета, а TCP (Transmission Control Protocol) – с гарантией доставки. Если протокол транспортного уровня не обеспечивает гарантию доставки, то эту функцию берут на себя протоколы более высоких уровней.

Сетевой уровень определяет правила адресации и форматы пакетов для передачи по сетям любой природы, независимо от того, какие каналы связи используются. В сети Интернет применяется протокол сетевого уровня IP (Internet Protocol).

Канальный уровень служит для определения правил передачи данных по каналу связи и включает в себя уровень управления логическим каналом (LLC – logical link control) и уровень управления доступом к среде передачи (MAC – media access control). Примером протокола канального уровня является протокол Ethernet, широко используемый в локальных сетях или для быстрого доступа к провайдеру Интернет. В протоколах канального уровня, предполагающих связь нескольких сетевых интерфейсов, определяются адреса каждого из интерфейсов. Так, согласно протоколу Ethernet, каждый сетевой интерфейс должен иметь уникальный MAC-адрес, по которому можно отправить пакет.

Физический уровень определяет правила передачи данных по физическому каналу связи, такие, как последовательность бит, четность, наличие стартовых и стоповых битов и т.п. Протокол Ethernet может быть отнесен к тем протоколам, которые фактически объединяют в себе протоколы физического и канального уровня.

Кроме того, различают еще один уровень модели межсетевого взаимодействия: "нулевой". Это – уровень среды передачи. Протоколы этого уровня описывают физические параметры сигналов, специфичные для конкретной среды передачи данных. Для медного провода это – уровень сигналов (например, +5В, ), допустимое сопротивление провода и т.п.

Протоколы TCP и IP постоянно используются вместе, в связке друг с другом. Поэтому все семейство протоколов, которые базируются на их совместном применении, часто называют семейством протоколов TCP/IP, а саму связку – протоколом TCP/IP. Действительно, хотя протоколы TCP и IP – это два разных протокола, но TCP фактически не используется ни с каким иным протоколом, кроме IP.

Приложение, которое работает с сетью, может реализовывать один или несколько протоколов, каждый из которых относится к своему уровню представленной модели. Например, программа ftp самостоятельно реализует протоколы, относящиеся к трем уровням: сессионному, представления и приложения.

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

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

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

Адреса и маски

Существует два варианта протокола IP – IPv4 и IPv6, отличающихся разрядностью сетевых адресов и возможностью назначения гибкого приоритета пакета. В одной и той же сети оба протокола могут сосуществовать, но пока таких сетей, где поддерживался бы протокол IPv6, достаточно мало. Более того, сети, с поддержкой и администрированием которых нам придется столкнуться, скорее всего, созданы не сегодня и, следовательно, построены на основе "старого" варианта IP, IPv4. В существующей литературе, если надо подчеркнуть, что речь идет об IPv6, указывают, что это именно этот вариант IP, а если пишут об IPv4, употребляют термин "IP".

Здесь и далее в этой книге речь пойдет об IPv4, но многие из изложенных принципов будут справедливы и тогда, когда все перейдут на IPv6.

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

Каждый сетевой интерфейс, осуществляющий прием и передачу пакетов по протоколу IP, должен иметь уникальный сетевой адрес. Под уникальным здесь понимается такой адрес, который в пределах данной IP-сети не принадлежит ни одному другому сетевому интерфейсу. Один интерфейс может иметь несколько IP-адресов, но один и тот же IP-адрес не может принадлежать разным сетевым интерфейсам.

В протоколе IP определено, что IP-адрес состоит из четырех байт и записывается в виде четырех десятичных чисел, отделенных друг от друга точками. Каждое число соответствует значению одного из этих байтов. IP-адреса объединены в блоки, которые называются сетями. В этом значении слово "сеть" употребляется реже, чем в более привычном значении "совокупность компьютеров и других сетевых устройств". Блоки адресов (сети) классифицированы по классам сетей, которые отличаются друг от друга особенностями маршрутизации.

Разбиение всего множества адресов на блоки последовательных адресов (например, 212.133.5.0-212.133.5.255) обусловлено тем, что в каждой точке сети должно быть известно, в каком направлении следует отправить пакет, адресованный сетевому интерфейсу с неким адресом. Промежуточные маршрутизаторы, которые объединяют большие сети и являются своеобразными "вокзалами" для пакетов, следующих из одного региона планеты в другой, не должны хранить записи о местоположении каждого сетевого интерфейса и о маршруте следования к нему. Им достаточно знать, предположим, что пакет, следующий по адресу 212.133.5.13, следует отправлять туда же, куда и прочие пакеты из вышеуказанного диапазона адресов. Это же относится и к маршрутизаторам, объединяющим сеть среднего офиса с двумя-тремя диапазонами адресов, но всю тяжесть нагрузки легче представить на примере более загруженных систем.

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

Чтобы облегчить маршрутизаторам работу по запоминанию диапазонов адресов, были придуманы маски сетей, определяющие, какую часть IP-адреса занимает номер сети, а какую – номер компьютераСтрого говоря, не номер компьютера, а номер сетевого интерфейса, поскольку IP-адрес назначается интерфейсу, а не компьютеру; далее мы для краткости будем употреблять термин "номер компьютера". Можем оправдать это тем, что у компьютера в сети может быть несколько номеров – это же не серийный номер двигателя... (прим. авт.). в этой сети. Фактически, номер компьютера нужен только тому маршрутизатору, к которому непосредственно подключена локальная сеть, где находится компьютер – адресат пакета. В отличие от номера компьютера, номер сети используется всеми промежуточными маршрутизаторами, которые передают пакет друг другу от места отправки до места назначения.

Рассмотрим, как используется маска сети, на примере. Представим себе сеть, состоящую из трех сегментов. В каждом из них – по 40 компьютеров. Мы уже знаем, что для того, чтобы снабдить уникальными адресами каждый из них, нам понадобится 120 адресов, т.е. меньше, чем доступно в сети класса С. Стало быть, мы можем назначить для каждой подсети свой диапазон адресов, при этом достаточно использовать адреса только из одной сети класса С. Выберем три диапазона так, чтобы в каждом из них было не менее 40 доступных адресов: 192.168.0.0-192.168.0.63, 192.168.0.64-192.168.0.127 и 192.168.0.128-192.168.0.191. Адреса сетей в целом и широковещательные адреса включены в диапазоны.

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

У нас есть совершенно неизменная часть адресов в нашей сети – 192.168.0. Эти три байта адреса одинаковы для всех компьютеров нашей сети. Видно, что адреса в разных диапазонах отличаются значением последнего байта. Отметим, что адреса первого диапазона в двух старших битах этого байта имеют нули (действительно, двоичное представление чисел до 63 включительно дает значения от 00000000 до 00111111, старшие два бита выделены жирным шрифтом). Во втором диапазоне в упомянутых битах содержится 01: значения от 64 до 127 представляются в двоичном виде числами от 01000000 до 01111111. Аналогично, третий диапазон дает нам двоичные числа от 10000000 до 10111111. Выделенные биты разнятся между диапазонами, но одинаковы в пределах диапазона. Значение этих двух битов (их может быть больше, это зависит от числа диапазонов – подсетей, на которые разбита сеть) принято называть номером подсети; первый диапазон называют нулевой подсетью, второй – первой подсетью и т.д., смотря по значению этих битов.

Чтобы сообщить маршрутизатору, что к его первому сетевому адаптеру присоединена нулевая подсеть, ко второму – первая и к третьему – вторая, мы должны всего лишь указать маску сети на каждом из его сетевых интерфейсов. Так как мы уже договорились считать номером сети в IP-адресе значения тех битов, которые в маске имеют двоичное значение "1", то маска сети, разделенной на четыре подсети, будет иметь значение 255.255.255.192.

Почему значение последнего байта маски – 192? Потому, что 11000000 двоичное дает именно десятичное 192. Почему мы делим сеть на четыре подсети, хотя речь шла о трех диапазонах? Дело в том, что сеть можно разделить только на такое количество подсетей, которое кратно степени двойки. Поэтому вместо трех подсетей приходится брать ближайшее большее их количество.

Теперь остается назначить каждому интерфейсу маршрутизатора адреса из диапазона той подсети, которая присоединена к этому интерфейсу, и насладиться его четкой работой – по пересылке пакетов между интерфейсами.

Классы сетей

Самой крупной IP-сетью в мире является глобальная сеть Internet. Ее адресное пространство разделено на диапазоны адресов, которые называются "сетями". Сети разделены на классы. Адреса сетевых интерфейсов компьютеров в сети, как правило, относятся к классам A, B или С.

Разделение сетей на классы определяется в RFC 950 и ряде других RFCRFC – Request For Comments – стандарты, используемые в сети Интернет. Текст стандартов можно бесплатно получить на сайте www.ripn.net.. Кроме сетей A, B, С есть и другие сети, представляющие собой меньшие по размеру блоки сетей, которые используются для различных служебных надобностей.

Сети классов от A до С отличаются значением первого байта IP-адреса. Значение первого байта сети класса А находится в диапазоне от 1 до 126, класса B – от 128 до 191, класса C – от 192 до 223. Классы сетей, в адресах которых первый байт имеет значение от 224 до 254, именуются от D до F. Они имеют служебное назначение, и их адреса не используются обычными сетевыми интерфейсами.

Предполагается, что в сетях класса A номер сети занимает первый байт, а остальные три – это номер компьютера (точнее, номер сетевого интерфейса). Таким образом, в сети класса А может быть до 16777214 интерфейсов. В сети класса В номер сети занимает два байта адреса, максимальное число интерфейсов в такой сети – 65534. В сети класса С номер сети занимает три байта, номер компьютера – один, максимальное число интерфейсов в такой сети – 254.

Зарезервированные сетевые адреса

Надо иметь в виду, что один компьютер может иметь несколько сетевых интерфейсов, а каждый интерфейс может иметь несколько адресов.

Некоторые адреса в каждой сети являются зарезервированными и не могут использоваться для адресации какого-либо интерфейса.

Так, IP-адрес, в котором поле номера компьютера заполнено двоичными нулями, используется в качестве номера данной сети в целом. Например, адрес 131.45.0.0 обозначает целую сеть класса B. IP-адрес, в котором поле номера компьютера заполнено двоичными единицами, является широковещательным адресом сети (broadcast address) и применяется для одновременной рассылки пакета всем компьютерам данной сети. Получив пакет с адресом получателя 131.45.255.255, каждый компьютер сети 131.45.0.0 (класс B) воспримет этот пакет как предназначенный ему. Эти зарезервированные адреса используются, например, в целях управления маршрутизацией.

Существуют и другие зарезервированные адреса. Адрес 127.0.0.1 всегда указывает на локальный внутренний интерфейс системы. "127.0.0.1" обозначает для системы то же самое, что для человека – слово "я". Этот локальный внутрений интерфейс требуется для того, чтобы одна программа (клиент) могла обратиться к другой программе (серверу), работающей на том же компьютере, стандартным образом. Например, можно обратиться из броузера на вашем компьютере к веб-серверу на вашем же компьютере. Локальный интерфейс обычно называется lo или lo0 (от слова loopback – "петля").

Адрес 0.0.0.0 используется для обозначения маршрута по умолчанию (основного шлюза), так как этот адрес означает "все сети".

Основной шлюз

Он зарезервирован для указания "всех остальных адресатов". Если пакет не удается соотнести с конкретной строкой таблицы маршрутизации, он отправляется в шлюз согласно указывающей на него строке таблицы маршрутизации. Например, таблица маршрутизации нашего хоста выглядит так:

# netstat -rn
Routing Table: IPv4
Destination Gateway Flags Ref Use Interface
192.168.5.0 192.168.5.33 U 1 2 elxl0
224.0.0.0 192.168.5.33 U 1 0 elxl0
default 192.168.5.1 UG 1 0
127.0.0.1 127.0.0.1 UH 61 1013 lo0

Адрес нашего компьютера в этой сети – 192.168.5.33. Предположим, нам надо отправить пакет по адресу 192.168.5.30. Для этого наша система посмотрит в таблицу маршрутизации и обнаружит там маршрут 192.168.5.0, для которого указан шлюз (gateway) 192.168.5.33 – наш собственный интерфейс. Стало быть, компьютер 192.168.5.30 находится в непосредственно присоединенной к нам сети и ему надо послать пакет напрямую.

Ситуация изменится, если адресатом будет, скажем, компьютер 192.168.10.1. Тогда в таблице маршрутизации вначале не найдется подходящего маршрута – ведь там нет отдельной строки для сети 192.168.10.1, верно? Тогда пакет будет отправлен в основной шлюз, "шлюз по умолчанию", тот, что в выводе netstat обозначен словом default. Адрес назначения пакетов "во все остальные сети", тех самых, которые отправляются в шлюз, в таблице маршрутизации в ядре обозначается как 0.0.0.0.

Пакеты, предназначенные для отправки "всем остальным", направляются в основной шлюз. Основной шлюз (default gateway) – это такое место, куда любой компьютер сети отправляет пакет, если не знает, в какую сторону его лучше отправить. Действие такого шлюза подобно действию почтальона. Если Вы хотите сделать сюрприз девушке, которая живет с вами в одном подъезде, вы можете положить нежное письмо ей прямо в почтовый ящик. Если же адресат живет в другом городе, вы положите конверт в другой почтовый ящик, тот, из которого почтальон вынимает почту для отправки. Основной шлюз имеет сетевой интерфейс, работающий таким "почтовым ящиком" для пакетов, которые адресованы из локальной сети вовне.

Бесклассовая маршрутизация (CIDR)

В конце 80-х – начале 90-х годов XX века сеть Интернет росла очень быстрыми темпами. В результате стали проявляться серьезные недостатки в организации распределения адресного пространства, так как эта процедура не была рассчитана на лавинообразный рост потребителей адресов. Проблемы сводились к следующему:

  • нехватка IP-адресов. Размеры существующих классов сетей перестали отражать требования средних организаций. Количество компьютеров в сети организации часто оказывалось больше, чем количество адресов в сети класса С, но сильно меньше, чем в сети класса В;
  • замедление обработки таблиц маршрутизации. Рост размеров таблиц маршрутизации в Internet-маршрутизаторах привел к тому, что их стало сложно администрировать, маршрутизаторы работали на пределе своих возможностей.
  • Чтобы разрешить эти проблемы, в июне 1992 года IETF (Internet Engineering Task Force) принял решение об использовании технологии бесклассовой междоменной маршрутизации (Classless Inter-Domain Routing – сокращенно CIDR). В 1994-1995 годах технология была внедрена Интернет-провайдерами для маршрутизации между их сетями. Термин "междоменная" относится к так называемым доменам маршрутизации, т.е. совокупностям сетей, объединенных общим администрированем и политикой маршрутизации. Домен маршрутизации обычно ограничен сетью крупного провайдера и его субпровайдеров.

    Технология CIDR (описывается в RFC 1519) успешно применяется в любой группе сетей Internet, построенных как на основе IPv4, так и на IPv6, и взаимодействует со старыми технологиями адресации. В основе CIDR лежит принцип использования маски сети переменной длины (VLSM —variable length subnet masks) и отказ от деления Internet на сети классов А, В и С. Тогда все организации, предоставляющие услуги Internet, будут разделяться не по классам своих сетей, а по маске предоставленного им адреса.

    Согласно идеологии CIDR, провайдеры должны объединять в одну запись информацию о блоках адресов своих клиентов и анонсировать в Интернет свой блок адресов в целом. Анонсирование представляет собой передачу пакетов по протоколу динамической маршрутизации для уведомления соседних маршрутизаторов о том, что такая-то сеть теперь стала доступна через данный маршрутизатор. До 1994 гогда анонсировалась информация о каждой из сетей каждого класса в отдельности.

    Например, провайдер Internet "Слон трафика", которому NIC делегировал адреса с 198.24.0.0 по 198.31.255.255 (маска 255.248.0.0), может назначить своему клиенту фирме "Моська АО" группу адресов с 198.24.8.0 до 198.24.11.255 (маска 255.255.252.0). Ясно, что сеть "Моськи" не принадлежит ни к какому классу и, тем не менее, может успешно работать в Internet. Очевидно, что новая структура адресного пространства позволит значительно сэкономить адреса для тех организаций, которым они действительно нужны, и взять лишние у других. Без использования CIDR еще один клиент "Слона трафика", магазин "Успешный повар", был бы вынужден использовать приватные адреса (192.168.0.0) или заказывать отдельную сеть класса С. Теперь "Успешный повар" может уживаться с "Моськой АО" в пределах одного домена маршрутизации, например, использовать адреса с 198.24.12.64 до 198.24.12.127 (маска 255.255.255.192).

    В настоящее время, если организации требуется получить несколько адресов для своих компьютеров для работы в Internet, она заказывает диапазон адресов в виде <адрес, маска>, исходя из своих потребностей. Если, к примеру, ей нужно подсоединить к Internet 998 компьютеров, не нужно заказывать четыре сети класса С или одну класса В, достаточно заказать адрес и маску, позволяющие работать такому количеству компьютеров, например, < 199.14.8.0, 255.255.252.0> – 1024 сетевых адреса.

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

    В настоящее время технология CIDR поддерживается некоторыми протоколами внутридоменной (OSPF, RIP-2,E-IGRP) и междоменной маршрутизации (BGP-4), а большинство поставщиков сетевого оборудования внесли поддержку CIDR в свое пограммное обеспечение.

    Настройка сетевых интерфейсов

    Приводимый здесь порядок настройки сетевого интерфейса одинаково подойдет для любой версии Solaris. Ниже, в разделе "новые методы настройки сетевых свойств" будет дано описание новых методов настройки сетевых интерфейсов и других связанных с сетью настроек. Эти методы доступны в Solaris Express и OpenSolaris, но по состоянию дел на июнь 2008 года написания книги не включены в Solaris 10.

    Для того, чтобы через сетевой интерфейс можно было принимать и передавать данные, системе следует сообщить его параметры, а именно IP-адрес и маску сети. Прежде того необходимо выполнить специфичную для Solaris команду для активации интерфейса

    ifconfig if_name plumb

    После этого надо назначить адрес и маску:

    ifconfig if_name IP-address broadcast broadcast-address netmask netmask

    Здесь if_name – это имя интерфейса (например, eri0 ), IP-address – адрес, который следует назначить этому интерфейсу, а необязательные параметры broadcast-address и netmask задают широковещательный адрес сети, к которой подключен интерфейс, и маску сети.

    Для включения интерфейса следует дать команду

    ifconfig if_name up

    Все эти команды можно объединить в одну, указав таким образом, что следует выполнить низкоуровневую инициализацию интерфейса, назначить ему адрес и маску, после чего включить (сделать возможным получение и отправку IP-пакетов через него):

    ifconfig if_name IP-address broadcast broadcast-address netmask
    netmask plumb up

    Как создать "ip alias" – несколько адресов на одном интерфейсе

    Для присвоения одному интерфейсу нескольких сетевых адресов в Solaris используются псевдонимы. В отличие от других UNIX'ов здесь не работает конструкция ifconfig alias. Следует пользоваться командами

    ifconfig if_name:0 IP-address netmask netmask up
    ifconfig if_name:1 IP-address netmask netmask up

    Надо помнить, что if_name:0 обозначает сам оригинальный интерфейс, т.е. Elxl0:0 – это то же самое, что elxl0. Кроме того, перед выполнением команд, назначающих адрес и другие параметры такому "виртуальному" интерфейсу, например, elxl0:1, следует создать этот виртуальный интерфейс командой

    ifconfig if_name:1 plumb

    Удаление такого интерфейса выполняется командой

    ifconfig if_name:1 down

    Например

    ifconfig le0:1 down

    В Solaris до версии 7 не требуется выполнять команду

    ifconfig if_name:1 plumb

    для создания интерфейса. Для удаления интерфейса также можно применить

    ifconfig if_name:1 unplumb

    Это означает удаление интерфейса и связанных с ним структур данных из памяти, в то время как

    ifconfig le0:1 down

    обеспечивает только отключение интерфейса и "забывание" его настроек.

    Для добавления постоянного виртуального (его иногда еще называют "логическим") интерфейса-псевдонима следует создать соответствующий файл /etc/hostname:

    echo IP-адрес-псевдоним >/etc/hostname.if_name:1

    Например,

    echo 194.125.5.6 >/etc/hostname.le0:1

    Для изменения параметров настройки сети можно использовать пограмму ndd. Она служит для изменения параметров некоторых драйверов в ядре. Обычно ndd применяется для назначения параметров драйверов сети. Например, команда

    ndd -set /dev/ip ip_forwarding 0

    позволяет отключить пересылку сетевых пакетов между интерфейсами системы.

    За более детальной информацией о ndd следует обратиться к руководству ndd(1M).

    Интерфейс-псевдоним может использоваться для организации "виртуальной маршрутизации", когда в одном физическом сегменте сети устанавливаются компьютеры с адресами из разных сетей, и пакеты друг другу они могут пересылать через систему, сетевой адаптер которой имеет два адреса из разных сетей:

    ifconfig -a
    lo0: flags=1000849<UP,LOOPBACK,RUNNING,MULTICAST,IPv4> mtu 8232 index 1
    inet 127.0.0.1 netmask ff000000
    elxl0: flags=1000843<UP,BROADCAST,RUNNING,MULTICAST,IPv4> mtu 1500 index 2
    inet 192.168.5.33 netmask ffffff00 broadcast 192.168.5.255
    ether 0:60:8:cb:3b:c0
    elxl0:2: flags=1000842<BROADCAST,RUNNING,MULTICAST,IPv4> mtu 1500 index 2
    inet 198.16.1.1 netmask ffffff00 broadcast 198.16.1.255

    Файлы настроек свойств сети в Solaris

    Параметры сети определяются в:

  • /etc/defaultdomain – полное имя домена (например, company.ru);
  • /etc/inet/hosts – таблица соответствия имен компьютеров и их адресов;
  • /etc/hostname.le0 – краткое имя интерфейса le0. Остальные интерфейсы описаны соответствующими файлами. Должно совпадать с тем, что указано для адреса этого интерфейса в /etc/inet/hosts:
    cat /etc/hostname.le0
    hamburger
    cat /etc/inet/hosts | grep hamburger
    192.243.78.11 hamburger.macro.su hamburger
  • /etc/hosts – символьная ссылка на /etc/inet/hosts ;
  • /etc/inet/nsswitch.conf – вместо host.conf в других UNIX'ах – указание порядка опроса name-сервера и файла hosts ;
  • cat /etc/inet/nsswitch.conf
  • hosts: files, DNS
  • /etc/bootptab – адреса принт-сервера и принтера;
  • /etc/resolv.conf – настройки DNS, включая адреса DNS-серверов;
  • /etc/inet/netmasks - в каждой строчке пара: адрес сети, маска сети
    cat /etc/netmasks
    163.239 255.255.255.0
  • /etc/defaultrouter – адрес шлюза ;
  • /etc/nodename – имя компьютера.
  • ВНИМАНИЕ! Файлы /etc/hostname. действительно называются hostname.название_интерфейса. НЕ НАДО подставлять в имя файла действительное имя компьютера, тем более, не следует подставлять вывод команды hostname. Например, на компьютере sunny.macro.ru файл hostname.le0 содержит внутри слово sunny, а _называется_ файл hostname.le0, что говорит о его содержимом: имя хоста, сопоставляемое интерфейсу le0.

    При обычной настройке подключенного к сети компьютера под управлением Solaris следует указать все те же параметры, что и при настройке любой системы, работающей с TCP/IP: адрес интерфейса, имя компьютера, имя домена, адрес DNS-сервера, адрес основного шлюза. Помните, что адрес DNS-сервера и основного шлюза должны быть указаны в виде IP-адресов, а не в виде доменных имен: при обращении к серверу имен система еще не обязана знать, какой IP-адрес какому компьютеру соответствует. Шлюз же следует указать в виде IP-адреса потому, что сервер имен может находиться вне локальной сети, и тогда запросы к нему будут направляться через шлюз.

    Для корректной работы системных вызовов, использующих resolver(3), т.е. тех, что обращаются к серверу имен с вопросом о соответствии IP-адреса имени или с требованием найти обратное соответствие, надо внести верную запись в файл /etc/resolv.conf. В этом файле допустимы команды:

    nameserver IP-адрес
    search домен
    domain домен

    Первая команда – nameserver – называет IP-адрес сервера имен; всего допустимо до трех таких команд. Вторая указывает, имена каких доменов надо подставлять к имени хоста, если его ввели без имени домена (т.е. для поиска хоста с именем типа sunny ), а команда domain определяет, в каком домене находится наш компьютер; это требуется для того, чтобы вначале попытаться найти компьютер с неполным именем (например, suuny ) в своем домене, а уже затем попытать счастья в других доменах, которые перечислены в директиве search. Вот пример файла /etc/resolv.conf:

    domain eu.spb.ru
    nameserver 192.168.5.18
    search eu.spb.ru

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

    Настройка маршрутизации

    Маршрутизацией называется передача пакетов между интерфейсами. Базовые функции маршрутизации в UNIX'e поддерживаются в ядре. Кроме этого, для поддержки протоколов динамической маршрутизации можно использовать специализированные программы маршрутизации, например, демон gated.

    Ядро хранит таблицу маршрутизации, которая формируется при загрузке системы. Посмотреть таблицу маршрутизации можно командой netstat –nr.

    Routing Table: IPv4
    Destination Gateway Flags Ref Use Interface
    ------------- --------------- ------- ------ ------ ---------
    192.168.5.0 192.168.5.33 U 1 4 elxl0
    224.0.0.0 192.168.5.33 U 1 0 elxl0
    default 192.168.5.1 UG 1 0
    127.0.0.1 127.0.0.1 UH 54 5063 lo0

    Флаги netstat

    Каждый маршрут отмечен своим флагом. Флаги в выводе netstat обозначают состояние и тип маршрута:

  • Uup – маршрут активен и действует;
  • Ggateway – маршрут лежит к шлюзу;
  • Hhost – маршрут к хосту (компьютеру), а не к сети;
  • Sstatic – маршрут добавлен статически (обычно – вручную);
  • Ddynamic – маршрут добавлен динамически, посредством протокола маршрутизации.
  • В случае, если в системе активировано несколько сетевых интерфейсов, маршрутизация пакетов между ними по умолчанию разрешена. Если надо отключить это свойство, т.е. запретить маршрутизацию пакетов между интерфейсами, следует создать файл /etc/notrouter. Его существование будет проверяться при запуске системы, и, если он существует, передача пакетов между интерфейсами будет выключена. Вы должны помнить, что Solaris обладает повышенной уязвимостью во время запуска, когда машина может перенаправлять пакеты независимо от /etc/notrouter. С другой стороны, это не очень серьезная уязвимость: серверы Solaris, равно и другие серверы приложений, не имеет смысл устанавливать вне корпоративной сети; вне такой сети вряд ли потребуется запрещать маршрутизацию средствами ОС.

    Для того, чтобы добавить или изменить маршрут пакетов к определенному адресату (компьютеру или сети), надо использовать команду route. Например, если следует отправлять пакеты в сеть 193.13.13.0/24 (как вы помните, такая запись означает сеть класса С) через интерфейс с адресом 192.168.5.18, то нужно дать команду route add:

    netstat -rn
    Routing Table: IPv4
    Destination Gateway Flags Ref Use Interface
    ------------- --------------- ------- ------ ------ ---------
    192.168.5.0 192.168.5.33 U 1 5 elxl0
    224.0.0.0 192.168.5.33 U 1 0 elxl0
    default 192.168.5.1 UG 1 0
    127.0.0.1 127.0.0.1 UH 54 5775 lo0
    bash-2.05#
    bash-2.05# route add net 193.13.13.0 192.168.5.18
    add net 193.13.13.0: gateway 192.168.5.18
    bash-2.05# netstat -rn
    Routing Table: IPv4
    Destination Gateway Flags Ref Use Interface
    ------------- --------------- ------- ------ ------ ---------
    193.13.13.0 192.168.5.18 UG 1 0
    192.168.5.0 192.168.5.33 U 1 5 elxl0
    224.0.0.0 192.168.5.33 U 1 0 elxl0
    default 192.168.5.1 UG 1 0
    127.0.0.1 127.0.0.1 UH 54 5905 lo0

    Синтаксис команды route:

    route [-dnqtv] команда [[модификаторы] аргументы]

    -n – сообщать IP-адреса, вместо имен компьютеров. Для вывода имени его еще нужно определить по адресу, это занимает время и окажется невозможным при сбое настроек или недоступности сервера имен;

    -v – сообщить дополнительные детали;

    -q – выполнять "молча", т.е не выдавая никаких сообщений.

    Команда route также способна выполнять следующие действия в зависимости от внутренних команд, переданных ей в качестве аргументов:

  • add – добавить маршрут;
  • change – изменить маршрут (например, шлюз для сети);
  • flush – удалить все маршруты;
  • delete – удалить один указанный маршрут;
  • get – найти и показать маршрут до определенного места назначения;
  • monitor – следить за маршрутом и сообщать об изменении информации в таблице.
  • Внутренняя команда monitor осмысленна для динамически обновляемых маршрутов:

    route [-n] monitor

    Обычно route вызывается для изменения или добавления маршрута, вот так:

    route [-n] команда [-net | -host] куда через_что [netmask]

    Для указания всех интерфейсов вообще используется ключевое слово default, синоним которого – это параметр -net 0.0.0.0.

    В большинстве случаев ручная модификация таблицы маршрутов не требуется, все строки в таблицу заносятся автоматически на основании стандартных настроек системы (адресов сетевых интерфейсов, адреса основного шлюза и масок сетей).

    Анализ таблиц arp

    Таблица маршрутизации показывает, через какие шлюзы и интерфейсы отправлять пакеты в те или иные IP-сети. В системах, работающих с протоколом IP, также всегда есть таблица соответствий IP-адресов MAC-адресам, т.е. внутренним адресам сетевых адаптеров. Эта таблица используется при пересылках пакетов в локальной сети; она называется таблицей протокола нахождения соответствий адресов (ARP – Address Resolution Protocol). Посмотреть таблицу вы можете с помощью команды arp (ключ -a нужен для показа всей таблицы):

    bash-2.05# arp -a
    Net to Media Table: IPv4
    Device IP Address Mask Flags Phys Addr
    ------ --------------------- --------------- ----- -----------------
    elxl0 hp5l 255.255.255.255 00:50:ba:03:b6:47
    elxl0 baclan.q.spb.ru 255.255.255.255 00:60:b0:3c:99:05
    elxl0 ip-119.q.spb.ru 255.255.255.255 00:10:5a:72:dd:9c
    elxl0 192.168.5.72 255.255.255.255 00:e0:29:9b:79:cd
    elxl0 lib.q.spb.ru 255.255.255.255 00:e0:29:9e:f3:3b
    elxl0 sunny 255.255.255.255 SP 00:60:08:cb:3b:c0
    elxl0 192.168.5.11 255.255.255.255 00:e0:29:44:66:08
    elxl0 mask.q.spb.ru 255.255.255.255 00:e0:29:48:63:64
    elxl0 192.168.1.29 255.255.255.255 00:e0:b0:5a:66:90
    elxl0 192.168.5.225 255.255.255.255 00:10:5a:73:6c:6b
    elxl0 192.168.5.208 255.255.255.255 00:e0:29:64:9e:e7
    elxl0 192.168.5.183 255.255.255.255 00:e0:29:61:29:42
    elxl0 192.168.5.158 255.255.255.255 00:e0:29:64:8f:b9
    elxl0 BASE-ADDRESS.MCAST.NET 240.0.0.0 SM 01:00:5e:00:00:00

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

    Протокол DHCP

    Протокол DHCP (dynamic host configuration protocol) используется для динамического назначения параметров настройки подсистемы IP в любых операционных системах. Этот протокол организован по принципу клиент-сервер: клиент запрашивает информацию, делая широковещательный запрос в сеть, а сервер сообщает ее клиенту в ответ. Серверы DHCP применяются для динамического назначения IP-адресов, а также для сообщения клиентам DHCP такой настроечной информации, как маска сети, адрес сервера имен и т.д. Обязательно назначается только адрес и маска, все остальное может быть назначено в зависимости от настроек сервера и клиента DHCP.

    Протокол динамической настройки параметров системы имеет смысл использовать в сетях, где мы имеем дело с большим количеством компьютеров. Если у вас всего три компьютера, проще дать им фиксированные IP-адреса, чем заниматься настройкой DHCP. Дело в том, что DHCP имеет неоспоримые плюсы и столь же неоспоримые минусы (см. таблицу 15.1).

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

    Что касается сложности учета событий, то учет можно вести и по MAC-адресам сетевых карт. Это требует работы с командой arp и знания, в каких компьютерах какие сетевые адаптеры (в смысле – с какими именно MAC-адресами) установлены. Думаете, это легко? Вспомните, когда вас последний раз интересовал MAC-адрес чьей-нибудь машины! Если в последнюю неделю хоть один из них попался вам на глаза, то вы – везунчик. Расскажите об этом подруге, она будет удивлена, что кому-то интересны эти дурацкие адреса.

    Основное внимание в настройке DHCP-сервера следует уделить диапазону адресов, из которого они будут назначаться клиентам DHCP (адресов должно хватить всем!), и доступности DHCP-сервера (этот компьютер не должен оказаться выключенным тогда, когда клиент хочет получить IP-адрес).

    Преимущества и недостатки DHCP
    + DHCP– DHCP
    Не надо настраивать каждый компьютер в отдельности, системы Windows по умолчанию настраиваются как клиенты DHCP; при установке систем UNIX указать, что они – клиенты DHCP, тоже очень просто Если сервер DHCP недоступен, многие из компьютеров сети вообще не смогут начать работу, и через определенное время, связанное с политикой назначения адресов, все компьютеры окажутся "отрезанными" от сети
    Все настройки делаются централизованно, при изменении одной настройки (например, адреса основного шлюза сети) нет нуждменять настройки на каждом компьютере Сбои DHCP труднее диагностировать, т.к. они проявляются в виде жалоб пользователей (причем неодновременных) на невозможность войти в сеть, а это может быть вызвано дюжинами причин
    Можно забыть о настройке параметров сети всех компьютеров, кроме DHCP-сервера, навсегда, о них позаботится сервер DHCP Использование DHCP усложняет учет событий в сети: ведь в файлы протоколов заносятся IP-адреса компьютеров. Там, где адреса компьютерам выдаются динамически, один и тот же адрес может принадлежать разным компьютерам в разное время
    Если подключение к сети физически доступно большому кругу лиц, то посторонний может подключиться к розетке в сети, и, даже не зная никаких настроек, сразу оказаться в общей сети

    Настройка DHCP-сервера

    DHCP-сервер, т.е. программа, которая принимает запросы от DHCP-клиентов и отвечает им, в Solaris носит название in.dhcpd. Для настройки параметров DHCP-сервера следует модифицировать таблицы dhcptab и dhcp_network. Первая определяет группы различных параметров (например, совокупность диапазона назначаемых адресов, адреса шлюза и сервера имен), вторая устанавливает соответствие между определенными клиентами DHCP и IP-адресами. Эту таблицу можно использовать для задания явно указанных адресов отдельным компьютерам в сети. Подробнее формат файлов таблиц описан в руководстве по dhcptab(4) и dhcp_network(4).

    В Solaris DHCP-сервер выполняет также функции BOOTP-сервера (если это требуется) или может быть настроен как BOOTP-посредник (BOOTP-relay). Например, при старте програмы dhcpmgr последняя спрашивает, желаем ли мы настроить BOOTP-relay или DHCP-сервер:

    Для комплексной настройки DHCP-сервера можно применять графическую программу dhcpmgr ( /usr/sadm/admin/bin/dhcpmgr ), которая предоставляет доступ ко всем необходимым параметрам DHCP-сервера и обладает функциональностью трех утилит управления DHCP-сервером: dhcpconfig, dhtadm и pntadm:

    (рис 3.a)

    Настройка DHCP-клиента

    Для того, чтобы система полагала некий сетевой интерфейс динамически настраиваемым через DHCP, достаточно команды

    ifconfig имя_интерфейса dhcp start

    После этого программа ifconfig автоматически вызовет демона dhcpagent, который занимается отправкой DHCP-запросов и настройкой интерфейса в соответствии с полученным ответом. Посмотреть параметры, полученные через dhcp, можно командой

    ifconfig имя_интерфейса dhcp status

    При настройке DHCP-клиента надо помнить, что параметры настройки выделяются на определенное время, и по истечении этого времени будут автоматически запрошены у сервера заново.

    При работающей службе NWAM администратору или пользователю Solaris, начиная с версии 10, не следует беспокоиться о настройке интерфейса по протоколу DHCP – служба NWAM сделает это сама.

    Трансляция адресов и фильтрация пакетов

    "Трансляция" или "подстановка" адресов (NAT – network address translation) широко распространена в таких системах UNIX, как Linux и FreeBSD. В Solaris до версии 9 включительно не было поставляемого в комплекте с системой пакета, который позволял бы выполнять трансляцию адресов.

    Начиная с Solaris 10 в состав системы включен мощный пакет ipfilter, который может выполнять роль фильтра пакетов ("брандмауэра") и транслятора адресов. Программы этого типа называют как брандмауэрами (brandmauer), так и "файрволами" (firewall).

    Особенностью ipfilter является то, что, в отличие от других популярных программ фильтрации пакетов, она выполняет проверку пакета на соответствие ВСЕМ правилам таблицы фильтрации, поэтому, если в таблице правил за более строгими идут менее строгие правила, к пакету будут применены менее строгие. Например, если запрещен входящий трафик с адреса 192.168.8.7, но разрешен входящий трафик из сети 192.168.8/25, то фактически пакеты с адреса 192.168.8.7 будут проходить сквозь фильтр. Подробнее о правилах фильтрации следует узнать из руководства по соответствующим пакетам.

    Пакет ipfilter в Solaris основан на открытом продукте IPFilter. Продукт доступен не только для Solaris, страница IPFilter в сети – http://coombs.anu.edu.au/~avalon/ip-filter.html.

    Для тех, кто использует старые версии Solaris, Sun Microsystems бесплатно предлагает пакет SunScreen с функциональностью фильтра пакетов, он доступен по адресу http://wwws.sun.com/software/securenet/lite/download.html.

    Функции ipfilter

    Фильтр пакетов может использоваться для решения трех задач:

  • фильтрации пакетов;
  • протоколирования пакетов и учета трафика;
  • трансляции адресов.
  • Схема фильтрации пакета показана на рис. 3.2. Рисунок взят из документации по Solaris по адресу http://docs.sun.com/app/docs/doc/816-4554/6maoq0247?a=view.

    Пакет, принятый сетевым интерфейсом, вначале передается во входной фильтр. Там его ждет проверка и возможные изменения, если он попадает под действие правил, описанных в настройках фильтра. Пакет во входном фильтре проходит следующие этапы:

  • трансляция адреса (network address translation – если требуется изменить адрес источника пакета, это делается здесь);
  • протоколирование пакета (ip accounting);
  • проверка кэша фрагментов (fragment cache check) – если следующий пакет в потоке данных является фрагментом, и предыдущий пакет был разрешен к передаче фильтром, то фрагмент пакета также пропускается, минуя статическую таблицу и проверку правил фильтрации;
  • проверка состояния пакета (Packet State Check) – если ключевая фраза keep state включена в правило, все пакеты в указанной сессии пропускаются фильтром или блокируются, в зависимости от того, чего требует правило – разрешения передачи или блокировки;
  • проверка фильтром (Firewall Check) – входные и выходные правила могут быть настроены по отдельности, определяя, разрешено ли пакету войти в фильтр, быть переданным подпрограммам ядра Solaris для обработки в стеке TCP/IP или быть переданным системой в сеть.
  • Группы(Groups) – позволяют определить правила иерархически.

    Функции(Function) – функция представляет собой действие, которое следует произвести с пакетом. Возможные варианты действий: block (блокировать), pass (разрешить передачу), literal, and send ICMP response (блокировать и послать отправителю сообщение о недоставке).

    Короткая маршрутизация (Fast-route) – fast-route указывает фильтру пакетов, что не следует передавать пакет для обработки в стек IP, это вызовет уменьшение параметра TTL в пакете.

    Аутентификация IP(IP Authentication) – пакет, прошедший аутентификацию, допускается к проверке правилами фильтра только единожды, чтобы избежать двойной обработки.

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

    (рис 3.2) Схема фильтрации пакетов фильтром ipfilter

    Настройки ipfilter

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

    В этом каталоге служба фильтра пакетов ожидает увидеть следующие файлы настроек:

  • ipf.conf – общие настройки фильтра
  • ippools.conf – настройки групп адресов
  • ipnat.conf – настройки NAT
  • Чтобы разрешить запуск фильтра пакетов при старте системы, после настройки файлов его конфигурации следует дать команду

    svcadm enable svc:/network/ipfilter

    В Solaris версий Solaris 10 3/05 release, Solaris 10 1/06 release, Solaris 10 6/06 release, и Solaris 10 11/06 release для работы с ipfilter помимо службы ipfilter использовался дополнительный компонент – служба pfil, которую надо было отдельно настраивать и запускать с помощью smf. Начиная с Solaris 10 07/08 этого не требуется, этот компонент был заменен постоянно действующим другим компонентом.

    Простые настройки ipf.conf

    Примером простой настройки фильтра пакетов является следующий файл ipf.conf:

    # pass and log everything by default
    pass in log on elxl0 all
    pass out log on elxl0 all
    # block, but don't log, incoming packets from other reserved addresses
    block in quick on elxl0 from 10.0.0.0/8 to any
    block in quick on elxl0 from 172.16.0.0/12 to any
    # block and log untrusted internal IPs. 0/32 is notation that replaces
    # address of the machine running Solaris IP Filter.
    block in log quick from 192.168.1.15 to <thishost>
    block in log quick from 192.168.1.43 to <thishost>
    # block and log X11 (port 6000) and remote procedure call
    # and portmapper (port 111) attempts
    block in log quick on elxl0 proto tcp from any to elxl0/32 port =
    6000 keep state
    block in log quick on elxl0 proto tcp/udp from any to elxl0/32 port =
    111 keep state

    В этом примере использовался интерфейс elxl0. Подставьте вместо elxl0 фактический интерфейс своего компьютера при настройке фильтра пакетов. Обратите внимание, что каждый пакет проверяется на соответствие всем правилам фильтра, в отличие от фильтров ipfw в FreeBSD и iptables в Linux, где проверка делается в порядке нумерации правил до первого совпадения.

    Настройки NAT

    Для настройки NAT следует использовать команду ipnat или записать требуемые настройки в файл /etc/ipf/ipnat.conf:

    map elxl0 192.168.1.0/24 -> 10.1.0.0/16

    В этой команде указывается внешний интерфейс маршрутизатора, т.е. данный пример приведен для случая, когда интерфейс elxl0 смотрит в сторону провайдера, а внутрь локальной сети смотрит какой-то другой интерфейс (например, elxl1).

    Настройки пулов адресов

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

    Описане пулов адресов, которое загружается при старте системы, находится в /etc/ipf/ippool.conf. Для управления пулами адресов "на лету", т.е. во время работы системы, следует использовать команду ippool.

    Описание пула адресов выполняется в соответствии со следующим синтаксисом:

    table role = role-name type = storage-format number = reference-number

    Здесь table определяет начало описания пула, role указывает роль пула для фильтра (пока что определена всего одна роль – ipf ), type сообщает формат хранения описания этого пула, number дает номер, по которому в правиле фильтрации можно указать данный пул.

    Например, для того, чтобы включить в пул номер 13 группу из двух адресов 10.1.1.1 и 10.1.1.2, а также сеть 192.168.1.0, необходимо в файле ippool.conf сделать следующую запись:

    table role = ipf type = tree number = 13
    { 10.1.1.1/32, 10.1.1.2/32, 192.168.1.0/24 };

    После этого на определенный в ippool.conf пул можно будет ссылаться в правилах фильтрации, например, так:

    pass in from pool/13 to 192.168.1.0/24

    Информация о пулах загружается до списка правил, и внесение нового пула в ippool.conf не дает возможности использовать ссылку на него используйте команду ipfstat -io для получения информации о действующих правилах:

    ipfstat -io
    empty list for ipfilter(out)
    empty list for ipfilter(in)

    Для более подробной информации о пулах адресов в настройке ipfilter, смотрите руководство по ippool(4).

    Новые методы настройки сетевых свойств

    inetmenu

    В "классическом" методе настройки адресов в Solaris (том самом, который устанавливается при запрете запуска службы svc:/network/physical:nwam и разрешении запуска службы svc:/network/physical:default ) настройка интерфейса с помощью протокола DHCP ( ifconfig <интерфейс> dhcp ) динамически работает только с IP-адресом, не позволяя столь же динамически настроить NIS, DNS или другие службы имен.

    Однако для Solaris есть простой инструмент, который помогает решить и эту задачу. Он является переходной ступенью от "классической" схемы к NWAM. Этот инструмент – программа inetmenu, которую можно скачать по адресу http://www.opensolaris.org/os/community/laptop/inetmenu/

    После установки inetmenu нужно удалить из системы файлы /etc/ hostname.*, и /etc/resolv.conf, поскольку они будут создаваться программой inetmenu при активации соответствующего сетевого подключения.

    Программа inetmenu поддерживает статическое задание IP-адреса, маршрутизации и сервисов имен, динамическое получение по DHCP и настройку IP-адреса, маршрутизации и сервисов имен, а также работу с беспроводной сетью. Разумеется, программа не заменяет собой драйверы устройств, поэтому все сетевые адаптеры, включая беспроводные, должны быть настроены до запуска этой программы. При работе с inetmenu служба svc:/network/physical:nwam должна быть запрещена к запуску, а служба svc:/network/physical:default – разрешена, так как inetmenu просто создает корректные файлы /etc/resolv.conf и динамически настраивает интерфейсы, управляя ими через ifconfig.

    Программа inetmenu поддерживает настройку проводных и беспроводных (wi-fi) интерфейсов. Все новые выпуски Solaris поддерживают работу с wi-fi с шифрацией по протоколам WEP и WPA.

    Так как настройки в различных местах, куда вы можете прийти со своим лаптопом, могут не только отличаться, но и требовать ручной "доделки" (указание специфичных адресов DNS-серверов и других, в зависимости от настроек DHCP-сервера и других компонентов сети), в inetmenu есть возможность настройки "профилей", т.е. наборов сетевых настроек для различных мест пребывания. Каждый профиль можно назвать соответственно тому, для какого места он предназначен: office, home и т.д. Инструкцию по тонкой настройке inetmenu и созданию профилей для различных можно прочесть в каталоге /etc/inetmenu после установки программы.

    NWAM

    Служба NWAM (NetWork Auto Magic) выполняет автоматическую настройку сетевых интерфейсов. Она хорошо приспособлена для работы на компьютерах, у которых в каждый момент времени требуется иметь всего один активный сетевой интерфейс. Если ваша задача – настройка маршрутизатора, службой NWAM пользоваться будет не так удобно, хотя, возможно, в будущем эта служба будет интегрирована со службой поддержки динамической маршрутизации.

    NWAM более всего полезна на лаптопах, хотя может использоваться и для рабочих станций в локальной сети.

    NWAM обычно не требует вмешательства со стороны системного администратора и тем более пользователя. Назначение адресов и автоматическое уничтожение настроек по завершении сетевого подключения выполняет демон nwamd, который управляется как служба svc:/network/physical:nwam.

    Если требуется выполнить какие-либо действия до настройки сетевого интерфейса демоном nwamd, или после этой настройки – это можно сделать, создав запускаемые скрипты в подкаталогах каталога /etc/nwam/ulp/, как объяснено в руководстве по nwamd(1M). Основные настройки службы NWAM хранятся в файлах, расположенных в каталоге /etc/nwam.

    NWAM обычно не требует ручной настройки и поддерживает как проводные, так и беспроводные соединения. В некоторых случаях при вводе и последующем кэшировании некорректных паролей для подключения к беспроводным сетям с WEP- или WPA-шифрованием, может понадобиться удалить вручную файл /etc/nwam/known_wifi_nets и применить программу dladm(1M) для удаления запомненного ключа.

    Страницы:

    Обзор протокола TCP/IP

    Мы предполагаем, что читатель знает, что такое семиуровневая модель межсетевого взаимодействия ISO/OSI, или хотя бы представляет себе, что такое протоколы сетевого и транспортного уровня. Однако для освежения памяти мы рассмотрим, какое отношение к TCP/IP имеют эти понятия.

    Модель межсетевого взаимодействия описывает семь уровней абстракции, которым соответствуют реальные сетевые протоколы передачи и обработки данных. Чтобы эти уровни обрели для нас смысл, рассмотрим вначале, как одни программы передают другим данные по сети. Некое приложение А желает получить данные от приложения В. Для этого приложение А оформляет свой запрос к приложению В в соответствии с некими правилами, которые хорошо известны обоим приложениям. Так, например, происходит при просмотре веб-страниц. Веб-обозреватель пользователя посылет запрос веб-серверу и ожидает от него ответ. Чтобы послать запрос, приложение А должно не только оформить этот запрос в соответствии с правилами, известными приложению В, но и потребовать от своей системы этот запрос передать. Для передачи запроса должнен быть установлен сеанс связи, в котором произойдет передача пакета с запросом и получение подтверждения об успешном прохождении пакета, а затем сеанс связи может быть завершен. Отметим при этом, что пакет может передава ться через сети различной природы, например, веб-обозреватель пользователя, подключенного к Интернету по технологии ADSL в Москве, может обратиться к веб-серверу Yahoo, подключенному к Интернету через канал АТМ.

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

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

    (рис 3.1) Модель OSI/ISO

    Уровень приложения этой модели описывает правила передачи данных от приложения к приложению. В случае веб-обозревателя и вебсервера этому уровню соответствует протокол HTTP.

    Уровень представления описывает представление данных (например, в случае с HTTP символы национальных алфавитов кодируются последовательностями типа %E20; это легко видеть, когда вы делаете запрос в поисковой системе по-русски и в строке адреса этот запрос отображается такими последовательностями). Протокол уровня представления может зависеть от смысла передаваемых данных, используемой ОС и т.п.

    Сеансовый уровень определяет правила управления сеансом связи (как начать сеанс, какие команды можно использовать для согласования параметров сеанса, как передать данные и как завершить сеанс – все это в примере с веб-обозревателем определяется протоколом HTTP, который, как видно, охватывает целых три уровня модели межсетевого взаимодействия).

    Транспортный уровень задает правила передачи пакетов и гарантирует их доставку. Существуют два типа протоколов транспортного уровня – с гарантией доставки и без оной. Например, протокол UDP (User Datagram Protocol) – это протокол транспортного уровня без гарантии доставки пакета, а TCP (Transmission Control Protocol) – с гарантией доставки. Если протокол транспортного уровня не обеспечивает гарантию доставки, то эту функцию берут на себя протоколы более высоких уровней.

    Сетевой уровень определяет правила адресации и форматы пакетов для передачи по сетям любой природы, независимо от того, какие каналы связи используются. В сети Интернет применяется протокол сетевого уровня IP (Internet Protocol).

    Канальный уровень служит для определения правил передачи данных по каналу связи и включает в себя уровень управления логическим каналом (LLC – logical link control) и уровень управления доступом к среде передачи (MAC – media access control). Примером протокола канального уровня является протокол Ethernet, широко используемый в локальных сетях или для быстрого доступа к провайдеру Интернет. В протоколах канального уровня, предполагающих связь нескольких сетевых интерфейсов, определяются адреса каждого из интерфейсов. Так, согласно протоколу Ethernet, каждый сетевой интерфейс должен иметь уникальный MAC-адрес, по которому можно отправить пакет.

    Физический уровень определяет правила передачи данных по физическому каналу связи, такие, как последовательность бит, четность, наличие стартовых и стоповых битов и т.п. Протокол Ethernet может быть отнесен к тем протоколам, которые фактически объединяют в себе протоколы физического и канального уровня.

    Кроме того, различают еще один уровень модели межсетевого взаимодействия: "нулевой". Это – уровень среды передачи. Протоколы этого уровня описывают физические параметры сигналов, специфичные для конкретной среды передачи данных. Для медного провода это – уровень сигналов (например, +5В, ), допустимое сопротивление провода и т.п.

    Протоколы TCP и IP постоянно используются вместе, в связке друг с другом. Поэтому все семейство протоколов, которые базируются на их совместном применении, часто называют семейством протоколов TCP/IP, а саму связку – протоколом TCP/IP. Действительно, хотя протоколы TCP и IP – это два разных протокола, но TCP фактически не используется ни с каким иным протоколом, кроме IP.

    Приложение, которое работает с сетью, может реализовывать один или несколько протоколов, каждый из которых относится к своему уровню представленной модели. Например, программа ftp самостоятельно реализует протоколы, относящиеся к трем уровням: сессионному, представления и приложения.

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

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

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

    Адреса и маски

    Существует два варианта протокола IP – IPv4 и IPv6, отличающихся разрядностью сетевых адресов и возможностью назначения гибкого приоритета пакета. В одной и той же сети оба протокола могут сосуществовать, но пока таких сетей, где поддерживался бы протокол IPv6, достаточно мало. Более того, сети, с поддержкой и администрированием которых нам придется столкнуться, скорее всего, созданы не сегодня и, следовательно, построены на основе "старого" варианта IP, IPv4. В существующей литературе, если надо подчеркнуть, что речь идет об IPv6, указывают, что это именно этот вариант IP, а если пишут об IPv4, употребляют термин "IP".

    Здесь и далее в этой книге речь пойдет об IPv4, но многие из изложенных принципов будут справедливы и тогда, когда все перейдут на IPv6.

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

    Каждый сетевой интерфейс, осуществляющий прием и передачу пакетов по протоколу IP, должен иметь уникальный сетевой адрес. Под уникальным здесь понимается такой адрес, который в пределах данной IP-сети не принадлежит ни одному другому сетевому интерфейсу. Один интерфейс может иметь несколько IP-адресов, но один и тот же IP-адрес не может принадлежать разным сетевым интерфейсам.

    В протоколе IP определено, что IP-адрес состоит из четырех байт и записывается в виде четырех десятичных чисел, отделенных друг от друга точками. Каждое число соответствует значению одного из этих байтов. IP-адреса объединены в блоки, которые называются сетями. В этом значении слово "сеть" употребляется реже, чем в более привычном значении "совокупность компьютеров и других сетевых устройств". Блоки адресов (сети) классифицированы по классам сетей, которые отличаются друг от друга особенностями маршрутизации.

    Разбиение всего множества адресов на блоки последовательных адресов (например, 212.133.5.0-212.133.5.255) обусловлено тем, что в каждой точке сети должно быть известно, в каком направлении следует отправить пакет, адресованный сетевому интерфейсу с неким адресом. Промежуточные маршрутизаторы, которые объединяют большие сети и являются своеобразными "вокзалами" для пакетов, следующих из одного региона планеты в другой, не должны хранить записи о местоположении каждого сетевого интерфейса и о маршруте следования к нему. Им достаточно знать, предположим, что пакет, следующий по адресу 212.133.5.13, следует отправлять туда же, куда и прочие пакеты из вышеуказанного диапазона адресов. Это же относится и к маршрутизаторам, объединяющим сеть среднего офиса с двумя-тремя диапазонами адресов, но всю тяжесть нагрузки легче представить на примере более загруженных систем.

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

    Чтобы облегчить маршрутизаторам работу по запоминанию диапазонов адресов, были придуманы маски сетей, определяющие, какую часть IP-адреса занимает номер сети, а какую – номер компьютераСтрого говоря, не номер компьютера, а номер сетевого интерфейса, поскольку IP-адрес назначается интерфейсу, а не компьютеру; далее мы для краткости будем употреблять термин "номер компьютера". Можем оправдать это тем, что у компьютера в сети может быть несколько номеров – это же не серийный номер двигателя... (прим. авт.). в этой сети. Фактически, номер компьютера нужен только тому маршрутизатору, к которому непосредственно подключена локальная сеть, где находится компьютер – адресат пакета. В отличие от номера компьютера, номер сети используется всеми промежуточными маршрутизаторами, которые передают пакет друг другу от места отправки до места назначения.

    Рассмотрим, как используется маска сети, на примере. Представим себе сеть, состоящую из трех сегментов. В каждом из них – по 40 компьютеров. Мы уже знаем, что для того, чтобы снабдить уникальными адресами каждый из них, нам понадобится 120 адресов, т.е. меньше, чем доступно в сети класса С. Стало быть, мы можем назначить для каждой подсети свой диапазон адресов, при этом достаточно использовать адреса только из одной сети класса С. Выберем три диапазона так, чтобы в каждом из них было не менее 40 доступных адресов: 192.168.0.0-192.168.0.63, 192.168.0.64-192.168.0.127 и 192.168.0.128-192.168.0.191. Адреса сетей в целом и широковещательные адреса включены в диапазоны.

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

    У нас есть совершенно неизменная часть адресов в нашей сети – 192.168.0. Эти три байта адреса одинаковы для всех компьютеров нашей сети. Видно, что адреса в разных диапазонах отличаются значением последнего байта. Отметим, что адреса первого диапазона в двух старших битах этого байта имеют нули (действительно, двоичное представление чисел до 63 включительно дает значения от 00000000 до 00111111, старшие два бита выделены жирным шрифтом). Во втором диапазоне в упомянутых битах содержится 01: значения от 64 до 127 представляются в двоичном виде числами от 01000000 до 01111111. Аналогично, третий диапазон дает нам двоичные числа от 10000000 до 10111111. Выделенные биты разнятся между диапазонами, но одинаковы в пределах диапазона. Значение этих двух битов (их может быть больше, это зависит от числа диапазонов – подсетей, на которые разбита сеть) принято называть номером подсети; первый диапазон называют нулевой подсетью, второй – первой подсетью и т.д., смотря по значению этих битов.

    Чтобы сообщить маршрутизатору, что к его первому сетевому адаптеру присоединена нулевая подсеть, ко второму – первая и к третьему – вторая, мы должны всего лишь указать маску сети на каждом из его сетевых интерфейсов. Так как мы уже договорились считать номером сети в IP-адресе значения тех битов, которые в маске имеют двоичное значение "1", то маска сети, разделенной на четыре подсети, будет иметь значение 255.255.255.192.

    Почему значение последнего байта маски – 192? Потому, что 11000000 двоичное дает именно десятичное 192. Почему мы делим сеть на четыре подсети, хотя речь шла о трех диапазонах? Дело в том, что сеть можно разделить только на такое количество подсетей, которое кратно степени двойки. Поэтому вместо трех подсетей приходится брать ближайшее большее их количество.

    Теперь остается назначить каждому интерфейсу маршрутизатора адреса из диапазона той подсети, которая присоединена к этому интерфейсу, и насладиться его четкой работой – по пересылке пакетов между интерфейсами.

    Классы сетей

    Самой крупной IP-сетью в мире является глобальная сеть Internet. Ее адресное пространство разделено на диапазоны адресов, которые называются "сетями". Сети разделены на классы. Адреса сетевых интерфейсов компьютеров в сети, как правило, относятся к классам A, B или С.

    Разделение сетей на классы определяется в RFC 950 и ряде других RFCRFC – Request For Comments – стандарты, используемые в сети Интернет. Текст стандартов можно бесплатно получить на сайте www.ripn.net.. Кроме сетей A, B, С есть и другие сети, представляющие собой меньшие по размеру блоки сетей, которые используются для различных служебных надобностей.

    Сети классов от A до С отличаются значением первого байта IP-адреса. Значение первого байта сети класса А находится в диапазоне от 1 до 126, класса B – от 128 до 191, класса C – от 192 до 223. Классы сетей, в адресах которых первый байт имеет значение от 224 до 254, именуются от D до F. Они имеют служебное назначение, и их адреса не используются обычными сетевыми интерфейсами.

    Предполагается, что в сетях класса A номер сети занимает первый байт, а остальные три – это номер компьютера (точнее, номер сетевого интерфейса). Таким образом, в сети класса А может быть до 16777214 интерфейсов. В сети класса В номер сети занимает два байта адреса, максимальное число интерфейсов в такой сети – 65534. В сети класса С номер сети занимает три байта, номер компьютера – один, максимальное число интерфейсов в такой сети – 254.

    Зарезервированные сетевые адреса

    Надо иметь в виду, что один компьютер может иметь несколько сетевых интерфейсов, а каждый интерфейс может иметь несколько адресов.

    Некоторые адреса в каждой сети являются зарезервированными и не могут использоваться для адресации какого-либо интерфейса.

    Так, IP-адрес, в котором поле номера компьютера заполнено двоичными нулями, используется в качестве номера данной сети в целом. Например, адрес 131.45.0.0 обозначает целую сеть класса B. IP-адрес, в котором поле номера компьютера заполнено двоичными единицами, является широковещательным адресом сети (broadcast address) и применяется для одновременной рассылки пакета всем компьютерам данной сети. Получив пакет с адресом получателя 131.45.255.255, каждый компьютер сети 131.45.0.0 (класс B) воспримет этот пакет как предназначенный ему. Эти зарезервированные адреса используются, например, в целях управления маршрутизацией.

    Существуют и другие зарезервированные адреса. Адрес 127.0.0.1 всегда указывает на локальный внутренний интерфейс системы. "127.0.0.1" обозначает для системы то же самое, что для человека – слово "я". Этот локальный внутрений интерфейс требуется для того, чтобы одна программа (клиент) могла обратиться к другой программе (серверу), работающей на том же компьютере, стандартным образом. Например, можно обратиться из броузера на вашем компьютере к веб-серверу на вашем же компьютере. Локальный интерфейс обычно называется lo или lo0 (от слова loopback – "петля").

    Адрес 0.0.0.0 используется для обозначения маршрута по умолчанию (основного шлюза), так как этот адрес означает "все сети".

    Основной шлюз

    Он зарезервирован для указания "всех остальных адресатов". Если пакет не удается соотнести с конкретной строкой таблицы маршрутизации, он отправляется в шлюз согласно указывающей на него строке таблицы маршрутизации. Например, таблица маршрутизации нашего хоста выглядит так:

    # netstat -rn
    Routing Table: IPv4
    Destination Gateway Flags Ref Use Interface
    192.168.5.0 192.168.5.33 U 1 2 elxl0
    224.0.0.0 192.168.5.33 U 1 0 elxl0
    default 192.168.5.1 UG 1 0
    127.0.0.1 127.0.0.1 UH 61 1013 lo0

    Адрес нашего компьютера в этой сети – 192.168.5.33. Предположим, нам надо отправить пакет по адресу 192.168.5.30. Для этого наша система посмотрит в таблицу маршрутизации и обнаружит там маршрут 192.168.5.0, для которого указан шлюз (gateway) 192.168.5.33 – наш собственный интерфейс. Стало быть, компьютер 192.168.5.30 находится в непосредственно присоединенной к нам сети и ему надо послать пакет напрямую.

    Ситуация изменится, если адресатом будет, скажем, компьютер 192.168.10.1. Тогда в таблице маршрутизации вначале не найдется подходящего маршрута – ведь там нет отдельной строки для сети 192.168.10.1, верно? Тогда пакет будет отправлен в основной шлюз, "шлюз по умолчанию", тот, что в выводе netstat обозначен словом default. Адрес назначения пакетов "во все остальные сети", тех самых, которые отправляются в шлюз, в таблице маршрутизации в ядре обозначается как 0.0.0.0.

    Пакеты, предназначенные для отправки "всем остальным", направляются в основной шлюз. Основной шлюз (default gateway) – это такое место, куда любой компьютер сети отправляет пакет, если не знает, в какую сторону его лучше отправить. Действие такого шлюза подобно действию почтальона. Если Вы хотите сделать сюрприз девушке, которая живет с вами в одном подъезде, вы можете положить нежное письмо ей прямо в почтовый ящик. Если же адресат живет в другом городе, вы положите конверт в другой почтовый ящик, тот, из которого почтальон вынимает почту для отправки. Основной шлюз имеет сетевой интерфейс, работающий таким "почтовым ящиком" для пакетов, которые адресованы из локальной сети вовне.

    Бесклассовая маршрутизация (CIDR)

    В конце 80-х – начале 90-х годов XX века сеть Интернет росла очень быстрыми темпами. В результате стали проявляться серьезные недостатки в организации распределения адресного пространства, так как эта процедура не была рассчитана на лавинообразный рост потребителей адресов. Проблемы сводились к следующему:

  • нехватка IP-адресов. Размеры существующих классов сетей перестали отражать требования средних организаций. Количество компьютеров в сети организации часто оказывалось больше, чем количество адресов в сети класса С, но сильно меньше, чем в сети класса В;
  • замедление обработки таблиц маршрутизации. Рост размеров таблиц маршрутизации в Internet-маршрутизаторах привел к тому, что их стало сложно администрировать, маршрутизаторы работали на пределе своих возможностей.
  • Чтобы разрешить эти проблемы, в июне 1992 года IETF (Internet Engineering Task Force) принял решение об использовании технологии бесклассовой междоменной маршрутизации (Classless Inter-Domain Routing – сокращенно CIDR). В 1994-1995 годах технология была внедрена Интернет-провайдерами для маршрутизации между их сетями. Термин "междоменная" относится к так называемым доменам маршрутизации, т.е. совокупностям сетей, объединенных общим администрированем и политикой маршрутизации. Домен маршрутизации обычно ограничен сетью крупного провайдера и его субпровайдеров.

    Технология CIDR (описывается в RFC 1519) успешно применяется в любой группе сетей Internet, построенных как на основе IPv4, так и на IPv6, и взаимодействует со старыми технологиями адресации. В основе CIDR лежит принцип использования маски сети переменной длины (VLSM —variable length subnet masks) и отказ от деления Internet на сети классов А, В и С. Тогда все организации, предоставляющие услуги Internet, будут разделяться не по классам своих сетей, а по маске предоставленного им адреса.

    Согласно идеологии CIDR, провайдеры должны объединять в одну запись информацию о блоках адресов своих клиентов и анонсировать в Интернет свой блок адресов в целом. Анонсирование представляет собой передачу пакетов по протоколу динамической маршрутизации для уведомления соседних маршрутизаторов о том, что такая-то сеть теперь стала доступна через данный маршрутизатор. До 1994 гогда анонсировалась информация о каждой из сетей каждого класса в отдельности.

    Например, провайдер Internet "Слон трафика", которому NIC делегировал адреса с 198.24.0.0 по 198.31.255.255 (маска 255.248.0.0), может назначить своему клиенту фирме "Моська АО" группу адресов с 198.24.8.0 до 198.24.11.255 (маска 255.255.252.0). Ясно, что сеть "Моськи" не принадлежит ни к какому классу и, тем не менее, может успешно работать в Internet. Очевидно, что новая структура адресного пространства позволит значительно сэкономить адреса для тех организаций, которым они действительно нужны, и взять лишние у других. Без использования CIDR еще один клиент "Слона трафика", магазин "Успешный повар", был бы вынужден использовать приватные адреса (192.168.0.0) или заказывать отдельную сеть класса С. Теперь "Успешный повар" может уживаться с "Моськой АО" в пределах одного домена маршрутизации, например, использовать адреса с 198.24.12.64 до 198.24.12.127 (маска 255.255.255.192).

    В настоящее время, если организации требуется получить несколько адресов для своих компьютеров для работы в Internet, она заказывает диапазон адресов в виде <адрес, маска>, исходя из своих потребностей. Если, к примеру, ей нужно подсоединить к Internet 998 компьютеров, не нужно заказывать четыре сети класса С или одну класса В, достаточно заказать адрес и маску, позволяющие работать такому количеству компьютеров, например, < 199.14.8.0, 255.255.252.0> – 1024 сетевых адреса.

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

    В настоящее время технология CIDR поддерживается некоторыми протоколами внутридоменной (OSPF, RIP-2,E-IGRP) и междоменной маршрутизации (BGP-4), а большинство поставщиков сетевого оборудования внесли поддержку CIDR в свое пограммное обеспечение.

    Настройка сетевых интерфейсов

    Приводимый здесь порядок настройки сетевого интерфейса одинаково подойдет для любой версии Solaris. Ниже, в разделе "новые методы настройки сетевых свойств" будет дано описание новых методов настройки сетевых интерфейсов и других связанных с сетью настроек. Эти методы доступны в Solaris Express и OpenSolaris, но по состоянию дел на июнь 2008 года написания книги не включены в Solaris 10.

    Для того, чтобы через сетевой интерфейс можно было принимать и передавать данные, системе следует сообщить его параметры, а именно IP-адрес и маску сети. Прежде того необходимо выполнить специфичную для Solaris команду для активации интерфейса

    ifconfig if_name plumb

    После этого надо назначить адрес и маску:

    ifconfig if_name IP-address broadcast broadcast-address netmask netmask

    Здесь if_name – это имя интерфейса (например, eri0 ), IP-address – адрес, который следует назначить этому интерфейсу, а необязательные параметры broadcast-address и netmask задают широковещательный адрес сети, к которой подключен интерфейс, и маску сети.

    Для включения интерфейса следует дать команду

    ifconfig if_name up

    Все эти команды можно объединить в одну, указав таким образом, что следует выполнить низкоуровневую инициализацию интерфейса, назначить ему адрес и маску, после чего включить (сделать возможным получение и отправку IP-пакетов через него):

    ifconfig if_name IP-address broadcast broadcast-address netmask
    netmask plumb up

    Как создать "ip alias" – несколько адресов на одном интерфейсе

    Для присвоения одному интерфейсу нескольких сетевых адресов в Solaris используются псевдонимы. В отличие от других UNIX'ов здесь не работает конструкция ifconfig alias. Следует пользоваться командами

    ifconfig if_name:0 IP-address netmask netmask up
    ifconfig if_name:1 IP-address netmask netmask up

    Надо помнить, что if_name:0 обозначает сам оригинальный интерфейс, т.е. Elxl0:0 – это то же самое, что elxl0. Кроме того, перед выполнением команд, назначающих адрес и другие параметры такому "виртуальному" интерфейсу, например, elxl0:1, следует создать этот виртуальный интерфейс командой

    ifconfig if_name:1 plumb

    Удаление такого интерфейса выполняется командой

    ifconfig if_name:1 down

    Например

    ifconfig le0:1 down

    В Solaris до версии 7 не требуется выполнять команду

    ifconfig if_name:1 plumb

    для создания интерфейса. Для удаления интерфейса также можно применить

    ifconfig if_name:1 unplumb

    Это означает удаление интерфейса и связанных с ним структур данных из памяти, в то время как

    ifconfig le0:1 down

    обеспечивает только отключение интерфейса и "забывание" его настроек.

    Для добавления постоянного виртуального (его иногда еще называют "логическим") интерфейса-псевдонима следует создать соответствующий файл /etc/hostname:

    echo IP-адрес-псевдоним >/etc/hostname.if_name:1

    Например,

    echo 194.125.5.6 >/etc/hostname.le0:1

    Для изменения параметров настройки сети можно использовать пограмму ndd. Она служит для изменения параметров некоторых драйверов в ядре. Обычно ndd применяется для назначения параметров драйверов сети. Например, команда

    ndd -set /dev/ip ip_forwarding 0

    позволяет отключить пересылку сетевых пакетов между интерфейсами системы.

    За более детальной информацией о ndd следует обратиться к руководству ndd(1M).

    Интерфейс-псевдоним может использоваться для организации "виртуальной маршрутизации", когда в одном физическом сегменте сети устанавливаются компьютеры с адресами из разных сетей, и пакеты друг другу они могут пересылать через систему, сетевой адаптер которой имеет два адреса из разных сетей:

    ifconfig -a
    lo0: flags=1000849<UP,LOOPBACK,RUNNING,MULTICAST,IPv4> mtu 8232 index 1
    inet 127.0.0.1 netmask ff000000
    elxl0: flags=1000843<UP,BROADCAST,RUNNING,MULTICAST,IPv4> mtu 1500 index 2
    inet 192.168.5.33 netmask ffffff00 broadcast 192.168.5.255
    ether 0:60:8:cb:3b:c0
    elxl0:2: flags=1000842<BROADCAST,RUNNING,MULTICAST,IPv4> mtu 1500 index 2
    inet 198.16.1.1 netmask ffffff00 broadcast 198.16.1.255

    Файлы настроек свойств сети в Solaris

    Параметры сети определяются в:

  • /etc/defaultdomain – полное имя домена (например, company.ru);
  • /etc/inet/hosts – таблица соответствия имен компьютеров и их адресов;
  • /etc/hostname.le0 – краткое имя интерфейса le0. Остальные интерфейсы описаны соответствующими файлами. Должно совпадать с тем, что указано для адреса этого интерфейса в /etc/inet/hosts:
    cat /etc/hostname.le0
    hamburger
    cat /etc/inet/hosts | grep hamburger
    192.243.78.11 hamburger.macro.su hamburger
  • /etc/hosts – символьная ссылка на /etc/inet/hosts ;
  • /etc/inet/nsswitch.conf – вместо host.conf в других UNIX'ах – указание порядка опроса name-сервера и файла hosts ;
  • cat /etc/inet/nsswitch.conf
  • hosts: files, DNS
  • /etc/bootptab – адреса принт-сервера и принтера;
  • /etc/resolv.conf – настройки DNS, включая адреса DNS-серверов;
  • /etc/inet/netmasks - в каждой строчке пара: адрес сети, маска сети
    cat /etc/netmasks
    163.239 255.255.255.0
  • /etc/defaultrouter – адрес шлюза ;
  • /etc/nodename – имя компьютера.
  • ВНИМАНИЕ! Файлы /etc/hostname. действительно называются hostname.название_интерфейса. НЕ НАДО подставлять в имя файла действительное имя компьютера, тем более, не следует подставлять вывод команды hostname. Например, на компьютере sunny.macro.ru файл hostname.le0 содержит внутри слово sunny, а _называется_ файл hostname.le0, что говорит о его содержимом: имя хоста, сопоставляемое интерфейсу le0.

    При обычной настройке подключенного к сети компьютера под управлением Solaris следует указать все те же параметры, что и при настройке любой системы, работающей с TCP/IP: адрес интерфейса, имя компьютера, имя домена, адрес DNS-сервера, адрес основного шлюза. Помните, что адрес DNS-сервера и основного шлюза должны быть указаны в виде IP-адресов, а не в виде доменных имен: при обращении к серверу имен система еще не обязана знать, какой IP-адрес какому компьютеру соответствует. Шлюз же следует указать в виде IP-адреса потому, что сервер имен может находиться вне локальной сети, и тогда запросы к нему будут направляться через шлюз.

    Для корректной работы системных вызовов, использующих resolver(3), т.е. тех, что обращаются к серверу имен с вопросом о соответствии IP-адреса имени или с требованием найти обратное соответствие, надо внести верную запись в файл /etc/resolv.conf. В этом файле допустимы команды:

    nameserver IP-адрес
    search домен
    domain домен

    Первая команда – nameserver – называет IP-адрес сервера имен; всего допустимо до трех таких команд. Вторая указывает, имена каких доменов надо подставлять к имени хоста, если его ввели без имени домена (т.е. для поиска хоста с именем типа sunny ), а команда domain определяет, в каком домене находится наш компьютер; это требуется для того, чтобы вначале попытаться найти компьютер с неполным именем (например, suuny ) в своем домене, а уже затем попытать счастья в других доменах, которые перечислены в директиве search. Вот пример файла /etc/resolv.conf:

    domain eu.spb.ru
    nameserver 192.168.5.18
    search eu.spb.ru

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

    Настройка маршрутизации

    Маршрутизацией называется передача пакетов между интерфейсами. Базовые функции маршрутизации в UNIX'e поддерживаются в ядре. Кроме этого, для поддержки протоколов динамической маршрутизации можно использовать специализированные программы маршрутизации, например, демон gated.

    Ядро хранит таблицу маршрутизации, которая формируется при загрузке системы. Посмотреть таблицу маршрутизации можно командой netstat –nr.

    Routing Table: IPv4
    Destination Gateway Flags Ref Use Interface
    ------------- --------------- ------- ------ ------ ---------
    192.168.5.0 192.168.5.33 U 1 4 elxl0
    224.0.0.0 192.168.5.33 U 1 0 elxl0
    default 192.168.5.1 UG 1 0
    127.0.0.1 127.0.0.1 UH 54 5063 lo0

    Флаги netstat

    Каждый маршрут отмечен своим флагом. Флаги в выводе netstat обозначают состояние и тип маршрута:

  • Uup – маршрут активен и действует;
  • Ggateway – маршрут лежит к шлюзу;
  • Hhost – маршрут к хосту (компьютеру), а не к сети;
  • Sstatic – маршрут добавлен статически (обычно – вручную);
  • Ddynamic – маршрут добавлен динамически, посредством протокола маршрутизации.
  • В случае, если в системе активировано несколько сетевых интерфейсов, маршрутизация пакетов между ними по умолчанию разрешена. Если надо отключить это свойство, т.е. запретить маршрутизацию пакетов между интерфейсами, следует создать файл /etc/notrouter. Его существование будет проверяться при запуске системы, и, если он существует, передача пакетов между интерфейсами будет выключена. Вы должны помнить, что Solaris обладает повышенной уязвимостью во время запуска, когда машина может перенаправлять пакеты независимо от /etc/notrouter. С другой стороны, это не очень серьезная уязвимость: серверы Solaris, равно и другие серверы приложений, не имеет смысл устанавливать вне корпоративной сети; вне такой сети вряд ли потребуется запрещать маршрутизацию средствами ОС.

    Для того, чтобы добавить или изменить маршрут пакетов к определенному адресату (компьютеру или сети), надо использовать команду route. Например, если следует отправлять пакеты в сеть 193.13.13.0/24 (как вы помните, такая запись означает сеть класса С) через интерфейс с адресом 192.168.5.18, то нужно дать команду route add:

    netstat -rn
    Routing Table: IPv4
    Destination Gateway Flags Ref Use Interface
    ------------- --------------- ------- ------ ------ ---------
    192.168.5.0 192.168.5.33 U 1 5 elxl0
    224.0.0.0 192.168.5.33 U 1 0 elxl0
    default 192.168.5.1 UG 1 0
    127.0.0.1 127.0.0.1 UH 54 5775 lo0
    bash-2.05#
    bash-2.05# route add net 193.13.13.0 192.168.5.18
    add net 193.13.13.0: gateway 192.168.5.18
    bash-2.05# netstat -rn
    Routing Table: IPv4
    Destination Gateway Flags Ref Use Interface
    ------------- --------------- ------- ------ ------ ---------
    193.13.13.0 192.168.5.18 UG 1 0
    192.168.5.0 192.168.5.33 U 1 5 elxl0
    224.0.0.0 192.168.5.33 U 1 0 elxl0
    default 192.168.5.1 UG 1 0
    127.0.0.1 127.0.0.1 UH 54 5905 lo0

    Синтаксис команды route:

    route [-dnqtv] команда [[модификаторы] аргументы]

    -n – сообщать IP-адреса, вместо имен компьютеров. Для вывода имени его еще нужно определить по адресу, это занимает время и окажется невозможным при сбое настроек или недоступности сервера имен;

    -v – сообщить дополнительные детали;

    -q – выполнять "молча", т.е не выдавая никаких сообщений.

    Команда route также способна выполнять следующие действия в зависимости от внутренних команд, переданных ей в качестве аргументов:

  • add – добавить маршрут;
  • change – изменить маршрут (например, шлюз для сети);
  • flush – удалить все маршруты;
  • delete – удалить один указанный маршрут;
  • get – найти и показать маршрут до определенного места назначения;
  • monitor – следить за маршрутом и сообщать об изменении информации в таблице.
  • Внутренняя команда monitor осмысленна для динамически обновляемых маршрутов:

    route [-n] monitor

    Обычно route вызывается для изменения или добавления маршрута, вот так:

    route [-n] команда [-net | -host] куда через_что [netmask]

    Для указания всех интерфейсов вообще используется ключевое слово default, синоним которого – это параметр -net 0.0.0.0.

    В большинстве случаев ручная модификация таблицы маршрутов не требуется, все строки в таблицу заносятся автоматически на основании стандартных настроек системы (адресов сетевых интерфейсов, адреса основного шлюза и масок сетей).

    Анализ таблиц arp

    Таблица маршрутизации показывает, через какие шлюзы и интерфейсы отправлять пакеты в те или иные IP-сети. В системах, работающих с протоколом IP, также всегда есть таблица соответствий IP-адресов MAC-адресам, т.е. внутренним адресам сетевых адаптеров. Эта таблица используется при пересылках пакетов в локальной сети; она называется таблицей протокола нахождения соответствий адресов (ARP – Address Resolution Protocol). Посмотреть таблицу вы можете с помощью команды arp (ключ -a нужен для показа всей таблицы):

    bash-2.05# arp -a
    Net to Media Table: IPv4
    Device IP Address Mask Flags Phys Addr
    ------ --------------------- --------------- ----- -----------------
    elxl0 hp5l 255.255.255.255 00:50:ba:03:b6:47
    elxl0 baclan.q.spb.ru 255.255.255.255 00:60:b0:3c:99:05
    elxl0 ip-119.q.spb.ru 255.255.255.255 00:10:5a:72:dd:9c
    elxl0 192.168.5.72 255.255.255.255 00:e0:29:9b:79:cd
    elxl0 lib.q.spb.ru 255.255.255.255 00:e0:29:9e:f3:3b
    elxl0 sunny 255.255.255.255 SP 00:60:08:cb:3b:c0
    elxl0 192.168.5.11 255.255.255.255 00:e0:29:44:66:08
    elxl0 mask.q.spb.ru 255.255.255.255 00:e0:29:48:63:64
    elxl0 192.168.1.29 255.255.255.255 00:e0:b0:5a:66:90
    elxl0 192.168.5.225 255.255.255.255 00:10:5a:73:6c:6b
    elxl0 192.168.5.208 255.255.255.255 00:e0:29:64:9e:e7
    elxl0 192.168.5.183 255.255.255.255 00:e0:29:61:29:42
    elxl0 192.168.5.158 255.255.255.255 00:e0:29:64:8f:b9
    elxl0 BASE-ADDRESS.MCAST.NET 240.0.0.0 SM 01:00:5e:00:00:00

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

    Протокол DHCP

    Протокол DHCP (dynamic host configuration protocol) используется для динамического назначения параметров настройки подсистемы IP в любых операционных системах. Этот протокол организован по принципу клиент-сервер: клиент запрашивает информацию, делая широковещательный запрос в сеть, а сервер сообщает ее клиенту в ответ. Серверы DHCP применяются для динамического назначения IP-адресов, а также для сообщения клиентам DHCP такой настроечной информации, как маска сети, адрес сервера имен и т.д. Обязательно назначается только адрес и маска, все остальное может быть назначено в зависимости от настроек сервера и клиента DHCP.

    Протокол динамической настройки параметров системы имеет смысл использовать в сетях, где мы имеем дело с большим количеством компьютеров. Если у вас всего три компьютера, проще дать им фиксированные IP-адреса, чем заниматься настройкой DHCP. Дело в том, что DHCP имеет неоспоримые плюсы и столь же неоспоримые минусы (см. таблицу 15.1).

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

    Что касается сложности учета событий, то учет можно вести и по MAC-адресам сетевых карт. Это требует работы с командой arp и знания, в каких компьютерах какие сетевые адаптеры (в смысле – с какими именно MAC-адресами) установлены. Думаете, это легко? Вспомните, когда вас последний раз интересовал MAC-адрес чьей-нибудь машины! Если в последнюю неделю хоть один из них попался вам на глаза, то вы – везунчик. Расскажите об этом подруге, она будет удивлена, что кому-то интересны эти дурацкие адреса.

    Основное внимание в настройке DHCP-сервера следует уделить диапазону адресов, из которого они будут назначаться клиентам DHCP (адресов должно хватить всем!), и доступности DHCP-сервера (этот компьютер не должен оказаться выключенным тогда, когда клиент хочет получить IP-адрес).

    Преимущества и недостатки DHCP
    + DHCP– DHCP
    Не надо настраивать каждый компьютер в отдельности, системы Windows по умолчанию настраиваются как клиенты DHCP; при установке систем UNIX указать, что они – клиенты DHCP, тоже очень просто Если сервер DHCP недоступен, многие из компьютеров сети вообще не смогут начать работу, и через определенное время, связанное с политикой назначения адресов, все компьютеры окажутся "отрезанными" от сети
    Все настройки делаются централизованно, при изменении одной настройки (например, адреса основного шлюза сети) нет нуждменять настройки на каждом компьютере Сбои DHCP труднее диагностировать, т.к. они проявляются в виде жалоб пользователей (причем неодновременных) на невозможность войти в сеть, а это может быть вызвано дюжинами причин
    Можно забыть о настройке параметров сети всех компьютеров, кроме DHCP-сервера, навсегда, о них позаботится сервер DHCP Использование DHCP усложняет учет событий в сети: ведь в файлы протоколов заносятся IP-адреса компьютеров. Там, где адреса компьютерам выдаются динамически, один и тот же адрес может принадлежать разным компьютерам в разное время
    Если подключение к сети физически доступно большому кругу лиц, то посторонний может подключиться к розетке в сети, и, даже не зная никаких настроек, сразу оказаться в общей сети

    Настройка DHCP-сервера

    DHCP-сервер, т.е. программа, которая принимает запросы от DHCP-клиентов и отвечает им, в Solaris носит название in.dhcpd. Для настройки параметров DHCP-сервера следует модифицировать таблицы dhcptab и dhcp_network. Первая определяет группы различных параметров (например, совокупность диапазона назначаемых адресов, адреса шлюза и сервера имен), вторая устанавливает соответствие между определенными клиентами DHCP и IP-адресами. Эту таблицу можно использовать для задания явно указанных адресов отдельным компьютерам в сети. Подробнее формат файлов таблиц описан в руководстве по dhcptab(4) и dhcp_network(4).

    В Solaris DHCP-сервер выполняет также функции BOOTP-сервера (если это требуется) или может быть настроен как BOOTP-посредник (BOOTP-relay). Например, при старте програмы dhcpmgr последняя спрашивает, желаем ли мы настроить BOOTP-relay или DHCP-сервер:

    Для комплексной настройки DHCP-сервера можно применять графическую программу dhcpmgr ( /usr/sadm/admin/bin/dhcpmgr ), которая предоставляет доступ ко всем необходимым параметрам DHCP-сервера и обладает функциональностью трех утилит управления DHCP-сервером: dhcpconfig, dhtadm и pntadm:

    (рис 3.a)

    Настройка DHCP-клиента

    Для того, чтобы система полагала некий сетевой интерфейс динамически настраиваемым через DHCP, достаточно команды

    ifconfig имя_интерфейса dhcp start

    После этого программа ifconfig автоматически вызовет демона dhcpagent, который занимается отправкой DHCP-запросов и настройкой интерфейса в соответствии с полученным ответом. Посмотреть параметры, полученные через dhcp, можно командой

    ifconfig имя_интерфейса dhcp status

    При настройке DHCP-клиента надо помнить, что параметры настройки выделяются на определенное время, и по истечении этого времени будут автоматически запрошены у сервера заново.

    При работающей службе NWAM администратору или пользователю Solaris, начиная с версии 10, не следует беспокоиться о настройке интерфейса по протоколу DHCP – служба NWAM сделает это сама.

    Трансляция адресов и фильтрация пакетов

    "Трансляция" или "подстановка" адресов (NAT – network address translation) широко распространена в таких системах UNIX, как Linux и FreeBSD. В Solaris до версии 9 включительно не было поставляемого в комплекте с системой пакета, который позволял бы выполнять трансляцию адресов.

    Начиная с Solaris 10 в состав системы включен мощный пакет ipfilter, который может выполнять роль фильтра пакетов ("брандмауэра") и транслятора адресов. Программы этого типа называют как брандмауэрами (brandmauer), так и "файрволами" (firewall).

    Особенностью ipfilter является то, что, в отличие от других популярных программ фильтрации пакетов, она выполняет проверку пакета на соответствие ВСЕМ правилам таблицы фильтрации, поэтому, если в таблице правил за более строгими идут менее строгие правила, к пакету будут применены менее строгие. Например, если запрещен входящий трафик с адреса 192.168.8.7, но разрешен входящий трафик из сети 192.168.8/25, то фактически пакеты с адреса 192.168.8.7 будут проходить сквозь фильтр. Подробнее о правилах фильтрации следует узнать из руководства по соответствующим пакетам.

    Пакет ipfilter в Solaris основан на открытом продукте IPFilter. Продукт доступен не только для Solaris, страница IPFilter в сети – http://coombs.anu.edu.au/~avalon/ip-filter.html.

    Для тех, кто использует старые версии Solaris, Sun Microsystems бесплатно предлагает пакет SunScreen с функциональностью фильтра пакетов, он доступен по адресу http://wwws.sun.com/software/securenet/lite/download.html.

    Функции ipfilter

    Фильтр пакетов может использоваться для решения трех задач:

  • фильтрации пакетов;
  • протоколирования пакетов и учета трафика;
  • трансляции адресов.
  • Схема фильтрации пакета показана на рис. 3.2. Рисунок взят из документации по Solaris по адресу http://docs.sun.com/app/docs/doc/816-4554/6maoq0247?a=view.

    Пакет, принятый сетевым интерфейсом, вначале передается во входной фильтр. Там его ждет проверка и возможные изменения, если он попадает под действие правил, описанных в настройках фильтра. Пакет во входном фильтре проходит следующие этапы:

  • трансляция адреса (network address translation – если требуется изменить адрес источника пакета, это делается здесь);
  • протоколирование пакета (ip accounting);
  • проверка кэша фрагментов (fragment cache check) – если следующий пакет в потоке данных является фрагментом, и предыдущий пакет был разрешен к передаче фильтром, то фрагмент пакета также пропускается, минуя статическую таблицу и проверку правил фильтрации;
  • проверка состояния пакета (Packet State Check) – если ключевая фраза keep state включена в правило, все пакеты в указанной сессии пропускаются фильтром или блокируются, в зависимости от того, чего требует правило – разрешения передачи или блокировки;
  • проверка фильтром (Firewall Check) – входные и выходные правила могут быть настроены по отдельности, определяя, разрешено ли пакету войти в фильтр, быть переданным подпрограммам ядра Solaris для обработки в стеке TCP/IP или быть переданным системой в сеть.
  • Группы(Groups) – позволяют определить правила иерархически.

    Функции(Function) – функция представляет собой действие, которое следует произвести с пакетом. Возможные варианты действий: block (блокировать), pass (разрешить передачу), literal, and send ICMP response (блокировать и послать отправителю сообщение о недоставке).

    Короткая маршрутизация (Fast-route) – fast-route указывает фильтру пакетов, что не следует передавать пакет для обработки в стек IP, это вызовет уменьшение параметра TTL в пакете.

    Аутентификация IP(IP Authentication) – пакет, прошедший аутентификацию, допускается к проверке правилами фильтра только единожды, чтобы избежать двойной обработки.

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

    (рис 3.2) Схема фильтрации пакетов фильтром ipfilter

    Настройки ipfilter

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

    В этом каталоге служба фильтра пакетов ожидает увидеть следующие файлы настроек:

  • ipf.conf – общие настройки фильтра
  • ippools.conf – настройки групп адресов
  • ipnat.conf – настройки NAT
  • Чтобы разрешить запуск фильтра пакетов при старте системы, после настройки файлов его конфигурации следует дать команду

    svcadm enable svc:/network/ipfilter

    В Solaris версий Solaris 10 3/05 release, Solaris 10 1/06 release, Solaris 10 6/06 release, и Solaris 10 11/06 release для работы с ipfilter помимо службы ipfilter использовался дополнительный компонент – служба pfil, которую надо было отдельно настраивать и запускать с помощью smf. Начиная с Solaris 10 07/08 этого не требуется, этот компонент был заменен постоянно действующим другим компонентом.

    Простые настройки ipf.conf

    Примером простой настройки фильтра пакетов является следующий файл ipf.conf:

    # pass and log everything by default
    pass in log on elxl0 all
    pass out log on elxl0 all
    # block, but don't log, incoming packets from other reserved addresses
    block in quick on elxl0 from 10.0.0.0/8 to any
    block in quick on elxl0 from 172.16.0.0/12 to any
    # block and log untrusted internal IPs. 0/32 is notation that replaces
    # address of the machine running Solaris IP Filter.
    block in log quick from 192.168.1.15 to <thishost>
    block in log quick from 192.168.1.43 to <thishost>
    # block and log X11 (port 6000) and remote procedure call
    # and portmapper (port 111) attempts
    block in log quick on elxl0 proto tcp from any to elxl0/32 port =
    6000 keep state
    block in log quick on elxl0 proto tcp/udp from any to elxl0/32 port =
    111 keep state

    В этом примере использовался интерфейс elxl0. Подставьте вместо elxl0 фактический интерфейс своего компьютера при настройке фильтра пакетов. Обратите внимание, что каждый пакет проверяется на соответствие всем правилам фильтра, в отличие от фильтров ipfw в FreeBSD и iptables в Linux, где проверка делается в порядке нумерации правил до первого совпадения.

    Настройки NAT

    Для настройки NAT следует использовать команду ipnat или записать требуемые настройки в файл /etc/ipf/ipnat.conf:

    map elxl0 192.168.1.0/24 -> 10.1.0.0/16

    В этой команде указывается внешний интерфейс маршрутизатора, т.е. данный пример приведен для случая, когда интерфейс elxl0 смотрит в сторону провайдера, а внутрь локальной сети смотрит какой-то другой интерфейс (например, elxl1).

    Настройки пулов адресов

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

    Описане пулов адресов, которое загружается при старте системы, находится в /etc/ipf/ippool.conf. Для управления пулами адресов "на лету", т.е. во время работы системы, следует использовать команду ippool.

    Описание пула адресов выполняется в соответствии со следующим синтаксисом:

    table role = role-name type = storage-format number = reference-number

    Здесь table определяет начало описания пула, role указывает роль пула для фильтра (пока что определена всего одна роль – ipf ), type сообщает формат хранения описания этого пула, number дает номер, по которому в правиле фильтрации можно указать данный пул.

    Например, для того, чтобы включить в пул номер 13 группу из двух адресов 10.1.1.1 и 10.1.1.2, а также сеть 192.168.1.0, необходимо в файле ippool.conf сделать следующую запись:

    table role = ipf type = tree number = 13
    { 10.1.1.1/32, 10.1.1.2/32, 192.168.1.0/24 };

    После этого на определенный в ippool.conf пул можно будет ссылаться в правилах фильтрации, например, так:

    pass in from pool/13 to 192.168.1.0/24

    Информация о пулах загружается до списка правил, и внесение нового пула в ippool.conf не дает возможности использовать ссылку на него используйте команду ipfstat -io для получения информации о действующих правилах:

    ipfstat -io
    empty list for ipfilter(out)
    empty list for ipfilter(in)

    Для более подробной информации о пулах адресов в настройке ipfilter, смотрите руководство по ippool(4).

    Новые методы настройки сетевых свойств

    inetmenu

    В "классическом" методе настройки адресов в Solaris (том самом, который устанавливается при запрете запуска службы svc:/network/physical:nwam и разрешении запуска службы svc:/network/physical:default ) настройка интерфейса с помощью протокола DHCP ( ifconfig <интерфейс> dhcp ) динамически работает только с IP-адресом, не позволяя столь же динамически настроить NIS, DNS или другие службы имен.

    Однако для Solaris есть простой инструмент, который помогает решить и эту задачу. Он является переходной ступенью от "классической" схемы к NWAM. Этот инструмент – программа inetmenu, которую можно скачать по адресу http://www.opensolaris.org/os/community/laptop/inetmenu/

    После установки inetmenu нужно удалить из системы файлы /etc/ hostname.*, и /etc/resolv.conf, поскольку они будут создаваться программой inetmenu при активации соответствующего сетевого подключения.

    Программа inetmenu поддерживает статическое задание IP-адреса, маршрутизации и сервисов имен, динамическое получение по DHCP и настройку IP-адреса, маршрутизации и сервисов имен, а также работу с беспроводной сетью. Разумеется, программа не заменяет собой драйверы устройств, поэтому все сетевые адаптеры, включая беспроводные, должны быть настроены до запуска этой программы. При работе с inetmenu служба svc:/network/physical:nwam должна быть запрещена к запуску, а служба svc:/network/physical:default – разрешена, так как inetmenu просто создает корректные файлы /etc/resolv.conf и динамически настраивает интерфейсы, управляя ими через ifconfig.

    Программа inetmenu поддерживает настройку проводных и беспроводных (wi-fi) интерфейсов. Все новые выпуски Solaris поддерживают работу с wi-fi с шифрацией по протоколам WEP и WPA.

    Так как настройки в различных местах, куда вы можете прийти со своим лаптопом, могут не только отличаться, но и требовать ручной "доделки" (указание специфичных адресов DNS-серверов и других, в зависимости от настроек DHCP-сервера и других компонентов сети), в inetmenu есть возможность настройки "профилей", т.е. наборов сетевых настроек для различных мест пребывания. Каждый профиль можно назвать соответственно тому, для какого места он предназначен: office, home и т.д. Инструкцию по тонкой настройке inetmenu и созданию профилей для различных можно прочесть в каталоге /etc/inetmenu после установки программы.

    NWAM

    Служба NWAM (NetWork Auto Magic) выполняет автоматическую настройку сетевых интерфейсов. Она хорошо приспособлена для работы на компьютерах, у которых в каждый момент времени требуется иметь всего один активный сетевой интерфейс. Если ваша задача – настройка маршрутизатора, службой NWAM пользоваться будет не так удобно, хотя, возможно, в будущем эта служба будет интегрирована со службой поддержки динамической маршрутизации.

    NWAM более всего полезна на лаптопах, хотя может использоваться и для рабочих станций в локальной сети.

    NWAM обычно не требует вмешательства со стороны системного администратора и тем более пользователя. Назначение адресов и автоматическое уничтожение настроек по завершении сетевого подключения выполняет демон nwamd, который управляется как служба svc:/network/physical:nwam.

    Если требуется выполнить какие-либо действия до настройки сетевого интерфейса демоном nwamd, или после этой настройки – это можно сделать, создав запускаемые скрипты в подкаталогах каталога /etc/nwam/ulp/, как объяснено в руководстве по nwamd(1M). Основные настройки службы NWAM хранятся в файлах, расположенных в каталоге /etc/nwam.

    NWAM обычно не требует ручной настройки и поддерживает как проводные, так и беспроводные соединения. В некоторых случаях при вводе и последующем кэшировании некорректных паролей для подключения к беспроводным сетям с WEP- или WPA-шифрованием, может понадобиться удалить вручную файл /etc/nwam/known_wifi_nets и применить программу dladm(1M) для удаления запомненного ключа.

    Вернуться к учебному плану