6.6. Написание hosts и networks файлов
После того, как Вы разбили на подсети вашу сеть, Вы должны
подготовиться к некоторому простому виду поиска адреса по имени
использующего файл /etc/hosts. Если Вы не собираетесь использовать DNS
или NIS для этого, Вы должны помещать все хосты в hosts файл.
Даже если Вы хотите использовать DNS или NIS, Вы можете иметь
некоторое подмножество имен и в /etc/hosts. Например, если вы хотите
иметь некоторый вид поиска по имени даже когда никакие сетевые
интерфейсы не запущены, например во время загрузки. Это не только
вопрос удобства, но также позволяет Вам использовать символические
имена хостов в ваших rc.inet скриптах. Таким образом, при изменении IP
адресов, Вы должны будите только копировать обновленный файл хостов на
все машины, вместо того чтобы редактировать большое количество rc
файлов. Обычно, Вы будете помещать все локальные имена и адреса в
hosts, добавлением их на любой gateways и NIS сервера, если они
используется.
Также, в течение проверки, Вы должны удостовериться, что ваш
resolver использует информацию только из файла hosts. Ваше DNS или NIS
программное обеспечение может прибыть с файлами примеров, которые
могут дать странные результаты при их использовании. Чтобы заставить
все приложения использовать исключительно /etc/hosts при поиске IP
адреса хоста, Вы должны отредактировать файл /etc/host.conf.
Закоментируйте все строки, начинающиеся с ключевого слова order и
вставьте строку
order hosts
Конфигурация resolver библиотеки будет подробно описана в главе7.
hosts файл содержит по одной записи на строку, состоящую из IP
адреса, имени хоста и необязательного списка псевдонимов имени. Поля
отделяются пробелами или табуляцией, и поле адреса должно начинаться в
первой колонке. Все, что следует после символа (#), расценивается как
комментарий и игнорируется.
Имя хоста может быть также полностью квалифицированным или
относительно локальной области. Для vale, Вы бы ввели полностью
квалифицированное имя, vale.vbrew.com и vale само по себе, так, чтобы
было известно и официальное имя и более короткое локальное.
Пример как выглядит файл хостов Виртуальной Пивоварне дан ниже.
Два специальных имени , vlager-if1 и vlager-if2, дают адреса для обоих
интерфейсов используемых на vlager.
#
# Hosts file for Virtual Brewery/Virtual Winery
#
# IP local fully qualified domain name
#
127.0.0.1 localhost
#
191.72.1.1 vlager vlager.vbrew.com
191.72.1.1 vlager-if1
191.72.1.2 vstout vstout.vbrew.com
191.72.1.3 vale vale.vbrew.com
#
191.72.2.1 vlager-if2
191.72.2.2 vbeaujolais vbeaujolais.vbrew.com
191.72.2.3 vbardolino vbardolino.vbrew.com
191.72.2.4 vchianti vchianti.vbrew.com
Точно также как с IP адресами хостов, можно дать символическое
имя сетевым номерам. Поэтому, файл хостов имеет компаньона названного
/etc/networks который отображает имя сети на сетевой номер и наоборот.
В Виртуальной Пивоварне, мы могли бы устанавливать файл сетей подобно
этому:
# /etc/networks for the Virtual Brewery
brew-net 191.72.1.0
wine-net 191.72.2.0
6.7. Конфигурация интерфейса для IP
После установки аппаратных средств, как было объяснено в предыдущей главе,
Вы должны дать знать об этом сетевому программному обеспечению. Пара команд
используются чтобы конфигурировать сетевые интерфейсы, и инициализировать
таблицу маршрутизации. Эти задачи выполняются обычно в rc.inet1 скрипте,
при загрузке системы. Эти команды называются ifconfig ( где "если" относится
к интерфейсу ), и route. fconfig используется чтобы сделать интерфейс доступным
для ядра, что включает в себя назначение IP адреса и других параметров
и формирование интерфейса, также известное как "taking up". Активность
означает, что ядро будет посылать и получить IP datagrams через интерфейс.
Самый простой путь установки # ifconfig interface ip-address Который связывает
ip-адрес с интерфейсом и активирует его. Все другие параметры устанавливаются
по умолчанию Например, маска подсети установленная по умолчанию получена
из сетевого класса IP адреса, типа 255.255.0.0 для класса B адрес. ifconfig
описан более подробно в конце этой главы. route позволяет Вам добавлять
или устранять маршруты из таблицы маршрутизации. Это может быть использовано
так route [add|del] target Где add и del аргументы определяют добавлять
или удалять маршрут к таблице.
6.7.1. Интерфейс loopback
Сам первый интерфейс который нужно сформировать и активизировать -- интерфейс
loopback: # ifconfig lo 127.0.0.1 Иногда, Вы будете также видеть фиктивное
имя localhost используемое вместо IP адреса. ifconfig будет искать имя
в hosts файле, где должна быть запись, объявляющая его как имя для 127.0.0.1:
# Sample /etc/hosts entry for localhost localhost 127.0.0.1 Чтобы просмотреть
информацию о конфигурации интерфейса, Вы можете вызвать ifconfig передав
как аргумент имя интерфейса: $ ifconfig lo lo Link encap Local Loopback
inet addr 127.0.0.1 Bcast [NONE SET] Mask 255.0.0.0 UP BROADCAST LOOPBACK
RUNNING MTU 2000 Metric 1 RX packets 0 errors 0 dropped 0 overrun 0 TX
packets 0 errors 0 dropped 0 overrun 0 Как Вы можете видеть, интерфейс
loopback получил netmask равную 255.0.0.0, так как 127.0.0.1 -- адрес A
класса. Вы можете также увидеть, что интерфейс не имеет множества общевещательных
адресов, который вообще-то бесполезны для loopback. Однако, если Вы используете
rwhod демона на вашем хосте, Вы возможно будете должны установить широковещательный
адрес loopback для того чтобы rwho функционировал должным образом. Установка
этого адреса объясняется в секции "Все о ifconfig". Теперь, Вы можете начать
играть с вашей мини-"сетью". Единственное чего не хватает -- это запись
в таблице маршрутизации, которая говорит IP, что этот интерфейс как маршрут
к месту назначения 127.0.0.1. Это делается с помощью следующей команды
# route add 127.0.0.1 Здесь, тоже можно использовать localhost вместо IP
адреса. Затем, Вы должны проверить правильность работы, например, используя
ping. ping - сетевой эквивалент звукового(sonar) устройства и используется
для проверки того доступен ли данный IP адрес, и измерения интервала времени
между посылкой дэйтаграмы и получением ответа. Время требуемое для этого
часто называется roundtrip time. # ping localhost PING localhost (127.0.0.1):
56 data bytes 64 bytes from 127.0.0.1: icmp seq=0 ttl=32 time=1 ms 64 bytes
from 127.0.0.1: icmp seq=1 ttl=32 time=0 ms 64 bytes from 127.0.0.1: icmp
seq=2 ttl=32 time=0 ms ^C --- localhost ping statistics --- 3 packets transmitted,
3 packets received, 0% packet loss round-trip min/avg/max = 0/0/1 ms При
вызове ping, он будет продолжать испускать пакеты пока не будет прервано
пользователем. ^C отмечает место где мы нажали Ctrl-C. Вышеупомянутый пример
показывает, что пакеты доставлены к 127.0.0.1 и ответ пришел к ping почти
мгновенно. Это показывает что Вы преуспели во введении вашего первого сетевого
интерфейса. Если вывод который Вы получаете от ping не походит на показанный
выше, Вы нарвались на неприятности. Проверите ошибки в установочных файлах.
Проверите чтобы ifconfig и маршрутизирующие приложения, которые вы используете,
были совместимы с ядром, которым Вы пользуетесь и, вообще, что ядро компилировалось
с разрешенной сетью (Вы увидите это по отсутствию директории /proc/net
). Если Вы получаете сообщение об ошибки, говорящее "Network unreachable"
,тогда вероятно вы не правильно использовали команду route. Удостоверитесь
что Вы используете тот же самый адрес, что Вы дали ifconfig. Шагов описанных
выше достаточно чтобы использовать сетевые приложения на автономном хосте.
После добавления вышеупомянутых строк к rc.inet1 и проверки, что оба rc.inet
скрипта запускаются из /etc/rc, Вы можете перезагрузить вашу машину и попытаться
использовать различные приложения. Например, "telnet localhost" должен
установить telnet соединение с вашем хостом. Однако, интерфейс loopback
полезен не только как пример в книгах о сетях , или как система отладки,
но фактически используется некоторыми приложениями в течение нормальной
работы. Поэтому, Вы всегда должны конфигурировать его, независимо от того
присоединена ли ваша машина к сети или нет.
6.7.2. Ethernet интерфейсы
Конфигурирование интерфейса Ethernet, идет почти также как и интерфейса
loopback, он только требует больше параметров когда Вы используете подсети.
В Виртуальной Пивоварне, мы разбивали на подсети IP сеть, которая была
первоначально класс B. При установке интерфейса для требовалось бы написать:
# ifconfig eth0 vstout netmask 255.255.255.0 Эта запись назначает eth0
интерфейсу IP адрес vstout (191.72.1.2). Если бы мы опустили netmask, ifconfig
вывел бы netmask из класса сети, что привело бы к netmask 255.255.0.0.
Теперь быстренько проверим: # ifconfig eth0 eth0 Link encap 10Mps Ethernet
HWaddr 00:00:C0:90:B3:42 inet addr 191.72.1.2 Bcast 191.72.1.255 Mask 255.255.255.0
UP BROADCAST RUNNING MTU 1500 Metric 1 RX packets 0 errors 0 dropped 0
overrun 0 TX packets 0 errors 0 dropped 0 overrun 0 Вы можете видеть что
ifconfig автоматически устанавливает широковещательный адрес (поле Bcast)
равный обычному значению, которое является номером сети хостов с битами
хоста равными 1. Также, размер передаваемых сообщений (для данного интерфейса
устанавливается максимальный размер Ethernet пакета) был установлен равным
максимальному значению 1500 байтов. Все эти значения могут быть исправлены
специальными опциями, которые было описаны позже. Также как в loopback
случае, Вы должны теперь установить маршрутизационную запись, которая сообщает
ядру о сети, которая может быть достигнута через eth0. Для Виртуальной
Пивоварни, Вы это сделали бы так # route add -net 191.72.1.0 Сначала это
смотрится как волшебство, потому что это действительно не очевидно как
route обнаруживает, которые сети связываются с помощью каких интерфейсов.
Однако, уловка довольно проста: ядро проверяет все интерфейсы которые были
отконфигурированы и сравнивает адрес места назначения (в этом случае 191.72.1.0)
с сетевой частью адреса интерфейса. Единственный интерфейс, который соответствует
данному адресу, -- eth0. Теперь, что такое -net опция? Она используется,
потому что route может работать с маршрутами к сетям и с маршрутам к отдельным
хостам (как Вы видели в localhost). Когда route получает адрес в dotted
quad стандарте, он пытается предположить принадлежит ли этот адрес сети
или хосту, проверяя биты части хоста. Если хост часть адреса - ноль, маршрут
предполагает, что это обозначает сеть, в противном случае, что это адрес
хоста. Поэтому, route решил бы, что 191.72.1.0 - адрес хоста, потому что
он не может знать что мы используем подсети. Поэтому мы должны явно сообщить,
что это адрес сети, это делает -net флаг. Конечно, вышеупомянутая команда,
немного утомительна для набора и дает много ошибок. Более удобный подход
-- использование сетевых имен, которые мы определили в /etc/networks. Это
делает команду еще более удобочитаемой; и даже -net флаг может быть теперь
опущен, потому что route теперь знает, что 191.72.1.0 обозначает сеть.
# route add brew-net Теперь, когда вы закончили основные шаги конфигурации,
надо удостовериться что ваш Ethernet интерфейс действительно работает правильно
Выберите хост на вашем Ethernet, например vlager, и наберите # ping vlager
PING vlager: 64 byte packets 64 bytes from 191.72.1.1: icmp seq=0. time=11.
ms 64 bytes from 191.72.1.1: icmp seq=1. time=7. ms 64 bytes from 191.72.1.1:
icmp seq=2. time=12. ms 64 bytes from 191.72.1.1: icmp seq=3. time=3. ms
^C ----vstout.vbrew.com PING Statistics---- 4 packets transmitted, 4 packets
received, 0% packet loss round-trip (ms) min/avg/max = 3/8/12 Если Вы не
видите вывод подобный этому, значит что-то не так. Если Вы сталкиваетесь
с необычным количеством потерянных пакетов, это означает проблему аппаратных
средств, типа плохого или отсутствующего terminator, и т.д.. Если Вы не
получаете пакеты вообще, Вы должны проверить конфигурацию интерфейса с
помощью netstat. Пакетная статистика, показанная ifconfig, должна сообщить
Вам были ли вообще посланы какие-то пакеты. Если у вас есть доступ к удаленному
хосту, Вы должны сходить к той машине и проверять там статистику интерфейса.
Таким образом, Вы можете точно решить, где пропали пакеты. Кроме того,
Вы должны посмотреть маршрутизационную информацию с помощью route, чтобы
выяснить имеют ли оба хоста правильные записи в таблице маршрутов. route
печатает всю таблицу маршрутизации, если его вызвать без аргументов( -n
опция указывает печатать вместо адресов имена хостов): # route -n Kernel
routing table Destination Gateway Genmask Flags Metric Ref Use Iface 127.0.0.1
* 255.255.255.255 UH 1 0 112 lo 191.72.1.0 * 255.255.255.0 U 1 0 10 eth0
Детальное значение этих полей объясняется ниже в секции 6.9. Колонка Flags
содержит список флагов устанавливаемых для каждого интерфейса. U - всегда
устанавливают для активных интерфейсов, а H сообщает, что адрес места назначения
обозначает хост. Если H флаг - установлен для маршрута, который Вы считаете
сетевым маршрутом, тогда Вы должны использовать -net опцию с командой route.
(Чтобы проверить, используется ли маршрут, который Вы ввели, посмотрите
на поле Use, которое находится между двум сообщениями ping.) To check whether
a route you have entered is used at all, check if the Use field in the
second to last column increases between two invocations of ping.
6.7.3. Маршрутизация через Gateway
В предыдущей секции, Я охватил только случай введения хоста с единственным
Ethernet. Достаточно часто, однако, мы сталкивается с сетями, соединенными
с помощью gateway. Этот gateway может просто связывать два или больше Ethernet,
а может обеспечить связь с внешним миром, (например с Internet). Чтобы
использовать gateway сервис, Вы должны обеспечить сетевому уровню дополнительную
информацию о маршрутизации. Например, Ethernet Виртуальной Пивоварни и
Виртуальной Винодельни связаны через такой gateway, а именно хост vlager.
Предположим, что vlager уже был отконфигурирован, и нам осталось только
добавить новую запись в таблицу маршрутизации vstout, которая сообщает
его ядру что он может достигнуть всех хостов на Сети Винодельни через vlager.
Соответствующее описание маршрута показывается ниже; gw ключевое слово,
которое сообщает что следующий аргумент обозначает gateway. # route add
wine-net gw vlager Конечно, любой хост в сети Винодельни, с которым вы
желаете поговорить должен иметь соответствующую запись в таблице маршрутизации
для Сети Пивоварни, иначе Вы были бы способны только послать данные с vstout
на vbardolino, но ответа вы не получите. Этот пример описывает только gateway
который переключает пакеты между двумя изолированными Ethernet. Теперь
предположите что vlager также имеет соединение с Internet ( работающее
через дополнительную SLIP связь). Тогда мы хотели бы чтобы дэйтаграмы для
любой сети, отличной от Пивоваренной, передавались vlager. Это может быть
выполнено с помощью установки gateway по умолчанию для vstout: # route
add default gw vlager Сетевое имя default(по умолчанию) связано с адресом
0.0.0.0, что обозначает маршрут установленный по умолчанию. Вы не должны
добавлять это имя к /etc/networks, потому что это построено в route. Если,
используя ping, Вы обнаружили большой процент потери пакетов при их проходе
через несколько gateway, это может говорить о очень большой нагрузке на
сеть. Потеря пакетов в основном происходит не из-за техническим проблемам,
а скорее благодаря временной избыточной нагрузке на направляющие хосты,
которые из-за этого задерживают или даже выбрасывают поступающие дэйтаграмы.
6.7.4. Конфигурирование Gateway
Отконфигурировать машину для передачи пакетов между двумя Ethernet довольно
просто. Вернемся к vlager, который оборудован двумя Ethernet платами, каждая
из них связанна с одной из двух сетей. Все, что Вы должны сделать отконфигурировать
оба интерфейса отдельно, дав им их соответствующий IP адрес, и это все.
Весьма полезно добавлять информацию относительно двух интерфейсов к файлу
хостов путем показанным ниже, так чтобы иметь удобные имена для них: 191.72.1.1
vlager vlager.vbrew.com 191.72.1.1 vlager-if1 191.72.2.1 vlager-if2 Последовательность
команд для создания двух интерфейсов: # ifconfig eth0 vlager-if1 # ifconfig
eth1 vlager-if2 # route add brew-net # riute add wine-net
6.7.5. PLIP интерфейс
При использовании PLIP связи для соединения двух машин, существуют лишь
небольшие отличия от того, что Вы должны делать при использовании Ethernet.
Вышеупомянутая связь называется point-to-point(точка с точкой) связь, потому
что она соединяет только два хоста ("точки"), в противоположность широковещательным
сетям. Как пример, мы рассматриваем laptop компьютер некоторого служащего
в Виртуальной Пивоварне, который связана с vlager через PLIP. Laptop непосредственно
назван vlite, и имеет только один параллельный порт. В о время загрузки,
этот порт будет регистрироваться как plip1. Чтобы сформировать связь, Вы
должны отконфигурировать интерфейс plip1, используя следующие команды:
# ifconfig plip1 vlite pointopoint vlager # route add default gw vlager
Первая команда конфигурирует интерфейс, сообщая ядру, что это point-to-point
связь, с удаленной машиной имеющей адрес vlager. Вторая устанавливает маршрут
по умолчанию, используя vlager как gateway. На vlager, подобная команда
ifconfig необходима чтобы сформировать связь и на vlager: # ifconfig plip1
vlager pointopoint vlite Интересно, что интерфейс plip1 на vlager не должен
иметь отдельный IP адрес, но если хочется можете дать ему адрес 191.72.1.1.
Теперь, мы отконфигурировали маршрутизацию от laptop до Сети Пивоварни;
что но все еще отсутствует маршруту от любого из Хостов Пивоварни к vlite.
Особенно тяжелый путь состoит в том, чтобы добавлять определенный маршрут
к таблице маршрутизации каждого хоста, который состоит в том чтобы объявить
vlager как gateway к vlite: # route add vlite gw vlager Гораздо лучше иметь
дело с временными маршрутами, используя динамическую маршрутизацию. Один
из способов сделать это состoит в запуске gated демона, который Вы должны
устанавливать на каждом хосте в сети, чтобы он распространял информацию
о маршрутах динамически. Самый легкий путь, однако, состoит в том, чтобы
использовать proxy ARP. С proxy ARP, vlager будет отвечать на любой ARP
pfпрос для vlite посылая собственный Ethernet адрес. Результат этого то,
что все пакеты для vlite будут закачивать на vlager, который будет передавать
их на laptop. Мы будем возвращаться к proxy ARP в секции 6.10. Будущие
выпуски Net-3 будут содержать инструмент названный plipconfig, который
позволит Вам устанавливать IRQ порта принтера. Позже, это может быть заменено
более общей командой ifconfig.
6.7.6. SLIP и PPP Интерфейсы
Хотя SLIP и PPP соединения -- всего лишь простые point-to-point связь подобно
PLIP соединениям, о них также есть некая дополнительная информация. Обычно,
при установке SLIP соединение требуется дозвонится до удаленного участка
через ваш модем, и отрегулировать последовательную линию для SLIP способа.
PPP используется подобным образом. Инструменты требуемые для создания SLIP
или PPP связи будут описаны в главах 8. и 9.
6.7.7. Dummy(фиктивный) интерфейс
Фиктивный интерфейс действительно немного экзотический, но довольно полезен.
Он наиболее полезен для автономных хостов, и машин, которые связаны с сетью
через модем. Фактически, последний большинство времени также является автономным
хостом. Проблема автономных хостов в том, что они имеют только одно активное
сетевое устройство, loopback устройство, которому обычно назначен адрес
127.0.0.1. На в некоторых случаях, Вы должны послать данные к "официальному"
IP адресу локального хоста. Например, рассмотрите laptop vlite, который
был отъединен от сети Приложение на vlite может захотеть послать некоторые
данные к другому приложению на том же самом хосте. Поиск vlite в /etc/hosts
выдает IP адрес 191.72.1.65, таким образом приложение пытается послать
данные этому адресу. Поскольку интерфейс loopback в настоящее время единственный
активный интерфейс на машине, ядро не имеет никакую идей относительно этого
адреса! Как следствие, ядро отказывается от дэйтаграмы, и возвращает приложению
ошибку. В этот момент просто необходимо фиктивное устройство. Оно решает
эту проблему также как loopback. В случае vlite, Вы просто даете ему адрес
191.72.1.65 и добавляете новый маршрут указывающий на него. И каждая дэйтаграма
для 191.72.1.65 будет рассматривается локально. Требуемые действия: # ifconfig
dummy vlite # route add vlite
6.8. Все о ifconfig
Имеются еще несколько параметров для ifconfig, о которых мы не писали раньше.
Вот полное описание: ifconfig interface [[-net|-host] address [parameters]]
interface - название интерфейса, и address - IP адрес который требуется
назначить для интерфейса. Это может быть или IP адрес в dotted quad формате
, или имя, которое ifconfig будет искать в /etc/hosts и /etc/networks.
-net и -host опции вынуждают ifconfig обращаться с адресом как сетевым
номером или адресом хоста, соответственно. Если ifconfig используется только
с именем интерфейса, он показывает конфигурацию этого интерфейса. Когда
он вызывается без параметров, он показывает все интерфейсы, которые Вы
отконфигурировали; опция -a вынуждает его показать и бездействующие. Образец
вывода для Ethernet интерфейса eth0 может напоминать это: # ifconfig eth0
eth0 Link encap 10Mbps Ethernet HWaddr 00:00:C0:90:B3:42 inet addr 191.72.1.2
Bcast 191.72.1.255 Mask 255.255.255.0 UP BROADCAST RUNNING MTU 1500 Metric
0 RX packets 3136 errors 217 dropped 7 overrun 26 TX packets 1752 errors
25 dropped 0 overrun 0 MTU и Metric поля показывают текущее MTU и метрическое
значение для этого интерфейса. Метрическое значение традиционно используется
некоторыми операционными системами чтобы вычислить сложность маршрута.
Linux не использует это значение, но определяет его для совместимости.
RX и TX линии показывают сколько пакетов были получены или переданы без
ошибок, сколько произошло ошибок, сколько пакетов были потеряны, вероятно
из-за нехватки памяти, и сколько были потеряны из-за переполнения. Переполнение
приемника обычно случается когда пакеты ходят быстрее чем ядро может их
обслужить последнее прерывание. Значения флагов, выводимые ifconfig, передают
дополнительную информацию о имени и опциях командной строки; они будут
объяснены ниже. Следующий список параметров используется ifconfig с соответствующими
названиями флага, данными в скобках. Опция которая просто включает некоторую
особенность также позволяют выключать ее, если названию опции предшествует
(-). up Эта опция делает интерфейс доступным для IP уровня. Эта опция подразумевается,
когда дается IP адрес. ( Эта опция соответствует UP RUNNING флагам) down
Она делает интерфейс недоступным IP уровню. Она эффективно отключает любое
IP движение через интерфейс. Обратите Внимание, что она не удаляет все
маршрутизационные записи, которые используют этот интерфейс. Если Вы постоянно
выключаете некий интерфейс, Вы должны удалить эти записи предоставить,
если возможно, альтернативные маршруты. netmask mask назначает маску подсети
для использования интерфейсом. здесь можно давать как любой шестнадцатиричнре
число с 32 битами, которому предшествует 0x, так и dotted quad десятичные
номера. Pointopoint adress Эта опция используется для point-to-point IP
соединений. Эта опция необходима чтобы отконфигурировать, например, SLIP
или PLIP интерфейсы. (Если point-to-point адрес был установлен, ifconfig
показывает POINTOPOINT флаг.) broadcast address широковещательный адрес
обычно создается из сетевого номера установкой всех битов части хоста.
Некоторые IP используют различную схему; эта опция помогает приспособиться
к этим странным средам. (Если broadcast address был установлен, ifconfig
показывает BROADCAST флаг.) metric number Эта опция может использоваться
для назначения метрического значения записи таблицы маршрутизации созданной
для интерфейса. Эта метрика используется в RIP, для построения таблиц маршрутизации.
Установленным по умолчанию оно равно нулю. Если Вы не используете RIP демона,
Вы не нуждаетесь в этой опции вообще; если используете, Вы редко должны
будете изменять это значение. mtu bytes Эта опция устанавливает Maximum
Transmission Unit (максимальную длину передаваемого пакета) Для Ethernets,
MTU по умолчанию 1500; для SLIP интерфейсов 296. arp Это опция определенная
для широковещательных сетей типа пакетного радио или Ethernet. Она позволяет
использовать ARP, протокола поиска адреса, используемый для определения
физического адреса хоста включенного сеть. Для широковещательных сетей,
включен по умолчанию. (Если ARP не включен, ifconfig показывает флаг NOARP.
) -arp запрещает использование ARP на этом интерфейсе. promisc Помещает
интерфейс в promiscuous состояние. В широковещательной сети, это заставляет
интерфейс получать все пакеты, независимо от того были ли они предназначены
для другого хоста или нет. Это позволяет , используя фильтры пакетов, анализировать
сетевой трафик. Обычно, это хорошая техника охоты на сетевые проблемы которые
должны иначе интенсивно прибывать. С другой стороны, это позволяет врагам
исследовать движение паролей по вашей сети и делать другие черные дела.
Одна защита против этого типа нападения не позволять присоединятся к вашей
сети чужим компьютерам. Другая способ использовать безопасные опознавательные
протоколы, типа Kerberos, или SRA login. (Эта опция соответствует флагу
PROMISC.) -promisc отказ от promiscuous способа. allmulti Multicast адреса
-- некоторый вид широковещательных адресов позволяющих обращаться к группе
хостов, которые не обязательно должны быть на той же самой подсети. Multicast
адреса еще не поддерживаются ядром. ( Эта опция соответствует флагу ALLMULTI.
) -allmulti отключает Multicast адреса.
6.9. Проверка с помощью netstat
Дальше, Я рассмотрю полезный инструмент для проверки вашей сетевой конфигурации
и активности. Он назван netstat и ,фактически, является набором из нескольких
инструментов собранных вместе. Мы будем обсуждать каждую из функций в следующих
секциях.
6.9.1. Отображение таблицы маршрутизации
При вызове netstat с -r флагом, он показывает таблицу маршрутизации. На
vstout, он выдаст: # netstat -nr Kernel routing table Destination Gateway
Genmask Flags Metric Ref Use Iface 127.0.0.1 * 255.255.255.255 UH 1 0 50
lo 191.72.1.0 * 255.255.255.0 U 1 0 478 eth0 191.72.2.0 191.72.1.1 255.255.255.0
UGN 1 0 250 eth0 -n опция заставляет netstat печатать адреса как dotted
quad IP номера вместо символических имен хостов и сетей. Это особенно полезно
когда Вы хотите избежать поисков адреса по сети (например через DNS или
NIS сервер). Вторая колонка вывода netstat показывает gateway маршрутизационную
запись. Если gateway не используется, печатается звездочка. Третья колонка
"общность" маршрута. Когда дается IP адрес, чтобы найти подходящий маршрут
для него, ядро просматривает все записи таблицы маршрутизации, берет побитовое
И адреса и genmask и лишь за тем сравнивает результат с целью маршрута.
Четвертая колонка показывает различные флаги, которые описывают маршрут:
G маршрут использует gateway. U интерфейс, который нужно использовать,
работает. H Только отдельный хост может быть достигнут через данный маршрут.
Например, для loopback записи 127.0.0.1. D устанавливается, если запись
таблицы была произведена по приходу ICMP перенаправляемое сообщение ( см.
секцию 3.5 ). M устанавливается, если запись таблицы была изменена ICMP
перенапавляемым сообщением. Ref колонка показывает число ссылок на этот
маршрут, то есть сколько других маршрутов (например через gateways) полагаются
на присутствие этого маршрута. Последние две колонки показывают время,
в течении которого используется запись маршрутизации, и интерфейс, через
который посылаются дэйтаграмы.
6.9.2. Отображение статистики интерфейса
Когда вызывается с -i флагом, netstat показывает статистику для сетевых
интерфейсов. Если, кроме того, дается -a опция, он будет печатать все интерфейсы
представленные в ядре, а не только те, которые были отконфигурированы в
настоящее время. На vstaout, вывод от netstat будет напоминать это: $ netstat
-i Kernel Interface table Iface MTU Met RX-OK RX-ERR RX-DRP RX-OVR TX-OK
TX-ERR TX-DRP TX-OVR Flags lo 0 0 3185 0 0 0 3185 0 0 0 BLRU eth0 1500
0 972633 17 20 120 628711 217 0 0 BRU MTU и Met поля показывают текущий
MTU и метрическое значение для этого интерфейса. RX и TX колонки показывают
сколько пакетов были получены или переданы без ошибок (RX-OK/TX-OK), повредились
(RX-ERR/TXERR), сколько было потеряно (RX-DRP/TX-DRP), и сколько было потеряно
из-за переполнения (RX-OVR/TX-OVR). Последняя колонка показывает флаги,
установленные для этого интерфейса. Здесь используется односимвольная версия
флагов, которые печатает ifconfig. B был установлен широковещательный адрес.
L Этот интерфейс -- loopback устройство M интерфайс получает все пакеты
( promiscuous способ ). N Трейлеры избегаются. O ARP выключен для этого
интерфейса. P Это - point-to-point соединение. R Интерфейс работает. U
Интерфейс активен.
6.9.3. Отображение соединений
Netstat поддерживает множество опции для отображения активных и пассивных
гнезда. Опция -t, -u, -w, и -x показывают активные TCP, UDP, RAW , или
UNIX гнезда. Если Вы зададите -a флаг, гнезда которые ждут соединения (то
есть слушают) также показываются. Это даст Вам список всех серверов которые
в настоящее время работают в вашей системе. Вызов netstat -ta на vlager
даст: $ netstat -ta Active Internet connections Proto Recv-Q Send-Q Local
Address Foreign Address (State) tcp 0 0 *:domain *:* LISTEN tcp 0 0 *:time
*:* LISTEN tcp 0 0 *:smtp *:* LISTEN tcp 0 0 vlager:smtp vstout:1040 ESTABLISHED
tcp 0 0 *:telnet *:* LISTEN tcp 0 0 localhost:1046 vbardolino:telnet ESTABLISHED
tcp 0 0 *:chargen *:* LISTEN tcp 0 0 *:daytime *:* LISTEN tcp 0 0 *:discard
*:* LISTEN tcp 0 0 *:echo *:* LISTEN tcp 0 0 *:shell *:* LISTEN tcp 0 0
*:login *:* LISTEN Видно, что больше всего серверов просто ждут соединения.
Однако, четвертая строка говорит о SMTP соединение с vstout, а шестая линия
сообщает о telnet соединение с vbardolino. При использовании -a флага будут
отображаться все гнезда всех семейств.
6.10. Проверка ARP Таблицы
В некоторых случаях, бывает полезно просмотреть или даже изменить содержание
ARP таблицы, например, когда Вы подозреваете, что двойной адрес причина
некоторой сетевой неустойчивости. аrp был сделан для исправления подобных
вещей. Arp [-v] [ -t hwtype ] -a [hostname] arp [-v] [ -t hwtype ] -s hostname
hwaddr arp [-v] -d hostname [ hostname ... ] hostname аргумент может быть
как символическим именем, так и IP адресом в dotted quad стандарте. Первая
строка отображает ARP запись для IP адреса или указанного хоста или всех
известный хостов, если hostname не дается. Например, вызов arp на vlager
может выдать # arp -a IP address HW type HW address 191.72.1.3 10Mbps Ethernet
00:00:C0:5A:42:C1 191.72.1.2 10Mbps Ethernet 00:00:C0:90:B3:42 191.72.2.4
10Mbps Ethernet 00:00:C0:04:69:AA что показывает Ethernet адреса vlager,
vstout и vale. При использовании -t опции Вы увидите информацию только
о том типе аппаратных средств, который вы укажете. Это может быть ethernet,
ax25net, или pronet, стоящие за 10Mbps Ethernet, AMPR AX.25, и IEEE 802.5
token ring оборудование, соответственно. -s опция используется чтобы добавить
Ethernet адрес хоста к ARP таблицам. hwaddr аргумент определяет адрес аппаратных
средств, который по умолчанию предполагается Ethernet адресом, указанным
как шесть шестнадцатиричных байт, разделяемых двоеточиями. Вы можете также
устанавливать адрес аппаратных средств для других типов аппаратных средств,
также, используя -t опцию. Одна из проблем, которая может потребовать,
чтобы Вы вручную добавили IP адрес к ARP таблице, когда по некоторым причинам
ARP вопросы для удаленного хоста не доходят, например когда глючит ARP
драйвер или имеется другой хост в сети которая ошибочно опознает себя с
IP адресом того хоста. Твердая установка IP адреса в ARP таблице также
(очень решительно) является мерой защиты себя от хостов на вашем Ethernet,
которые прикидываются кем-то другим. Вызов arp с использованием ключа -d
удаляет все ARP записи касающиеся данного хоста. Это может быть необходимо,
чтобы вынудить интерфейс повторно получить Ethernet адрес для данного IP.
Это полезно когда переконфигурированная система имеет неправильную ARP
информацию. -s опция может также использоваться чтобы создать proxy ARP.
Это специальная техника когда хост, скажем gate, действует как gateway
для другого хоста назовем его fnord, делая вид что оба адреса относят тому
же самому хосту, а именно gate. Это делается так: на gate создается ARP
запись о fnord, которая указывает на его собственный Ethernet интерфейс.
Теперь когда хост посылает ARP запрос о fnord, gate будут возвращать ответ
содержащий собственный Ethernet адрес. Спрашивающий хост будет тогда посылать
все дэйтаграмы gate, который перенаправит их к fnord. Эти схема может быть
необходима, например, когда Вы хотите работать с fnord из DOS машины с
нестандартным TCP, которое плохо работает с маршрутизацией. Когда Вы используете
proxy ARP, DOS машине как будет казаться, что fnord находится в локальной
подсети, так что ей не требуется что-либо знать относительно маршрутов
и gateway. Другое очень полезное приложение proxy ARP -- когда один из
ваших хостов действует как gateway к некоторому другой хост только временно,
например по телефону. В предыдущем примере, мы уже столкнулись с laptop
vlite, который был связан с vlager через PLIP связь только в небольшом
промежутке времени. Конечно, это будет работать только, если адрес хоста
для, которого Вы хотите обеспечить proxy ARP, находится на той же самой
IP подсети, что и ваш gateway. Например, vstout мог бы быть proxy ARP для
любого хоста из подсети Пивоварни (191.72.1.0), но никогда для хоста из
подсети Винодельни (191.72.2.0). Требуемые действия для обеспечения proxy
ARP для fnord дается ниже; конечно, Ethernet адрес должен быть от gate.
# arp -s fnord 00:00:c0:a1:42:e0 pub proxy ARP запись может быть удалена
снова используя: # arp -d fnord
6.11. Будущее
Linux все еще развивается. Главные изменения в ядре принесет очень гибкую
схему конфигурации, которая позволит Вам конфигурировать сетевые устройства
во время работы. Например, команда ifconfig будет работать с аргументами,
которые устанавливают IRQ линию и DMA канал. Другое изменение -- дополнительный
mtu флаг для команды route, которая будет устанавливать Максимальный размер
пакета для определенного маршрута. Этот маршруто-определенный MTU заменит
MTU для интерфейса. Вы будете использовать эту опцию для маршрутов через
gateway, где связь между gateway и хостом места назначения требует очень
низкого MTU. Например, предположите что хост wanderer связан с vlager через
SLIP связь. При посылке данных от vstout до wanderer, сетевой уровень на
wanderer использовал бы пакеты до 1500 байтов, потому что пакеты посылаются
через Ethernet. SLIP связь, с другой стороны, используется с MTU 296, так
что сетевой уровень на vlager был бы должен разбивать IP пакеты на меньшие
фрагменты, которые вписываются в 296 байтов. Если вместо этого, Вы конфигурировали
бы маршрут на vstout так, чтобы сразу использовать MTU 296, этого относительно
долгого разбиения можно избежать: # route add wanderer gw vlager mtu 296
Обратите Внимание что mtu опция также позволяет Вам выборочно отменить
результаты "Подсети Локальны" политики (SNARL). Эта политика -- это опция
конфигурации ядра и описана в главе 4.
7. Названия сервиса и конфигурация решающего устройства.
Как уже обсуждалось в главе 3., TCP/IP сеть может полагаться на различные
схемы, чтобы преобразовать имена в адреса. Самый простой способ, у которого
еще нет никаких преимуществ над способом, где все пространство имен было
расщеплено на зоны, - таблица хостов, сохраненная в /etc/hosts. Это полезно
только для малых LAN, которые управляются одним единственным администратором,
и не имеющих никакого IP общения с внешним миром. Формат хост файлов был
уже описан в главе 6. С другой стороны, Вы можете использовать BIND - Berkeley
Internet Name Domain Service - для перевода хостов в IP адреса. Конфигурация
BIND может быть настоящей хореей, но если только вы сделаете это, то изменения
в сетевой топологии могут быть легко измены. На Linux, как и на многих
других Unix-подобных cистемах, обслуживание обеспечивается через программу,
называемую named. При запуске, эта программа загружает множество основных
файлов в их собственный кэш, и ждет запрос от отдаленных или локальных
пользовательских процессов. Имеющиеся способы требуют, чтобы Вы обязательно
ввели имя сервера для каждого хоста. Эта глава делает немного больше, чем
просто дает приблизительный эскиз того как работает сервер. Если Вы планируете
использовать BIND в операционной среде с более чем малыми LAN и возможно
Internet uplink, то Вы должны приобрести хорошую книгу по BIND, например
Льюиса Крикета "DNS and BIND" (см. [GETST "liu-dns"]). Возможно Вы захотите
проверить примечания, они содержатся в BIND источниках. Там также имеются
вопросы newsgroup для DNS называемые comp.protocols.tcp-ip.domains.
7.1 Библиотека решающих устройств.
Когда мы говорим о " решающем устройстве ", то мы не подрузамеваем никакого
специального применения, поэтому достаточно обратится к библиотеке решающих
устройств - системе функций, которая может быть найдена в стандарной библиотеке
C. Центральные программы являются gethostbyname(2) и gethostbyaddr(2),
которые ищут все IP адреса принадлежащие хосту, и наоборот. Они могут быть
сконфигурированы при простом просмотре информации в хосте, при запросе
ряда серверов, или при использовании баз данных хоста NIS(а) (Network Information
Service). Другое применение, подобно smail, может включать различные драйверы
для любого из вышеперечисленного, и нуждается в особой осторожности.
7.1.1 Файл конфигурации хоста.
Центральный файл, который управляет вашей установкой - host.conf. Он сообщает
решающему устройству какой сервис использовать, и в каком порядке. Опции
в host.conf должны быть на отдельных строках. Области могут быть отделены
пустым пространством (spaces или tabs). Знак (#) вводит строку, которая
простирается вплоть до следующей строки. Доступны следующие опции: Order:
Эта опция определяет порядок в котором перебераются все доступные услуги.
Valid опция - связывает запроса сервера и поиск хостов в /etc/hosts, и
nis для NIS поисков. Любая или все из них могут быть определены. Порядок,
в которым они появляются на строках определяет порядок в котором будут
перебираться определенные услуги. Multi: Она может использоваться как опция.
Эта опция определяет, разрешено ли хосту в /etc/hosts иметь несколько IP
адресов, которые обычно пазываются "multi - homed". Этот флаг не действует
на DNS или NIS запросы. Nospoof: Как уже было объяснено в предыдущей главе,
DNS позволяет Вам найти имя хоста принадлежащего IP адресу, используя inaddr.arpa
область. Попытки серверов поддержать ложное имя хоста называется "spoofing".Чтобы
обезопасить себя от этого, решающее устройство может быть сконфигурировано
на проверку, является ли настоящий IP адрес фактически связанным с полученным
именем хоста. Если нет, то этому имени будет отказано и будет возвращен
код ошибки. Это поведение зависит от того включен ли nospoof. Alert: Эта
опция может использоваться как аргумент. Если эта опция включена, то любые
попытки spoof (см. выше) будут причинами того, чтобы решающее устройство
отправило бы сообщение к syslog оборудованию. Trim: Эта опция берет имя
области как аргумент, которое будет удалено из имени хоста перед поиском.
Это полезно для информационных элементов, где Вы могли бы только желать
точно определить имя хоста с локальной областью. При поиски хоста с именем
локальной области, будет удалено имя этой области, таким образом легко
осуществить поиск в /etc/hosts. Опция Trim позволяет рассматривать Ваш
хост локальным для нескольких областей. Типовой файл для vlager описывается
ниже: # /etc/host.conf # We have named running, but no NIS (yet) order
bind hosts # Allow multiple addrs multi on # Guard against spoof attempts
nospoof on # Trim local dooain"(not really necessary). trim vbrew.com.
7.1.2 Параметры среды окружения решающего устройства.
Установки из файла host.conf могут быть отменены, используя ряд параметров
среды окружения. Они следующие: RESOLV HOST CONF. Он определяет файл, который
будет считан вместо /etc/host.conf. RESOLV SERV ORDER Отменяет order опцию,
данную в host.conf. Услуги, данные как хосты, bind, и nis, отделенны пробелом,
запятой, двоеточием, или точкой с запятой. RESOLV SPOOF CHECK Определяет
критерии, принимаемые против spoofing. Эта установка полностью отключается
опцией off. Значения предупреждают spoof проверку , но включают и выключают
logging, соответсвенно. Значение * включает spoof проверку, но оставляет
logging как определено в host.conf. RESOLV MULTI Эта среда окружения (
может быть вкл. или выкл.), может быть использована для отключения multi
опции из tt host.conf. RESOLV OVERRIDE TRIM DOMAINS Эта среда окружения
определяет список trim области, который отключает те, что даны в host.conf.
RESOLV ADD TRIM DOMAINS Эта среда окружения определяет список trim области,
который добавляется в host.conf.
Назад | Содержание | Вперед