учебники, программирование, основы, введение в,

 

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

Обзор протокола TCP/IP
Мы предполагаем, что читатель знает, что такое семиуровневая модель межсетевого взаимодействия ISO/OSI, или хотя бы представляет себе, что такое протокол сетевого и транспортного уровня. Однако, чтобы освежить это в памяти, мы рассмотрим, какое отношение к TCP/IP имеют эти понятия.
Модель межсетевого взаимодействия описывает семь уровней абстракции, которым соответствуют реальные сетевые протоколы передачи и обработки данных. Чтобы эти уровни обрели для нас смысл, рассмотрим вначале, как одни программы передают другим данные по сети. Допустим, что приложение А хочет получить данные от приложения В. Для этого приложение А оформляет свой запрос к приложению В в соответствии с некими правилами, которые хорошо известны обоим приложениям. Так, например, происходит при просмотре web-страниц. Браузер пользователя посылает запрос web-серверу и ожидает от него ответ. Для посылки запроса приложение А должно не только оформить этот запрос в соответствии с правилами, известными приложению В, но и потребовать от своей системы передачи данного запроса. Для этого должен быть установлен сеанс связи, в котором произойдет передача пакета с запросом, получение подтверждения об успешном прохождении пакета, и затем сеанс связи может быть завершен. Отметим, что пакет может передаваться через сети различной природы, например, браузер пользователя, подключенного к Интернету по технологии ADSL в Москве, может обратиться к web-серверу Yahoo, подключенному к Интернету через канал АТМ.
На самом деле все еще сложнее, поскольку запрос и ответ на него будут передаваться, скорее всего, не одним пакетом, а несколькими, и по ходу дела надо будет выбрать наилучший маршрут между системами, в которых запущены приложения А и В и т.д.
Чтобы разработчик программ, системный администратор и пользователь не мучались, пытаясь реализовать этот сложный алгоритм самостоятельно, каждая система имеет так называемый стек протоколов, представляющий собой набор программных модулей, которые умеют общаться друг с другом, передавать данные друг другу в ожидаемом формате . Именно этот стек протоколов и является реальным воплощением идеальной модели межсетевого взаимодействия.
Уровень приложения этой модели описывает правила передачи данных от приложения к приложению. В случае браузера и web-сервера этому уровню соответствует протокол 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В, 0В), допустимое сопротивление провода и т.п.
Протоколы TCP и IP постоянно используются вместе, в связке друг с другом. Поэтому все семейство протоколов, которые базируются на их совместном использовании, часто называют семейством протоколов TCP/IP , а саму связку - протоколом TCP/IP . Действительно, хотя протоколы TCP и IP - это два разных протокола, фактически ТСР не используется ни с каким иным протоколом, кроме IP.
Приложение, которое работает с сетью, может реализовывать один или несколько протоколов, каждый из которых относится к своему уровню представленной модели. Например, программа ftp самостоятельно реализует протоколы, относящиеся к трем уровням: сессионному, представления и приложения.
При передаче через сеть данные претерпевают изменения, которых требуют протоколы всех перечисленных уровней.
Протокол или группа протоколов реализуются подпрограммами операционной системы или самим сетевым приложением. При передаче данных между подпрограммами, от высокоуровневых подпрограмм (уровень приложения) к низкоуровневым (например, реализующим протокол канального уровня), данные разделяются на пакеты и снабжаются служебными заголовками, специфичными для каждого протокола. Когда данные доберутся до места назначения, они пройдут обратный путь снизу вверх по стеку протоколов. Вначале драйверы и подпрограммы операционной системы соберут разрозненные пакеты данных, удалят из них служебные заголовки, затем данными займутся подпрограммы приложения-получателя.

