Сетевое конфигурирование Solaris
Категория: Сети TCP/IP | Автор: admin | 4-03-2010, 23:14 | Просмотров: 14164

Операционная система Solaris поставляется с обширным набором стартовых сценариев. На недавней компьютерной выставке мы наткнулись на отрывной календарь, на каждом листике которого были записаны несложные вопросы для системных администраторов. Вопрос от 1-го января был таким: перечислите все файлы, которые нужно отредактировать для изменения сетевого имени и IP-адреса компьютера, работающего под управлением Solaris, и компьютера, работающего под управлением SunOS. В ответе для Solaris было указано 6 файлов. Это следствие модульного подхода в своем крайнем проявлении.

 

Базовое конфигурирование

 

В Solaris часть файлов сетевой конфигурации спрятана в каталоге /etc, а часть — в каталоге /etc/met. Многие из них дублируются благодаря всевозможным символическим ссылкам, причем сами файлы находятся в каталоге /etc/inet, а ссылки — в каталоге /etc.

Сетевое имя компьютера должно быть помещено в файл /etc/nodename. Изменение вступит в силу после перезагрузки компьютера.  В одних организациях компьютерам присваиваются простые имена, а в других – полные доменные имена. Если в файле nodename задано полное доменное; имя, могут возникнуть проблемы с базой данных NIS+.

 

На основании имени файла /etc/defaultdomain можно сделать вывод, что он предназначен для задания домена DNS. На самом же деле он содержит доменное имя NIS или NIS+. DNS-домен определяется в файле /etc/resolv.conf.

В Solaris на основании файла /etc/nsswitch.conf система узнает, в каком порядке просматривать файл /etc/hosts, базы данных NIS, NIS+ и DNS при поиске имени компьютера. Мы рекомендуем сначала проверять файл hosts а затем базу данных DNS, чтобы упростить загрузку, но это противоречит рекомендациям разработчиков самой системы. Строка в файле nsswitch.conf может выглядеть так:

hosts:        files     dns


В Solaris IP-адреса всех сетевых интерфейсов задаются в файлах /etc/hostname.интерфейс, где интерфейс — обычное имя интерфейса (lе0, smc0, hme0 и т.п.). В этих файлах содержится либо сетевое имя компьютера (в старых версиях Solaris), приведенное в файле hosts, либо IP-адрес (в новых версиях). Значение, находящееся в файле, передается в качестве параметра адрес команде ifconfig, поэтому лучше указывать IP-адреса, несмотря на имя самого файла. В файл могут также включаться специальные опции команды ifconfig, но это делается редко. Если для интерфейса нет соответствующего файла hostname, стартовые сценарии пытаются выявить его адрес с помощью протокола DHCP или RARP.

В стартовых сценариях поставочного варианта Solaris используются опции netmask+ и broadcast+ команды ifconfig. Знак + означает, что маска подсети извлекается из файла /etc/netmasks и на ее основании определяется широковещательный адрес. Файл /etc/netmasks содержит список сетевых адресов и соответствующих им масок подсетей. В этом файле должны быть перечислены все сети, в которых подсети формируются не так, как того требует класс сети (А, В или С). Вот пример файла netmask:

# База масок подсетей для факультета вычислительной техники

# Сеть           Маска

# =====          =======

#

128.138.0.0      255.255.255.192  # по умолчанию для факультета

#

128.138.192.64   255.255.255.192  # drag

128.138.192.192  255.255.255.192  # csops

128.138.193.0    255.255.255.224  # bcrg

128.138.193.32   255.255.255.224  # database

128.138.198.0    255.255.255.192  # slip

 

В первой строке задается стандартная маска /26 для адреса 128.138.0.0 класса В. Затем определяются различные вспомогательные маски. В файле перечислены все сети, даже те, к которым применяется стандартная маска. В системах, из которых был взят этот пример, файл netmasks ведется на центральном узле и распространяется на все остальные машины. Ни на одном компьютере нет интерфейсов для связи со всеми сетями.

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

Дополнительную информацию можно получить в следующих стартовых сценариях:

  • /etc/init.d/rootusr;
  • /etc/init.d/inetuiit;
  • /etc/init.d/sysid.net; 
  • /etc/init.d/inetsvc.

