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.
Назад | Содержание | Вперед