Адреса и маски
Существует два варианта протокола IP- IPv4 и IPv6, отличающихся разрядностью сетевых адресов и возможностью назначения гибкого приоритета пакета. В одной и той же сети оба протокола могут сосуществовать, но пока таких сетей, где поддерживался бы протокол IPv6, достаточно мало. Более того, сети, с поддержкой и администрированием которых нам придется столкнуться, скорее всего, созданы не сегодня и, следовательно, построены на основе "старого" варианта IP - IPv4. В существующей литературе, если надо подчеркнуть, что речь идет об IPv6, указывают, что это именно этот вариант IP, а если пишут об IPv4, употребляют термин "IP".
Здесь и далее в этой книге речь пойдет об IPv4, но многие из изложенных принципов будут справедливы и тогда, когда все перейдут на IPv6.
Мы будем называть сетевым интерфейсом физическое или виртуальное (т.е. подразумеваемое или программно эмулируемое) устройство, которое способно выполнять функции приема пакетов данных от других подобных устройств и передачи им пакетов данных. Характерным примером сетевого интерфейса являются сетевые адаптеры (сетевые карты) и модемы.
Каждый сетевой интерфейс, осуществляющий прием и передачу пакетов по протоколу IP, должен иметь уникальный сетевой адрес. Под уникальным здесь понимается такой адрес, который в пределах данной IP-сети не принадлежит ни одному другому сетевому интерфейсу. Один интерфейс может иметь несколько IP-адресов, но один и тот же IP-адрес не может принадлежать разным сетевым интерфейсам.
В протоколе IP определено, что IP-адрес состоит из четырех байт и записывается в виде четырех десятичных чисел, отделенных друг от друга точками. Каждое число соответствует значению одного из этих байтов. IP-адреса объединены в блоки, которые называются сетями. В этом значении слово "сеть" употребляется реже, чем в более привычном значении "совокупность компьютеров и других сетевых устройств". Блоки адресов (сети) классифицированы по классам сетей, которые отличаются друг от друга особенностями маршрутизации.
Разбиение всего множества адресов на блоки последовательных адресов (например, 212.133.5.0-212.133.5.255) обусловлено тем, что в каждой точке сети должно быть известно, в каком направлении следует отправить пакет, адресованный сетевому интерфейсу с неким адресом. Промежуточные маршрутизаторы, которые объединяют большие сети и являются своеобразными "вокзалами" для пакетов, следующих из одного региона планеты в другой, не должны хранить записи о местоположении каждого сетевого интерфейса и маршруте следования к нему. Им достаточно знать, предположим, что пакет, следующий по адресу 212.133.5.13, следует отправлять туда же, куда и прочие пакеты из вышеуказанного диапазона адресов. Это же относится и к маршрутизаторам, объединяющим сеть среднего офиса с двумя-тремя диапазонами адресов, но всю тяжесть нагрузки легче представить на примере более загруженных систем.
Мы можем уподобить пакет транзитной посылке, которая следует из одного города в другой на разных поездах с несколькими "пересадками". На каждом из промежуточных вокзалов работники почты знают, в какую сторону следует отправить посылку, когда она проходит мимо них, но их совершенно не заботит, куда ее отправят на следующем вокзале: там об этом позаботятся сотрудники следующего почтового отделения.
Чтобы облегчить маршрутизаторам работу по запоминанию диапазонов адресов, были придуманы маски сетей, определяющие, какую часть 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 и ряде других RFC. Кроме сетей 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", обозначает для системы то же самое, что для человека - слово "я". Этот локальный внутренний интерфейс требуется для того, чтобы одна программа (клиент) могла обратиться к другой программе (серверу), работающей на том же компьютере, стандартным образом. Например, можно обратиться из браузера на вашем компьютере к web-серверу на вашем же компьютере. Локальный интерфейс обычно называется lo или lo0 (от слова loopback - петля).
Адрес 0.0.0.0 используется для обозначения всех интерфейсов в сети вообще.
Основной шлюз
Адрес 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) успешно применяется в любой группе сетей Интернет, построенных как на основе IPv4, так и на IPv6, и может взаимодействовать со старыми технологиями адресации. В основе CIDR лежит принцип использования маски сети переменной длины (VLSM -variable length subnet masks) и отказ от деления сети Интернет на сети классов А, В и С. При этом все организации, предоставляющие услуги Internet, будут разделяться не по классам своих сетей, а по маске предоставленного им адреса.
Согласно идеологии CIDR, провайдеры должны объединять в одну запись информацию о блоках адресов своих клиентов и анонсировать в Интернете свой блок адресов в целом. Анонсирование представляет собой передачу пакетов по протоколу динамической маршрутизации для уведомления соседних маршрутизаторов о том, что такая-то сеть теперь стала доступна через данный маршрутизатор. До 1994 года анонсировалась информация о каждой из сетей каждого класса в отдельности.
Например, провайдер Internet "Слон трафика", которому ICANNделегировал адреса с 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) или заказывать отдельную сеть класса C. Теперь же "Успешный повар" может уживаться с "Моськой АО" в пределах одного домена маршрутизации, например, использовать адреса с 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 в свое программное обеспечение.

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