Если существует файл /etc/defaultrouter, то подразумевается, что он содержит идентификатор (имя машины или IP-адрес) стандартного шлюза, и дальнейшее конфигурирование маршрутов не требуется. Как всегда, предпочтительнее указывать IP-адреса; если задано имя, для него должна существовать запись в файле /etc/hosts или на сервере DNS в локальной сети.

Если стандартный шлюз не задан, Solaris пытается запустить демон routed для построения таблиц маршрутизации. Подсчитывается число сетевых интерфейсов, и если их более одного или существует файл /etc/gateways, то демон routed запускается в режиме сервера и объявляет о своем присутствии с помощью демона обнаружения маршрутизатора. Если обнаружен всего один интерфейс или имеется файл /etc/notrouter, демон routed запускается в "бесшумном" режиме. Во всех режимах, кроме "бесшумного", демон routed является "вредоносным" — отключите его.

 

Примеры конфигураций

 

Ниже показано несколько примеров команд для подключения сетевого интерфейса в Solaris и добавления маршрута к стандартному шлюзу:

# ifconfig hme0 plumb

# ifconfig hme0 192.108.21.48 netmask 255.255.255.0 up

# route add default 192.108.21.254

 

Следующие примеры демонстрируют, как просмотреть статус сетевого интерфейса и содержимое таблиц маршрутизации. Команды, вызываемые посредством утилиты sudo, запускаются от имени суперпользователя. Последний пример иллюстрирует особенность команды route в операционных системах Solaris и FreeBSD, отсутствующую в других системах: при наличии аргумента get отображается информация о следующем переходе на пути к заданному узлу.

% ifconfig -а

lо0:  flags=849<UP,LOOPBACK,RUNNING, MULTICAST> mtu 8232

     inet 127.0.0.1  netmask ff000000

hme0:flags=863<UP,BROADCAST,NOTRAILERS,RUNNING,MULTICAST> mtu 1500

inet 192.108.21.48 netmask ffffff00 broadcast 192.108.21.255

 

% sudo ifconfig hme0

hme0:flags=863<UP,BROADCAST,NOTRAILERS,RUNNING,MULTICAST> mtu 1500

inet 192.108.21.48 netmask ffffff00 broadcast 192.108.21.255

ether 8:0:20:79:4f:49

 

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

% netstat -nr

Destination     Gateway         Flags    Ref   Use   Interface

192.108.21.0    192.108.21.48    U       3     244   hme0

224.0.0.0       192.108.21.48    U       3       0   hme0

default         192.108.21.254   UG      0     459

127.0.0.1       127.0.0.0         UH      0     296   lo0

 

% sudo route get anchor.cs.colorado.edu

route to: anchor.cs.Colorado.EDU

destination: default

mask: default

gateway: xor-gw2

interface: hme0

flags:  <UP,GATEWAY, DONE, STATIC>

recvpipe   sendpipe   ssthr   rtt,msec   rttvar   hopct   mtu   expire

       0          0       0        0          0      0    1500       0

 

Конфигурирование DHCP

 

В Solaris имеется собственный DHCP-клиент, и эта операционная система заслуживает отдельной награды за самую простую и понятную процедуру конфигурирования данного клиента:

ifconfig интерфейс dhcp

 

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

ifconfig интерфейс drop

 

Все это очень удобно, но, как правило, требуется автоматически опрашивать сервер DHCP на этапе начальной загрузки. Данная процедура должна выполняться отдельно для каждого интерфейса. С этой целью необходимо создать файл /etc/dhcp.интерфейс. Он может содержать дополнительные параметры, передаваемые команде ifconfig.

Файл /etc/hostname.интерфейс по-прежнему должен существовать, чтобы интерфейс можно было активизировать. Но его можно оставить пустым, если применяется протокол DHCP. Когда файл hostname.интерфейс не является пустым, стартовые сценарии сначала статически конфигурируют интерфейс на основании содержимого этого файла, а затем осуществляют его переконфигурацию средствами DHCP.

С помощью команды dhcpinfo можно узнать, какие параметры получены от сервера DHCP. Загляните также в файл /etc/dhcp/интерфейс.dhc, который содержит текущие настройки указанного интерфейса.

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

