В 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. Мы считаем это ошибкой, а не полезной возможностью.