Для того чтобы через сетевой интерфейс можно было принимать и передавать данные, системе следует сообщить его параметры, а именно 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,MU<ICAST,IPv4> mtu 
      8232 index 1
   inet 127.0.0.1 netmask ff000000 
elxl0: flags=1000843<UP,BROADCAST,RUNNING,MU<ICAST,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,MU<ICAST,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 определяет, в каком домене находится наш компьютер; это требуется для того, чтобы вначале попытаться найти компьютер с неполным именем (например, sunny) в своем домене, а уже затем попытать счастья в других доменах, которые перечислены в директиве search. Вот пример файла /etc/resolv.conf:

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

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

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

Маршрутизацией называется передача пакетов между интерфейсами. Базовые функции маршрутизации в UNIX поддерживаются в ядре. Кроме того, для поддержки протоколов динамической маршрутизации можно использовать специализированные программы маршрутизации, например, демон 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 обозначают состояние и тип маршрута:

  • U - up - маршрут активен и действует;
  • G - gateway - маршрут лежит к шлюзу;
  • H - host - маршрут к хосту (компьютеру), а не к сети;
  • S - static - маршрут добавлен статически (обычно - вручную);
  • D - dynamic - маршрут добавлен динамически, посредством протокола маршрутизации.

В случае, если в системе активировано несколько сетевых интерфейсов, маршрутизация пакетов между ними по умолчанию разрешена. Если надо отключить это свойство, т.е. запретить маршрутизацию пакетов между интерфейсами, следует создать файл /etc/notrouter. Его существование будет проверяться при запуске системы, и если он существует, передача пакетов между интерфейсами будет выключена. Вы должны помнить, что Solaris обладает повышенной уязвимостью во время запуска, когда машина может перенаправлять пакеты независимо от /etc/notrouter. С другой стороны, это не очень серезная уязвимость: серверы Solaris, равно как и другие серверы приложений, не имеет смысл устанавливать вне корпоративной сети; вне такой сети вряд ли потребуется запрещать маршрут изацию средствами ОС.
Для того чтобы добавить или изменить маршрут пакетов к определенному адресату (компьютеру или сети), надо использовать команду route. Например, если требуется отправлять пакеты в сеть 193.13.13.0/24 (как вы помните, такая запись означает сеть класса C) через интерфейс с адресом 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
route add net 193.13.13.0 192.168.5.18
add net 193.13.13.0: gateway 192.168.5.18
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 нужен для показа всей таблицы):
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 имеет неоспоримые плюсы и столь же неоспоримые минусы:


Таблица 13.1. Недостатки и преимущества DHCP

+DHCP

-DHCP

Не надо настраивать каждый компьютер в отдельности, системы Windows по умолчанию настраиваются как клиенты DHCP, при установке систем UNIX указать, что они - клиенты DHCP тоже очень просто

Если сервер DHCP не доступен, многие из компьютеров сети вообще не смогут начать работу, и через определенное время, связанное с политикой назначения адресов, вес компьютеры окажутся "отрезанными" от сети

Все настройки делаются централизованно, при изменении одной настройки (например, адреса основного шлюза сети), нет нужды менять настройки на каждом компьютере

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