Программа dhcpagent собирает параметры, полученные от DHCP-сервера (стандартный маршрут, домен, адреса серверов имен и т.д.), но не управляет большинством из них напрямую. Вместо этого она записывает их в файлы соответствующих интерфейсов в каталоге /etc/dhcp. Далее эти параметры читаются сценариями /etc/rс.*, передаются в качестве аргументов команде route, помещаются в файл resolv.conf и т.д. в зависимости от конкретного параметра.

Программа dhcpagent регистрирует ошибки в системе Syslog (средство "daemon", уровень "err"); она также записывает информацию об ошибках в устройство /dev/console. Ошибки более низких уровней (предупреждающие сообщения, информационные сообщения и т.д.) по умолчанию не учитываются, если явно не включить их в командной строке посредством флага -1N. Когда N равно 1, регистрируются предупреждающие сообщения; при более высоких значениях регистрируются также сообщения самых нижних уровней. Если программе dhcpagent посылается сигнал USR1 (с помощью команды kill), она выводит информацию о состоянии аренды.

Найти конфигурационную информацию по конкретному интерфейсу можно в файлах каталога /etc/dhcp. Но сам факт присутствия файла интерфейс.dhc еще не означает, что программа dhcpagent управляет данным интерфейсом: срок аренды мог истечь.

 

Динамическое переконфигурирование и настройка

 

Команда ndd в Solaris позволяет переконфигурировать драйвер устройства в выполняющейся системе. Возможно, "переконфигурировать" — слишком сильное слово. Просто каждый драйвер предоставляет доступ к некоторым своим параметрам, которые можно просмотреть и в определенных случаях — изменить. Именно для просмотра конкретных параметров мы чаще всего применяем команду ndd. Например, с ее помощью можно узнать, с какой скоростью работает Ethernet-плата: 10 Мбит/с или 100 Мбит/с.

Синтаксис этой команды в Solaris почти такой же, как и в HP-UX, но документация к ней гораздо хуже. Базовый синтаксис, упоминаемый на man-странице, следующий:

ndd [-set] устройство ?  | переменная [значение]

 

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

К сожалению, в документации упоминаются возможные имена устройств; ничего не говорится о том, что для доступа к одним устройствам (например, ip и hme) требуются права суперпользователя, а к другим (tcp и udp) — нет. В случае отсутствия соответствующих прав доступа команда ndd выдает загадочное сообщение об ошибке следующего вида:

"couldn't push module 'ip', No such device or address"

 

В табл. 13.16 перечислены устройства, которые нам удалось обнаружить при работе с командой ndd.

Таблица 13.16. Устройства, с которыми работает команда ndd в Solaris

Устройство

Описание

Имена переменных

/dev/tcp

Переменные протокола TCP

tcp_*

/dev/udp

Переменные протокола UDP

udp_*

/dev/ip

Переменные протокола IP

ip_*

/dev/icmp

Переменные протокола ICMP

icmp_*

/dev/rawip

То же, что /dev/icmp

icmp_*

/dev/arp

Переменные протокола ARP

arp_*

/dev/hme

Переменные Ethernet

нет конкретной схемы

 

Скорость работы большинства современных Ethernet-плат — либо 10 Мбит/с, либо 100 Мбит/с. В наших сетях по мере перехода на новые технологии нам часто приходится выяснять, с какой скоростью в настоящий момент работает сетевая плата. Вот удобный сценарий, написанный Тодцом Уилльямзом (Todd Williams) и предназначенный для определения параметров Ethernet-платы посредством команды ndd:

#!/bin/sh

['ndd /dev/hme     link_status'-eq 1]  && STATUS=UP I I  STATUS=DOWN

['ndd /dev/hme     link_speed'-eq 1]  &S SPEED=100  I I  SPEED=10

['ndd /dev/hme     link_mode'-eq 1]   && MODE=FULL  ||  MODE=HALF

echo "ethernet     is $(STATUS),  running ${SPEED} Mbps ${MODE} duplex"

 

Результаты работы сценария выглядят примерно так:

ethernet is UP,  running 10 Mbps HALP duplex

 

Если перевести это на язык переменных, получим следующее:

  • link_status = 1, если интерфейс активен, 0 — если неактивен;
  • link_speed = 1, если скорость равна 100, 0 — если она равна 10;
  • link_mode = 1, если интерфейс полнодуплексный, 0 — полудуплексный.

