Страница:
Хотя аппаратные средства handshake необязательны, но очень
полезны. Они позволяют любой из двух станций сигнализировать о
готовности получить данные или о том, что другая станция должна
подождать пока приемник не обработает поступающие данные. Линии
используемые для этот названы "Clear to Send" (Чистыми для посылки или
CTS) и "Ready to Send"(Готовыми послать или RTS), соответственно,
которые, объясняют второе название handshake аппаратных средств, а
именно "RTS/CTS".
В PC, интерфейс RS-232 обычно управляется UART чипом, полученным
из 16450 чипа, или более новой его версии, NSC 16550A. Некоторые марки
( особенно внутренних модемов оборудованных набором чипов Rockwell)
используют другие чипы, которые были запрограммированы, чтобы вести
себя так же как 16550-ые.
Главное различие между 16450 и 16550 то, что последний имеют FIFO
буфер размером 16 Байт, в то время как первый только 1 байт
Это делает 16450 подходящими для скорости в 9600 Бод, в то время
как для больших скоростей требуются чипы совместимые с 16550. Кроме
этих чипов, Linux также поддерживает 8250 чип, который был сделан
специально для PC-AT.
В стандартной конфигурации, ядро ищет четыре стандартных
последовательных платы от COM1 до COM4. Они связываются с устройствами
с незначительными номерами от 64 до 67, так как описано выше.
- 75 -
Если Вы хотите отконфигурировать ваши последовательные порты
по-другому, Вы должны установить Ted Tso's setserial команду в
rc.serial скрипте. Этот скрипт должен вызываться из /etc/rc во время
загрузки системы. Он использует setserial чтобы конфигурировать
последовательные устройства. Типичный rc.serial скрипт напоминает это:
# /etc/rc.serial - serial line configuration script.
#
# Do wild interrupt detection
/sbin/setserial -W /dev/cua*
# Configure serial devices
/sbin/setserial /dev/cua0 auto irq skip test autoconfig
/sbin/setserial /dev/cua1 auto irq skip test autoconfig
/sbin/setserial /dev/cua2 auto irq skip test autoconfig
/sbin/setserial /dev/cua3 auto irq skip test autoconfig
# Display serial device configuration
/sbin/setserial -bg /dev/cua*
Пожалуйста обратитесь к документации, которая поставляется вместе
с setserial для объяснения параметров.
Если ваша последовательная карта не обнаружена, или setserial -bg
команда показывает неправильные установки, Вы должны будете
отконфигурировать его явно, используя правильные значения.
Пользователи с внутренними модемами оборудованными Rockwell набором
чипов как сообщается испытывают эту проблему. Так, например, UART чип
называется NSC 16450, в то время как фактически это NSC 16550, Вы
должны изменить конфигурационную команду для причиняющего
неприятность порта
/sbin/setserial /dev/cua1 auto irq skip test autoconfig uart 16550
Подобные опции существуют и для того чтобы изменить основной
- 76 -
адрес, и IRQ COM порта. Пожалуйста обратитесь к man страницам,
setserial(8).
Если ваш модем поддерживает аппаратные средства handshake, Вы
должны удостовериться, что вы разрешили работу сними. Большинство
коммуникационных программ по умолчанию не пытаются этим пользоваться.
Вы должны устанавливать его в ручную. Лучше всего это сделать в
rc.serial скрипте, используя команду stty:
$ Stty crtscts < /dev/cua1
Чтобы проверить действительно ли используется handshake
$ Stty -a < /dev/cua1
Это команда выдаст Вам состояния всех флагов для данного
устройства; флаг показанный с предшествующим минусом как и в -crtscts
означает что флаг выключен.
.
- 77 -
6. Конфигурирование TCP/IP сети
В этой главе, мы пройдем все шаги необходимые для создания TCP/IP
сети на вашей машине. Начнем мы с назначения IP адресов и будем
медленно проходить весь путь конфигурирования интерфейсов TCP/IP , и в
конце рассмотрим несколько инструментов, которые весьма удобны для
решения проблем с установкой сети.
Большинство работ охваченных этой главой, Вы должны сделать
только один раз. Впоследствии, Вы будете изменять конфигурационные
файлы только в случае добавлении новой системы к вашей сети, или когда
Вы повторно полностью переконфигурируйте вашу систему. Некоторые из
команд конфигурирования TCP/IP, однако, должны выполнятся каждый раз
когда загружается система. Это обычно делает /etc/rc скрипт.
Обычно, специфическая сетевая часть этой процедуры содержится в
скрипте названном rc.net или rc.inet. Иногда, Вы будете также видеть
два скрипта названные rc.inet1 и rc.inet2, где вышеупомянутый скрипт
инициализирует сетевую часть ядра, в то время как последние запускают
основные сетевые приложения. Дальше я буду твердо придерживаться этой
концепции.
Ниже, Я буду обсуждать действия выполняемые в rc.inet1, в то
время как приложения будут описаны в более поздних главах. После
окончания этой главы, Вы должны установить последовательность команд,
которые должным образом конфигурируют TCP/IP сеть на вашем компьютере.
Вы можете заменить любые команды в rc.inet1 вашими командами,
удостоверится что rc.inet1 выполняется при запуске системы, и
перезагрузить вашу машину. Сетевые rc скрипты, которые вы получили
наряду с вашим Linux должны быть хорошим примером.
6.1. Установка файловой системы proc
Некоторые из инструментов конфигурации в Net-2 для связи с ядром
используют файловую систему proc. proc -- интерфейс, разрешающий
доступ к информации ядра времени выполнения через механизм похожий на
- 78 -
файловую систему. Когда он установлен, Вы можете просматривать список
его файлов и их содержание также как в любой другой файловой системе.
Типичными представителями являются файл loadavg, который содержит
среднее число загруженности системы и meminfo, который показывает
текущее состояния памяти ядра и использование свопа. К этому, сетевой
код добавляет сeтевую директорию. Она содержит ряд файлов, которые
отображают состояние вещей типа ARP таблицы, TCP соединений, и таблиц
маршрутизации. Большинство инструментов администрирования сети
получают информацию из этих файлов.
Proc файловая система (или procfs) обычно устанавливается во
время загрузки в /proc. Самый лучший метод состoит в том, чтобы
добавить следующую строку в /etc/fstab:
# procfs mont point:
none /proc proc defaults
И выполнить "mount /proc" в вашем /etc/rc скрипте.
Procfs в настоящее время отконфигурирован в большинстве ядер
установленным по умолчанию. Если procfs нет в вашем ядре, Вы можете
получить сообщение типа "mount: fs type procfs not supported by
kernel". Тогда Вы должны будите повторно собрать ядро и ответить "да"
когда вас спросят о поддержки procfs.
6.2. Установка бинарников
Если Вы используете одну из пред-пакетных Linux дистрибуций, она
вероятно содержит основные сетевые приложения и утилиты наряду с
набором примеров. Единственный случай, когда Вам пришлось бы и
устанавливать новые утилиты, тогда, когда Вы устанавливаете новый
выпуск ядра. Поскольку в них иногда вносятся изменения в сетевом
уровне, Вы должны будите модернизировать основные инструменты
конфигурации. Это по крайней мере приводит к повторной компиляции, но
иногда Вам может потребоваться последний набор бинарников. Они
обычно распространяются вместе с ядром и находятся в архиве названном
- 79 -
netXXX.tar.gz, где XXX - номер версии. Выпуск соответствующий Linux
1.0 -- 0.32b, самое последнее ядро ( 1.1.12 или позже ) требуют 0.32d.
Если Вы хотите собрать и установить стандартные TCP/IP сетевые
приложения самостоятельно, Вы можете получить исходники на большинстве
Linux FTP серверов. Там лежат более или менее тяжело исправленные
версий программ от Net-BSD и другие исходники. Другие приложения, типа
Xmosaic, xarchie, или Gopher и IRC клиенты нужно получать отдельно.
Большинство из них легко собирают, если Вы следуете всем инструкциям.
Официальный FTP участок для Net-3 -- sunacm.swan.ac.uk,
отраженный sunsite.unc.edu в system/Network/sunacm. Самый последний
Net-2e комплект и бинарники к нему доступны на ftp.aris.com. Matthias
Urlichs bsd сетевой код может быть взят на ftp.ira.uka.de в
/pub/system/linux/netbsd.
6.3. Другой пример
Для остатка этой книги, позвольте мне представить новый пример,
который является менее сложным чем Groucho Marx Университет, и ближе к
задачам, с которыми Вы будете фактически сталкиваться. Рассмотрим
виртуальную пивоварню, маленькую компанию, которая варит пиво. Чтобы
управлять этим бизнесом более эффективно, в пивоварне хотят создать
сети из компьютеров, которые все оказались PC, управляемые Linux 1.0.
На том же самом этаже, только через коридор, имеется виртуальная
винодельня, которая работает рядом с пивоварней. Там используется
собственный Ethernet. Весьма естественно, что две компании хотят
связать свои сети. Как первый шаг, они хотят создать gateway, который
будет передавать дейтограмы между двумя полсетями. Позже, они также за
хотят иметь UUCP связь с внешним миром. В конечном счете, они захотят
установить SLIP соединение чтобы соединяться иногда с Internet.
6.4. Установка имени хоста
Большинство, если не все, сетевые приложения используют имя
локального хоста, которое устанавливается к некоторому разумному
- 80 -
значению. Чтобы установить имя хоста наберите
# hostname name
Существует общая практика использовать неквалифицированное имя
хоста, то есть без указания названия области для него. Например, хосты
в Виртуальной Пивоварне могли бы быть названы vale.vbrew.com,
vlager.vbrew.com, и т.д.. Это их официальные, полностью
квалифицированные имена области. Их локальные имена -- только первый
компонент этого имени, типа vale. Однако, поскольку локальное имя
часто используется для поиска IP адреса хоста, Вы должны
удостоверится что resolver библиотека способна найти IP адрес данного
хоста. Это обычно означает что Вы должны ввести имя в /etc/hosts ( см.
ниже ).
Некоторые Люди предлагают использовать команду domainname, чтобы
развить идею ядра относительно имени области к остающейся части FQDN.
Таким образом, Вы могли бы комбинировать вывод от hostname и
domainname чтобы получить снова FQDN. Однако, это в лучшем случае
правильно на половину . domainname вообще используется чтобы
устанавливать NIS область хоста, которая может полностью отличатся от
DNS области, к которой ваш хост принадлежит. NIS описан в главе 11 ..
6.5. Назначение IP Адресов
Если Вы конфигурируете сетевое программное обеспечение для
автономного действия (например, чтобы он мог запустить INN netnews
программное обеспечение), Вы можете благополучно пропустить эту
секцию, потому что Вы будете нуждаться в IP адресе только для
интерфейса loopback, который всегда равен 127.0.0.1.
Если Вы хотите соединить ваш хост с существующей сетью, Вы должны
просить администраторов дать Вам IP адрес. При создании собственной
сети, Вы должны назначать IP адреса самостоятельно как описано ниже.
Хосты в пределах локальной сети обычно должны использовать адреса
- 81 -
от той же самой логической IP сети. Если Вы имеете несколько
физических сетей, Вы или должны назначить им различные сетевые номера,
или использовать подсети, чтобы расколоть ваш диапазон IP адресов в
несколько подсетей.
Если ваша сеть не связана с Internet, Вы свободны выбрать любой
правельный сетевой адрес. Вы только должны удостовериться, что выбрали
его из классов A, B, или C, в противном случае большенство программ
будут работать не правильно. Однако, если Вы намереваетесь в ближайшем
будущем выйти в Internet, Вы должны получить официальный IP адрес.
Самый лучший путь состoит в том, чтобы попросить вашего сетевого
поставщика помочь Вам. Если Вы хотите получить сетевой номер только в
случае когда вы выбираетесь в Internet, запросите бланк заявки на
сетевой адреса от hostmaster@internic.net.
Чтобы оперировать несколькими Ethernet (или другими сетями), Вы
должны разбить вашу сеть в несколько подсетей. Обратите Внимание, что
подсети требуются только в случае, если Вы имеете больше чем одну
сеть; Point-to-point связь не учитывается. Например, если Вы имеете
один Ethernet и один или более SLIP соединений с внешним миром, Вы не
нуждаетесь в подсети. Причина этого объясняется в главе 8..
Как пример, менеджер сети пивоварни обращается к NIC за сетевым
номером класс В, и получает 191.72.0.0. Чтобы разместить два Ethernet,
он решает использовать восемь битов части хоста как дополнительные
подсетевые биты. Это оставляет другие восемь битов для хоста, то есть
по 254 хостов на каждой полсети. Он также назначает подсеть 1
пивоварне и 2 -- винодельне. Их соответствующие сетевые адреса таким
образом 191.72.1.0 и 191.72.2.0. Сетевая маска 255.255.255.0.
Vlager, который является gateway между двумя сетями, получил
номер хоста, равный 1 на обоих из них, что дает ему IP адреса равные
191.72.1.1 и 191.72.2.1, соответственно. Картинка показывает две
подсети, и gateway.
Обратите Внимание что в этом примере Я использую сеть класса B
для простоты; класс C сеть был бы более реалистичным. С новым сетевым
кодом, деление на подсети не ограничено границами байта, так даже сеть
- 82 -
класса C может быть раздроблена на несколько полсетей. Например, Вы
могли бы использовать 2 бита части хоста для сетевой маски, что дает
Вам четыре возможные подсети с 64 хостами на каждой.
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
адреса, имени хоста и необязательного списка псевдонимов имени. Поля
- 83 -
отделяются пробелами или табуляцией, и поле адреса должно начинаться в
первой колонке. Все, что следует после символа (#), расценивается как
комментарий и игнорируется.
Имя хоста может быть также полностью квалифицированным или
относительно локальной области. Для 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 который отображает имя сети на сетевой номер и наоборот.
В Виртуальной Пивоварне, мы могли бы устанавливать файл сетей подобно
этому:
- 84 -
# /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 аргументы определяют добавлять или удалять маршрут
к таблице.
- 85 -
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. Это делается с помощью следующей команды
- 86 -
# 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. Удостоверитесь
- 87 -
что Вы используете тот же самый адрес, что Вы дали 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
- 88 -
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 флаг.
Конечно, вышеупомянутая команда, немного утомительна для набора и
- 89 -
дает много ошибок. Более удобный подход -- использование сетевых имен,
которые мы определили в /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 опция указывает печатать вместо адресов имена
хостов):
- 90 -
# 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. (Чтобы проверить,
полезны. Они позволяют любой из двух станций сигнализировать о
готовности получить данные или о том, что другая станция должна
подождать пока приемник не обработает поступающие данные. Линии
используемые для этот названы "Clear to Send" (Чистыми для посылки или
CTS) и "Ready to Send"(Готовыми послать или RTS), соответственно,
которые, объясняют второе название handshake аппаратных средств, а
именно "RTS/CTS".
В PC, интерфейс RS-232 обычно управляется UART чипом, полученным
из 16450 чипа, или более новой его версии, NSC 16550A. Некоторые марки
( особенно внутренних модемов оборудованных набором чипов Rockwell)
используют другие чипы, которые были запрограммированы, чтобы вести
себя так же как 16550-ые.
Главное различие между 16450 и 16550 то, что последний имеют FIFO
буфер размером 16 Байт, в то время как первый только 1 байт
Это делает 16450 подходящими для скорости в 9600 Бод, в то время
как для больших скоростей требуются чипы совместимые с 16550. Кроме
этих чипов, Linux также поддерживает 8250 чип, который был сделан
специально для PC-AT.
В стандартной конфигурации, ядро ищет четыре стандартных
последовательных платы от COM1 до COM4. Они связываются с устройствами
с незначительными номерами от 64 до 67, так как описано выше.
- 75 -
Если Вы хотите отконфигурировать ваши последовательные порты
по-другому, Вы должны установить Ted Tso's setserial команду в
rc.serial скрипте. Этот скрипт должен вызываться из /etc/rc во время
загрузки системы. Он использует setserial чтобы конфигурировать
последовательные устройства. Типичный rc.serial скрипт напоминает это:
# /etc/rc.serial - serial line configuration script.
#
# Do wild interrupt detection
/sbin/setserial -W /dev/cua*
# Configure serial devices
/sbin/setserial /dev/cua0 auto irq skip test autoconfig
/sbin/setserial /dev/cua1 auto irq skip test autoconfig
/sbin/setserial /dev/cua2 auto irq skip test autoconfig
/sbin/setserial /dev/cua3 auto irq skip test autoconfig
# Display serial device configuration
/sbin/setserial -bg /dev/cua*
Пожалуйста обратитесь к документации, которая поставляется вместе
с setserial для объяснения параметров.
Если ваша последовательная карта не обнаружена, или setserial -bg
команда показывает неправильные установки, Вы должны будете
отконфигурировать его явно, используя правильные значения.
Пользователи с внутренними модемами оборудованными Rockwell набором
чипов как сообщается испытывают эту проблему. Так, например, UART чип
называется NSC 16450, в то время как фактически это NSC 16550, Вы
должны изменить конфигурационную команду для причиняющего
неприятность порта
/sbin/setserial /dev/cua1 auto irq skip test autoconfig uart 16550
Подобные опции существуют и для того чтобы изменить основной
- 76 -
адрес, и IRQ COM порта. Пожалуйста обратитесь к man страницам,
setserial(8).
Если ваш модем поддерживает аппаратные средства handshake, Вы
должны удостовериться, что вы разрешили работу сними. Большинство
коммуникационных программ по умолчанию не пытаются этим пользоваться.
Вы должны устанавливать его в ручную. Лучше всего это сделать в
rc.serial скрипте, используя команду stty:
$ Stty crtscts < /dev/cua1
Чтобы проверить действительно ли используется handshake
$ Stty -a < /dev/cua1
Это команда выдаст Вам состояния всех флагов для данного
устройства; флаг показанный с предшествующим минусом как и в -crtscts
означает что флаг выключен.
.
- 77 -
6. Конфигурирование TCP/IP сети
В этой главе, мы пройдем все шаги необходимые для создания TCP/IP
сети на вашей машине. Начнем мы с назначения IP адресов и будем
медленно проходить весь путь конфигурирования интерфейсов TCP/IP , и в
конце рассмотрим несколько инструментов, которые весьма удобны для
решения проблем с установкой сети.
Большинство работ охваченных этой главой, Вы должны сделать
только один раз. Впоследствии, Вы будете изменять конфигурационные
файлы только в случае добавлении новой системы к вашей сети, или когда
Вы повторно полностью переконфигурируйте вашу систему. Некоторые из
команд конфигурирования TCP/IP, однако, должны выполнятся каждый раз
когда загружается система. Это обычно делает /etc/rc скрипт.
Обычно, специфическая сетевая часть этой процедуры содержится в
скрипте названном rc.net или rc.inet. Иногда, Вы будете также видеть
два скрипта названные rc.inet1 и rc.inet2, где вышеупомянутый скрипт
инициализирует сетевую часть ядра, в то время как последние запускают
основные сетевые приложения. Дальше я буду твердо придерживаться этой
концепции.
Ниже, Я буду обсуждать действия выполняемые в rc.inet1, в то
время как приложения будут описаны в более поздних главах. После
окончания этой главы, Вы должны установить последовательность команд,
которые должным образом конфигурируют TCP/IP сеть на вашем компьютере.
Вы можете заменить любые команды в rc.inet1 вашими командами,
удостоверится что rc.inet1 выполняется при запуске системы, и
перезагрузить вашу машину. Сетевые rc скрипты, которые вы получили
наряду с вашим Linux должны быть хорошим примером.
6.1. Установка файловой системы proc
Некоторые из инструментов конфигурации в Net-2 для связи с ядром
используют файловую систему proc. proc -- интерфейс, разрешающий
доступ к информации ядра времени выполнения через механизм похожий на
- 78 -
файловую систему. Когда он установлен, Вы можете просматривать список
его файлов и их содержание также как в любой другой файловой системе.
Типичными представителями являются файл loadavg, который содержит
среднее число загруженности системы и meminfo, который показывает
текущее состояния памяти ядра и использование свопа. К этому, сетевой
код добавляет сeтевую директорию. Она содержит ряд файлов, которые
отображают состояние вещей типа ARP таблицы, TCP соединений, и таблиц
маршрутизации. Большинство инструментов администрирования сети
получают информацию из этих файлов.
Proc файловая система (или procfs) обычно устанавливается во
время загрузки в /proc. Самый лучший метод состoит в том, чтобы
добавить следующую строку в /etc/fstab:
# procfs mont point:
none /proc proc defaults
И выполнить "mount /proc" в вашем /etc/rc скрипте.
Procfs в настоящее время отконфигурирован в большинстве ядер
установленным по умолчанию. Если procfs нет в вашем ядре, Вы можете
получить сообщение типа "mount: fs type procfs not supported by
kernel". Тогда Вы должны будите повторно собрать ядро и ответить "да"
когда вас спросят о поддержки procfs.
6.2. Установка бинарников
Если Вы используете одну из пред-пакетных Linux дистрибуций, она
вероятно содержит основные сетевые приложения и утилиты наряду с
набором примеров. Единственный случай, когда Вам пришлось бы и
устанавливать новые утилиты, тогда, когда Вы устанавливаете новый
выпуск ядра. Поскольку в них иногда вносятся изменения в сетевом
уровне, Вы должны будите модернизировать основные инструменты
конфигурации. Это по крайней мере приводит к повторной компиляции, но
иногда Вам может потребоваться последний набор бинарников. Они
обычно распространяются вместе с ядром и находятся в архиве названном
- 79 -
netXXX.tar.gz, где XXX - номер версии. Выпуск соответствующий Linux
1.0 -- 0.32b, самое последнее ядро ( 1.1.12 или позже ) требуют 0.32d.
Если Вы хотите собрать и установить стандартные TCP/IP сетевые
приложения самостоятельно, Вы можете получить исходники на большинстве
Linux FTP серверов. Там лежат более или менее тяжело исправленные
версий программ от Net-BSD и другие исходники. Другие приложения, типа
Xmosaic, xarchie, или Gopher и IRC клиенты нужно получать отдельно.
Большинство из них легко собирают, если Вы следуете всем инструкциям.
Официальный FTP участок для Net-3 -- sunacm.swan.ac.uk,
отраженный sunsite.unc.edu в system/Network/sunacm. Самый последний
Net-2e комплект и бинарники к нему доступны на ftp.aris.com. Matthias
Urlichs bsd сетевой код может быть взят на ftp.ira.uka.de в
/pub/system/linux/netbsd.
6.3. Другой пример
Для остатка этой книги, позвольте мне представить новый пример,
который является менее сложным чем Groucho Marx Университет, и ближе к
задачам, с которыми Вы будете фактически сталкиваться. Рассмотрим
виртуальную пивоварню, маленькую компанию, которая варит пиво. Чтобы
управлять этим бизнесом более эффективно, в пивоварне хотят создать
сети из компьютеров, которые все оказались PC, управляемые Linux 1.0.
На том же самом этаже, только через коридор, имеется виртуальная
винодельня, которая работает рядом с пивоварней. Там используется
собственный Ethernet. Весьма естественно, что две компании хотят
связать свои сети. Как первый шаг, они хотят создать gateway, который
будет передавать дейтограмы между двумя полсетями. Позже, они также за
хотят иметь UUCP связь с внешним миром. В конечном счете, они захотят
установить SLIP соединение чтобы соединяться иногда с Internet.
6.4. Установка имени хоста
Большинство, если не все, сетевые приложения используют имя
локального хоста, которое устанавливается к некоторому разумному
- 80 -
значению. Чтобы установить имя хоста наберите
# hostname name
Существует общая практика использовать неквалифицированное имя
хоста, то есть без указания названия области для него. Например, хосты
в Виртуальной Пивоварне могли бы быть названы vale.vbrew.com,
vlager.vbrew.com, и т.д.. Это их официальные, полностью
квалифицированные имена области. Их локальные имена -- только первый
компонент этого имени, типа vale. Однако, поскольку локальное имя
часто используется для поиска IP адреса хоста, Вы должны
удостоверится что resolver библиотека способна найти IP адрес данного
хоста. Это обычно означает что Вы должны ввести имя в /etc/hosts ( см.
ниже ).
Некоторые Люди предлагают использовать команду domainname, чтобы
развить идею ядра относительно имени области к остающейся части FQDN.
Таким образом, Вы могли бы комбинировать вывод от hostname и
domainname чтобы получить снова FQDN. Однако, это в лучшем случае
правильно на половину . domainname вообще используется чтобы
устанавливать NIS область хоста, которая может полностью отличатся от
DNS области, к которой ваш хост принадлежит. NIS описан в главе 11 ..
6.5. Назначение IP Адресов
Если Вы конфигурируете сетевое программное обеспечение для
автономного действия (например, чтобы он мог запустить INN netnews
программное обеспечение), Вы можете благополучно пропустить эту
секцию, потому что Вы будете нуждаться в IP адресе только для
интерфейса loopback, который всегда равен 127.0.0.1.
Если Вы хотите соединить ваш хост с существующей сетью, Вы должны
просить администраторов дать Вам IP адрес. При создании собственной
сети, Вы должны назначать IP адреса самостоятельно как описано ниже.
Хосты в пределах локальной сети обычно должны использовать адреса
- 81 -
от той же самой логической IP сети. Если Вы имеете несколько
физических сетей, Вы или должны назначить им различные сетевые номера,
или использовать подсети, чтобы расколоть ваш диапазон IP адресов в
несколько подсетей.
Если ваша сеть не связана с Internet, Вы свободны выбрать любой
правельный сетевой адрес. Вы только должны удостовериться, что выбрали
его из классов A, B, или C, в противном случае большенство программ
будут работать не правильно. Однако, если Вы намереваетесь в ближайшем
будущем выйти в Internet, Вы должны получить официальный IP адрес.
Самый лучший путь состoит в том, чтобы попросить вашего сетевого
поставщика помочь Вам. Если Вы хотите получить сетевой номер только в
случае когда вы выбираетесь в Internet, запросите бланк заявки на
сетевой адреса от hostmaster@internic.net.
Чтобы оперировать несколькими Ethernet (или другими сетями), Вы
должны разбить вашу сеть в несколько подсетей. Обратите Внимание, что
подсети требуются только в случае, если Вы имеете больше чем одну
сеть; Point-to-point связь не учитывается. Например, если Вы имеете
один Ethernet и один или более SLIP соединений с внешним миром, Вы не
нуждаетесь в подсети. Причина этого объясняется в главе 8..
Как пример, менеджер сети пивоварни обращается к NIC за сетевым
номером класс В, и получает 191.72.0.0. Чтобы разместить два Ethernet,
он решает использовать восемь битов части хоста как дополнительные
подсетевые биты. Это оставляет другие восемь битов для хоста, то есть
по 254 хостов на каждой полсети. Он также назначает подсеть 1
пивоварне и 2 -- винодельне. Их соответствующие сетевые адреса таким
образом 191.72.1.0 и 191.72.2.0. Сетевая маска 255.255.255.0.
Vlager, который является gateway между двумя сетями, получил
номер хоста, равный 1 на обоих из них, что дает ему IP адреса равные
191.72.1.1 и 191.72.2.1, соответственно. Картинка показывает две
подсети, и gateway.
Обратите Внимание что в этом примере Я использую сеть класса B
для простоты; класс C сеть был бы более реалистичным. С новым сетевым
кодом, деление на подсети не ограничено границами байта, так даже сеть
- 82 -
класса C может быть раздроблена на несколько полсетей. Например, Вы
могли бы использовать 2 бита части хоста для сетевой маски, что дает
Вам четыре возможные подсети с 64 хостами на каждой.
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
адреса, имени хоста и необязательного списка псевдонимов имени. Поля
- 83 -
отделяются пробелами или табуляцией, и поле адреса должно начинаться в
первой колонке. Все, что следует после символа (#), расценивается как
комментарий и игнорируется.
Имя хоста может быть также полностью квалифицированным или
относительно локальной области. Для 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 который отображает имя сети на сетевой номер и наоборот.
В Виртуальной Пивоварне, мы могли бы устанавливать файл сетей подобно
этому:
- 84 -
# /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 аргументы определяют добавлять или удалять маршрут
к таблице.
- 85 -
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. Это делается с помощью следующей команды
- 86 -
# 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. Удостоверитесь
- 87 -
что Вы используете тот же самый адрес, что Вы дали 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
- 88 -
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 флаг.
Конечно, вышеупомянутая команда, немного утомительна для набора и
- 89 -
дает много ошибок. Более удобный подход -- использование сетевых имен,
которые мы определили в /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 опция указывает печатать вместо адресов имена
хостов):
- 90 -
# 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. (Чтобы проверить,