Можно забыть о настройке параметров сети всех компьютеров, кроме DHCP-сервера, навсегда о них позаботиться сервер DHCP

Использование DHCP усложняет учет событий в сети: ведь в файлы протоколов заносятся IP-адреса компьютеров. Там, где адреса компьютерам выдаются динамически, один и тот же адрес может принадлежать разным компьютерам в разное время

Зная это, мы можем решать, будем ли мы экономить свое рабочее время (ставим DHCP) или же будем бояться сбоев и руками настраивать компьютеры. Конечно, мелкая сеть (несколько компьютеров) легко проживет и без DHCP, но как только количество компьютеров превысит семь штук, возникнет явная необходимость в динамической настройке.
Что касается сложности учета событий, то учет можно вести и по MAC-адресам сетевых карт. Это требует работы с командой arp и знания, в каких компьютерах какие сетевые адаптеры (в смысле - с какими именно MAC-адресами) установлены. Думаете, это легко? Вспомните, когда вас последний раз интересовал MAC-адрес чьей-нибудь машины? Если в последнюю неделю хоть один из них попался вам на глаза, то вы - везунчик. Расскажите об этом подруге, она будет удивлена, что кому-то интересны эти дурацкие адреса.
Основное внимание в настройке 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:
Настройка DHCP-клиента
Для того чтобы система полагала некий сетевой интерфейс динамически настраиваемым через DHCP, достаточно команды
ifconfig имя_интерфейса dhcp start
После этого программа ifconfig автоматически вызовет демона dhcpagent, который занимается отправкой DHCP-запросов и настройкой интерфейса в соответствии с полученным ответом. Посмотреть параметры, полученные через dhcp, можно с помощью команды
ifconfig имя_интерфейса dhcp status
При настройке DHCP-клиента надо помнить, что параметры настройки выделяются на определенное время и по истечении этого времени будут автоматически запрошены у сервера заново.
Трансляция адресов и фильтрация пакетов
"Трансляция", или "подстановка" адресов (NAT - network address translation) широко распространена в таких системах UNIX, как Linux и FreeBSD. В Solaris нет поставляемого в комплекте с системой пакета, который позволял бы выполнять трансляцию адресов. Так как эта функция может понадобиться в сети, в том числе и там, где устанавливать FreeBSD или Linux нецелесообразно, существуют по крайней мере два пакета - совершенно бесплатный и бесплатный на определенных условиях - которые обладают функциональностью NAT. Это пакет IPFilter (бесплатен и доступен для многих систем UNIX) и пакет SunScreen от Sun Microsystems для Solaris. Оба дают возможность как подставлять "честные" адреса при передаче пакетов в Интернет из сетей с "приватными" IP-адресами, так и выполнять "фильтрацию" пакетов, т.е. разрешать только определенные виды соединений, с учетом адресов и портов отправителя и получателя пакетов, используемых протоколов и т.п. Первый управляется из командной строки, второй - с помощью графического интерфейса.
IPFiter и SunScreen являются полноценными фильтрами пакетов. Программы этого типа также называют брандмауэрами (brandmauer) или файрволами (firewall).
Особенностью IPFilter является то, что, в отличие от других популярных программ фильтрации пакетов, она выполняет проверку пакета на соответствие ВСЕМ правилам таблицы фильтрации, поэтому, если в таблице правил за более строгими идут менее строгие правила, к пакету будут применены менее строгие. Например, если запрещен входящий трафик с адреса 192.168.8.7, но, кроме того, разрешен входящий трафик из сети 192.168.8/25, то фактически пакеты с адреса 192.168.8.7 будут проходить сквозь фильтр. Подробнее о правилах фильтрации можно узнать из руководства по соответствующим пакетам.
Программа IPFilter доступна по адресу http://cheops.anu.edu.au/~avalon/ip-filter.html (текущая версия 4.1.12), а SunScreen - http://wwws.sun.com/software/securenet/lite/download.html.

 

 
На главную | Содержание | < Назад....Вперёд >
С вопросами и предложениями можно обращаться по nicivas@bk.ru. 2013 г.Яндекс.Метрика