Есть другой набор переменных, которые задают скорость работы и дуплексный режим при наличии нескольких интерфейсов. Следующий сценарий отключает процедуру автоматического согласования обоих интерфейсов, переводит первый интерфейс в полудуплексный режим со скоростью 10 Мбит/с, а второй — в полнодуплексный режим со скоростью работы 100 Мбит/с:

#!/bin/sh

ndd -set /dev/hme instance          0

ndd -set /dev/hme adv_autoneg_cap   0

ndd -set /dev/hme adv_100fdx_cap    0

ndd -set /dev/hme adv_100hdx_cap    0

ndd -set /dev/hme adv_10fdx_cap     0

ndd -set /dev/hme adv_10hdx_cap     1

 

ndd -set /dev/hme instance           1

ndd -set /dev/hme adv_autoneg_cap    0

ndd -set /dev/hme adv_100fdx_cap     1

ndd -set /dev/hme adv_100hdx_cap     0

ndd -set /dev/hme adv_10fdx_cap      0

ndd -set /dev/hme adv_10hdx_cap      0

 

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

Если имеется доступ к системе HP-UX, запустите команду ndd с флагом -h (вызов справки), чтобы получить доступ к интерактивному руководству, где можно узнать имена устройств и переменных, а также назначение этих переменных. Имена многих переменных там такие же, как и в Solaris.

 

Безопасность, брандмауэры, фильтрация и система NAT

 

В табл. 13.17 описано, как в Solaris реализован ряд технологий, касающихся безопасной работы в сети. О них кратко рассказывалось в параграфе 13.9. Большинство настроек можно изменить с помощью команды ndd.

Таблица 13.17. Поддержка технологий, связанных с сетевой безопасностью, в Solaris

 

Технология

По умолчанию

Переменная, изменяемая командой ndd

Перенаправление IP-пакетов

отключено

ip forwarding: 0 — отключено, 1 — включено

Переадресуюшие ICMP-пакеты

принимаются

Отменить это поведение нельзя, можно лишь изменить значение TTL

Направленная маршрутизация

разрешена

ip forward_src_routed: 0

Широковещательные ping-пакеты

разрешены

ip respond to echo broadcast: 0 ip forward directed broadcasts: 0

 

Как уже говорилось, не следует использовать UNIX-систему (или NT-систему) в качестве брандмауэра или шлюза NAT; для этой цели лучше купить специализированное оборудование, например систему Cisco PIX. В Solaris этому правилу следовать легче, поскольку в дистрибутив не входит ПО межсетевой защиты и IР-фильтрации.

Тем не менее в Solaris имеется библиотека pfmod, с помощью которой можно создавать STREAMS-модули для фильтрации пакетов. Компания Sun также предлагает пакет программной организации брандмауэра для Solaris, но его нужно покупать отдельно.

Сторонние поставщики также разрабатывают программы IP-фильтрации и системы NAT для Solaris. Наш фаворит — пакет IPFilter. Это бесплатное решение, распространяемое на условиях открытой лицензии и работающее на оборудовании SPARC или Intel. Пакет доступен по следующему адресу:

http://cheops.anu.edu.au/~avalon/ip-filter.html

Детали конфигурирования программ ipf и ipnat, входящих в этот пакет, приведены в параграфе 13.15.

Коммерческая система Firewall-1 компании Checkpoint работает в Solaris и обеспечивает функциональные возможности, аналогичные пакету IPFilter. Правда, она достаточно дорогая и, по слухам, не очень хорошо зарекомендовала себя на Web-узлах, занимающихся Web-хостингом.

 

Конфигурирование РРР

 

В Solaris имеется встроенный пакет "асинхронного" протокола РРР поскольку он предназначен для управления соединениями по стандартным последовательным линиям связи (например, модемами). Так как этот пакет является неотъемлемой частью Solaris, не нужно выполнять утомительные этапы по инсталляции соответствующего модуля ядра. Проверить наличие пакета можно с помощью такой команды:

# pkginfo | grep ррр

 

Если пакет присутствует в системе, будут получены следующие результаты:

system SUNWapppr PPP/IP Async РРР daemon config files

system SUNWapppu PPP/IP Async PPP daemon, login service

system SUNWpppk PPP/IP and IPdialup Device Drivers

 

 

Если пакет еще не установлен, придется сделать это вручную. Соответствующую информацию можно получить на man-странице, посвященной команде pkgadd. В табл. 13.18 перечислены файлы, отвечающие за конфигурирование протокола РРР и управление им в Solaris.

Таблица 13.18. Файлы, связанные с протоколом РРР в Solaris

Файл

Назначение

/etc/init.d/asppp

Сценарий начальной загрузки для коммутируемых РРР-соединений

/usr/sbin/aspppd

Демон, управляющий РРР-соединениями

/etc/asppp.cf

Конфигурационный файл, в котором содержится список соединений

/usr/sbin/aspppls

Регистрационный интерпретатор команд для коммутируемых соединений

/var/adm/log/asppp.log

Файл регистрации сообщений РРР

/tmp/.asppp.fifo

Используется демоном aspppd для коммутируемых соединений

 

На man-странице, посвященной демону aspppd, говорится о том, что его регистрационный файл называется /etc/log/asppp.log. Это неверно. Выполняя команду grep над стартовыми сценариями и команду strings над двоичным файлом демона, мы выяснили, что файл на самом деле находится в каталоге /var/adm, а не /etc.

Мы были уверены, что протокол UUCP давно ушел в небытие, но (увы!) РРР-пакет в Solaris пользуется старыми конфигурационными файлами UUCP для задания РРР-серверов и управления модемами. Остается только тяжело вздохнуть. Чтобы установить РРР-соединение с удаленным узлом, необходимо сначала добавить записи о модеме и узле в файлы Systems, Dialers и Devices в каталоге /etc/uucp. Мы описывали детали этой процедуры в предыдущем издании книги, но решили не включать данный материал здесь. Если у вас есть предыдущее издание, обратитесь к главе 30, а лучше всего — купите терминальный сервер и избавьте себя от ненужной головной боли.

После того как записи о модеме и удаленном узле добавлены в UUCP-файлы, необходимо отредактировать файл /etc/asppp.cf, поместив в него IP-адрес соединения и связав этот адрес с записью в файле Systems.

Ниже показан пример файла /etc/asppp.cf, в котором описано соединение с узлом ppphub (192.225.32.1), устанавливаемое из узла myhost (192.225.32.2):

# задаем IP-адреса псевдоинтерфейса

ifconfig ipdptp0 plumb 192.225.32.2 192.225.32.1 up

# динамические параметры соединения с псевдоинтерфейсом

interface ipdptp0

peer_system_name ppphub  # то же, что в файле Systems

inactivity_timeout 600   # тайм-аут, если нет связи в течение 10 минут

Далее нужно вручную запустить РРР-демона с помощью такой команды:

# /etc/init.d/asppp start

 

Этот этап необходим, только когда осуществляется самое первое конфигурирование протокола РРР. При последующих перезагрузках системы демон будет запускаться программой init. Если все прошло успешно (сообщения об ошибках записываются в файл /var/adm/log/asppp.log), то можно обращаться к удаленному узлу с помощью программы ssh или ftp.

 

Особенности сетевого конфигурирования

 

В Solaris имеются две версии команды ifconfig: одна — в каталоге /sbin, а другая — в каталоге /usr/sbin. В первой из них применяется фиксированный порядок поиска соответствия между сетевыми именами и IP-адресами: сначала просматривается файл /etc/hosts, а затем — база данных DNS. Во второй версии последовательность поиска определяется на основании файла /etc/nsswitch.conf; это более "естественное" поведение. Когда команда /sbin/ifconfig вызывается на этапе начальной загрузки, предполагается, что в файле /etc/hosts содержится достаточно записей для активизации интерфейсов и обращаться к DNS-серверу не потребуется.

Результаты работы команды ifconfig -а будут разными в зависимости от того, кто ее вызывает: пользователь root или рядовой пользователь. Это касается обеих версий команды. В первом случае помимо IP-адресов и параметров отображаются также MAC-адреса.

Solaris разрешает менять МАС-адрес сетевой платы с помощью команды ifconfig. Мы считаем это ошибкой, а не полезной возможностью. 


 (голосов: 0)
Версия для печати | Комментариев: 0
Информация
Посетители, находящиеся в группе Гости, не могут оставлять комментарии в данной новости.


 
Логин
Пароль
 

 
Locations of visitors to this page