r.arpa файле. Зональная база данных для подсети 12 показана на картинке 3.6.6. Соответствующие склеенные записи в базе данных зоны родителя показывается на картинке 3.6.6. ; - 53 - ; the 12.76.149.in-addr.arpa domain. @ IN SOA { niels.physics.groucho.edu. hostmaster.niels.physics.groucho.edu. 233 360000 3600 3600000 3600 } 2 IN PTR otto.physics.groucho.edu. 4 IN PTR quark.physics.groucho.edu. 5 IN PTR down.physics.groucho.edu. 6 IN PTR strange.physics.groucho.edu. Картинка 7. фрагмент файла named.rev для подсети 12. ; ; the 76.149.in-addr.arpa domain. @ IN SOA { vax12.gcc.groucho.edu. hostmaster.vax12.gcc.groucho.edu. 233 360000 3600 3600000 3600 } ... ; subnet 4: Mathematics Dept. 1.4 IN PTR sophus.maths.groucho.edu. 17.4 IN PTR erdos.maths.groucho.edu. 23.4 IN PTR gauss.maths.groucho.edu. ... ; subnet 12: Physics Dept, separate zone 12 IN NS niels.physics.groucho.edu. IN NS gauss.maths.groucho.edu. niels.physics.groucho.edu. IN A 149.76.12.1 gauss.maths.groucho.edu. IN A 149.76.4.23 ... Картинка 8. фрагмент файла named.rev для сети Одно важное следствие этого то, что зоны могут создаваться только как наборы IP сетей, и, даже круче, количество нулевых битов в netmasks должно выть кратно 8. Все подсети в Groucho Marx Университете - 54 - имеют netmask 255.255.255.0, так что in-addr.arpa зона может быть создана для каждой подсети. Однако, если netmask 255.255.255.128, создание зон для подсети 149.76.12.128 будет невозможно, потому что нет никакой возможности сообщить DNS, что 12.76.149.in-addr.arpa область была раздроблена на две зоны, с именами хостов располагающимися от 1 до 127, и 128 до 255, соответственно. . - 55 - 4. Конфигурирование сетевых аппаратных средств. 4.1. Устройства, драйвера, и все это До сих пор, мы весьма немного говорили относительно сетевых интерфейсов и общих проблем TCP/IP, но не говорили о том, что происходит, когда "сетевой код" в ядре обращается к аппаратным средствам. Для этого, мы должны немного поговорить о концепциях интерфейсов и драйверов. Во-первых, конечно, имеются непосредственно аппаратные средства, например Ethernet карта: пластина из эпоксидной смолы, утыканная большим количеством крошечных чипов с глупыми номерами на них, и воткнутая в слот вашего PC. Это - то что мы обычно называем устройством. Для того чтобы использовать Ethernet карту, необходимы специальные функции, расположенные в ядре вашего Linux, которые знают как работать с этим устройством. Это так называемые драйвера устройств. Например, Linux имеет драйвера устройства для нескольких марок Ethernet плат которые очень похожи по выполняемым функциям. Они известны как "Becker Series Drivers" ,и называются так по имени их автора, Donald Becker. Другой пример - D-link драйвер, который работает с адаптером D-link пакетов, присоединяемым к параллельному порту. Но, что мы подразумиваем, когда говорим что драйвер "управляет" устройством? Давайте вернемся к Ethernet плата, которую мы уже упоминали. Драйвер должен быть способен работать с переферией этой платы: он должен посылать команды и данные плате, в то время как плата должна передать полученные данные драйверу. В PC, эта связь устанавливается через область памяти ввода-вывода которая является отображением регистров платы и т.п. Все команды и данные которые ядро посылает плате проходят через эти регистраторы. Память ввода-вывода описывается указанием начального(или основного) - 56 - адреса Типичные основные адреса для Ethernet плат 0x300, или 0x360. Обычно, Вы не должны волноваться относительно проблем аппаратных средств, типа основного адреса, потому что ядро делает попытку во время загрузки обнаружить местоположение платы. Это называется autoprobing(автоматический поиск), который означает что ядро во время загрузки считывает несколько участков памяти и сравнивает считанные данные с тем, что должны быть, если установлена Ethernet. Однако, существуют Ethernet платы, которые ядро не может автоматически обнаружить; это часто случается с дешевыми Ethernet картами. Также, во время загрузки, ядро будет пытаться обнаружить только одно Ethernet устройство. Если вы используете больше чем одну плату, Вы должны явно сообщить ядру об этой плате. Другой параметр, который Вы могли бы сообщить ядру -- interrupt request channel (канал прерывания запроса). Компоненты аппаратных средств обычно прерывают ядро когда они нуждаются во внимании, например когда прибыли данные, или произошли другие события. В PC, прерывание может происходить на одном из 15 каналов (0, 1, 3 и до 15). Номер прерывания назначенный компоненту аппаратных средств называется interrupt request channel или IRQ. Как описано в главе 3., ядро обращается к устройствам через так называемый интерфейс. Интерфейсы предлагают абстрактный набор функций, которые являются стандартными для всех типов аппаратных средств, типа посылки или получения дэйтаграм. Интерфейсы идентифицируются посредством имен. Эти имена определенны внутри ядра, это не файлы устройств в директории /dev. Типичные имена для интерфейсов Ethernet. - eth0, eth1, и т.д. Назначение интерфейсов для определенных устройств обычно зависит от способа, которым устройства конфигурированы; например первая установленная Ethernet плата станет eth0, следующая -- eth1, и так далее. Исключение из этого правила - SLIP интерфейсы, которые назначаются динамически; То есть всякий раз, когда устанавливается SLIP связь, последовательному порту назначается интерфейс - 57 - Картинка пробует показать связь между аппаратными средствами, драйверами устройств и интерфейсами. Во время загрузки, ядро показывает какие устройства обнаружены, и какому какой интерфейс будет установлен. Фрагмент типичного экрана загрузки: This processor honours the WP bit even when in supervisor mode. Good. Floppy drive(s): fd0 is 1.44M Swansea University Computer Society NET3.010 IP Protocols: ICMP, UDP, TCP PPP: version 0.2.1 (4 channels) OPTIMIZE FLAGS TCP compression code copyright 1989 Regents of the University of California PPP line discipline registered. SLIP: version 0.7.5 (4 channels) CSLIP: code copyright 1989 Regents of the University of California dl0: D-Link DE-600 pocket adapter, Ethernet Address: 00:80:C8:71:76:95 Checking 386/387 coupling... Ok, fpu using exception 16 error reporting. Linux version 1.1.11 (okir@monad) #3 Sat May 7 14:57:18 MET DST 1994 Здесь показано что ядро компилировалось с TCP/IP, и с драйверами для SLIP, CSLIP, и PPP. Третья строка c низу сообщает, что был обнаружен адаптер d-link, и он установился как интерфейс dl0. Если Вы имеете Ethernet карту, ядро обычно печатает строку, начинающуюся с eth0, и сопровождаемую типом обнаруженной карты. Если Вы имеете Ethernet карту, но не увидели это сообщение, это означает что ядро неспособно обнаружить вашу плату. Об этом мы поговорим позже. 4.2. Конфигурирование ядра Большинство Linux распространяются вместе с загрузочными дискетами, работующими со всеми основными типами аппаратных средств PC. Это означает что ядро на этих дискетах имеет все виды драйверов, многие из которых Вам никогда не пригодятся, но занимают драгоценную память системы потому что части ядра не свопируются. Поэтому, Вы должны собрать ваше собственное ядро, включая только необходимые Вам драйвера. - 58 - При управлении Linux системой, Вы должны быть знакомы со строением ядра. Основы этого объясняются в "Installation and Getting Started" написанной Matt Welsh, который является также частью проекта Linux документации. Потому, в этой секции мы будем обсуждать только те стороны конфигурации Linux, которые относятся к сети. При запуске make config, сначала Вас спрашивают общие вопросы конфигурации, например хотите ли Вы в ядре иметь математический эмулятор или нет, и т.д.. Один из этих вопросов -- хотите ли Вы поддержку TCP/IP сети. Вы должны ответить y, чтобы получить ядро способное работать с сетью. 4.2.1. Опции ядра в Linux 1.0 и выше После того, как основная часть вопросов задана, конфигуратор продолжит спрашивать Вас относительно различных особенностей типа SCSI драйверов, и т.д.. Последующий список вопросов относится к проблемам поддержки сети. Точный набор опций конфигурации постоянно меняется, из-за продолжающейся разработки. Типичный список опций предлагаемых большинством версий ядра (в основном в 1.0 1.1) напоминает этот ( комментарии даются italics шрифтом): * * Network device support * Network device support? (CONFIG ETHERCARDS) [y] Несмотря на макро название указанное в скобках, Вы должны ответить на этот вопрос y, если Вы хотите использовать любой тип сетевых устройств, независимо от того является ли оно Ethernet, SLIP, или PPP. При ответе y, поддержка для устройств Ethernet-типа разрешается автоматически. Поддержку для других типов сетевых драйверов нужно разрешить отдельно: SLIP (serial line) support? (CONFIG SLIP) [y] SLIP compressed headers (SL COMPRESSED) [y] PPP (point-to-point) support (CONFIG PPP) [y] - 59 - PLIP (parallel port) support (CONFIG PLIP) [n] Эти вопросы касаются различных протоколов связи поддерживаемых Linux. SLIP позволяет Вам транспортировать IP дэйтаграмы через последовательные линии. Опция сжатия заголовков обеспечивает поддержку CSLIP, позволяющий сжимать TCP/IP заголовки всего в три байта. Обратите Внимание что эта опция ядра не включает CSLIP автоматически, она просто обеспечивает необходимые функции для него. PPP - другой протокол для построения сетей на последовательными линиях. Он еще более гибок чем SLIP, и не ограничен только IP, но также поддерживает IPX. Так как поддержка PPP была закончена только недавно, эта опция может быть не представлена в вашем ядре. PLIP обеспечивает пересылку IP дэйтаграм через параллельный порт. Он главным образом используется для того чтобы связаться с PC под управлением DOS. Следующие вопросы имеют отношение к Ethernet платами от различных поставщиков. Чем больше становится драйверов, тем больше станет вопросов. Если вы конфигурируете ядро для нескольких различных машин, Вы можете установить больше чем один драйвер. NE2000/NE1000 support (CONFIG NE2000) [y] WD80*3 support (CONFIG WD80x3) [n] SMC Ultra support (CONFIG ULTRA) [n] 3c501 support (CONFIG EL1) [n] 3c503 support (CONFIG EL2) [n] 3c509/3c579 support (CONFIG EL3) [n] HP PCLAN support (CONFIG HPLAN) [n] AT1500 and NE2100 (LANCE and PCnet-ISA) support (CONFIG LANCE) [n] AT1700 support (CONFIG AT1700) [n] DEPCA support (CONFIG DEPCA) [n] D-Link DE600 pocket adaptor support (CONFIG DE600) [y] AT-LAN-TEC/RealTek pocket adaptor support (CONFIG ATP) [n] * * CD-ROM drivers * - 60 - ... Наконец, в секции файловой системы, скрипт конфигурации спросит Вас хотите ли Вы поддержку NFS. NFS позволяет Вам экспортировать файловые системы с других хостов, так что файлы и директории кажутся находящимися на одной машине. NFS filesystem support (CONFIG NFS FS) [y] 4.2.2. Опции ядра в Linux 1.1.14 и выше При запуске Linux 1.1.14, в который добавили поддержку IPX, процедура конфигурации слегка изменена. Общая секция опций теперь спросит хотите ли Вы поддержку сети вообще. Что немедленно сопровождается парой вопросов о разных сетях. * * Networking options * TCP/IP networking (CONFIG INET) [y] Чтобы использовать TCP/IP сеть, Вы должны ответить на этот вопрос y. Если Вы отвечаете n, Вы будете все еще способны собирать ядро с поддержкой IPX. IP forwarding/gatewaying (CONFIG IP FORWARD) [n] Вы должны здесь ответить Y, если ваша система действует как gateway между двумя Ethernet, или между Ethernet и SLIP, и т.д.. Хотя не причинит вреда установить ее по умолчанию, но чтобы отконфигурировать хост как так называемый firewall, вы должны ответить здесь нет. Firewalls -- хосты которые связаны с двумя или больше сетями, но не позволяют им общаться. Обычно они используются чтобы обеспечить пользователям сетей с доступом к Internet минимальный риск проникновения из вне. Пользователям позволяется входить на firewall и работать с Internet, но машины компании будут защищены от нападений из вне, потому что любые внешние хосты не могут пересечь firewall. * - 61 - * (it is safe to leave these untouched) * PC/TCP compatibility mode (CONFIG INET PCTCP) [n] Эта опция работает с несовместимостью с некоторыми версиями PC/TCP, коммерческими TCP/IP выполненными для DOS. Если Вы разрешаете эту опцию, Вы все еще будете способны общаться с нормальной Unix машиной, но она вредна для медленных соединений. Reverse ARP (CONFIG INET RARP) [n] Эта функция включает RARP. RARP используется бездисковыми клиентами и X-терминалами во время загрузки для запроса своего IP адрес. RARP необходим только для работы с этими клиентами. Самый последний пакет сетевых утилит (net-0.32d) содержит небольшую утилиту rarp которая позволяет Вам добавлять системы в RARP кэш. Assume subnets are local (CONFIG INET SNARL) [y] При посылки данных по TCP ядро, перед передачей их IP, должно разбивать поток на несколько пакетов. Большие пакеты используются для работы в локальной сети типа Ethernet, меньшие в случае, когда данные посылаются куда-то далеко. Если Вы запрещаете SNARL, ядро будет работать только с локальными сетями, к которым он непосредственно подключен. Так, если Вы посмотрите на сеть класса B в Groucho Marx Университете, там большинство хостов подключены к только одному или двум подсетям. Если Вы разрешаете SNARL, ядро будет предполагать что все подсети местные и используют большие пакеты при разговоре с всеми хостами в университетском городке. Если Вы хотите использовать меньшие размеры пакетов для данных посланных определенным хостам (потому что, например, данные проходят через SLIP связь), Вы можете cделать это используя mtu опции маршрутизации, которые кратко обсуждены в конце этой главы. Disable NAGLE algorithm (normally enabled) (CONFIG TCP NAGLE OFF) [n] Правила Nagle используются чтобы избежать посылки маленьких IP - 62 - пакетов, также названные tinygrams. Tinygrams обычно создаются диалоговыми сетевыми программами, которые передают отдельные символы, типа telnet или rsh. Tinygrams может стать особенно неудобными при связи по узкополосным линиям. Nagle алгоритм пытается избегать их сдерживая при некоторых обстоятельствах передачу TCP данных. Вам стоит отключить Nalge алгоритм, только если у вас есть серьезные проблемы с получением пакетов. The IPX protocol (CONFIG IPX) [n] Это опция включает поддержку IPX, транспортный протокол используемый Novell сетями. Он все еще в разработке и не очень полезен. Единственная польза -- обмен данными с IPX утилитами DOS и передача данных между вашими novell сетями через PPP связь. Поддержка протоколов высокого уровня для Novell сети в обозримом будущем не будет, так как спецификации бесплатно не достать. В ядре 1.1.16, Linux поддерживается еще один тип драйвера, dummy driver (фиктивный драйвер). Следующий вопрос появляется в начале секции драйверов устройств. Dummy net driver support (CONFIG DUMMY) [y] Фиктивный драйвер в действительности делает немного, но весьма полезен на автономном или SLIP хосте. Это в основном замаскированный loopback интерфейс. Этот вид интерфейса нужен на хостах, которые имеют SLIP но не имеют Ethernet, но хотят иметь интерфейс, который все время держит ваш IP адрес. Чуть больше он обсуждается в секции 6.7.7 в главе 6 .. 4.3. Путешествие по сетевым устройствам Linux Linux ядро поддерживает несколько драйверов для различных типов оборудования. Эта секция дает краткий обзор семейств доступных драйверов, и имен интерфейсов, используемых для них. В Linux имеются ряд стандартных имен интерфейсов, которые описаны ниже. Большинство драйверов поддерживают больше чем один интерфейс, - 63 - тогда интерфейсы перечисляются как в eth0, eth1, и т.д.. lo локальный интерфейс для loopback. Он используется для отладки, а также парой сетевых приложений. Он работает подобно замкнутому циклу, возвращая все дэйтаграмы, переданные ему, сетевому уровню того же хоста. В ядре имеется всего одно loopback устройство, и нет большого смысла в наличии меньшего или большего количества. ethn n-ая Ethernet карта. Это имя интерфейса генерируется для большенства Ethernet плат. dln Это интерфейс доступа к D-Link DE-600 пакетному адаптеру (другое Ethernet устройство). Разница в том, что DE-600 работает через параллельный порт. sln n-ый SLIP интерфейс. Первая последовательная линия отконфигурируемая под SLIP становится sl0, и т.д.. Ядро поддерживает до четырех SLIP интерфейсов. pppn n-ый PPP интерфейс. Подобно SLIP интерфейсам, PPP интерфейс связан с последовательной линией, если только она отконфигурирована для PPP. В настоящее время поддерживается до четырех интерфейсов. plipn n-ый PLIP интерфейс. PLIP транспортирует IP дэйтаграмы по параллельным линиям. Поддерживается до трех PLIP интерфейсов. Они устанавливаются PLIP драйвером при загрузке системы, и отображают параллельные порты. Для других драйверов интерфейса, которые могут быть добавлены в будущем, подобно ISDN или AX.25, будут предоставлены другие имена. В следующих секциях, мы будем обсуждать детали использования драйверов описанных выше. 4.4. Установка Ethernet - 64 - Сейчас Linux поддерживает различные марки Ethernet карт. Больше всего драйверов были написаны Donald Becker (becker@super.org). Он автор семейства драйверов для карт основанных на National Semiconductor 8390 чипе; они стали известными как серия Becker драйверов. Имеются также драйвера для пары изделий для D-Link, среди них D-Link адаптер, который предлагает доступ к Ethernet через паралельный порт. Драйвер для этот был написан Bjrn Ekwall (bj0rn@blox.se). DEPCA драйвер был написан David C. Davies (davies@wanton.lkg.dec.com). 4.4.1. Прокладка Ethernet кабеля. Если вы устанавливаете Ethernet впервые в вашей жизни, несколько сказанных здесь слов могут быть вам полезны. Ethernet - очень чувсвителен к правельности прокладки кабеля. Кабель должен с обоих концов закрыватся 50 Омным резистором и не каких ответвлений. Если Вы используете тонкий кабель с T-образными BNC переходами, эти переходы должны быть вкручены непосредственно в плату. Если Вы используете толстый кабель, Вы должны присоеденять ваш хост через transceiver. Вы можете воткнуть transceiver непосредственно AUI порт на вашей плате, но можете также использовать кусок кабеля. 4.4.2. Поддержка платы Полный список поддерживаемых плат доступен в Ethernet HOWTOs расположенных на comp.os.linux.announce Paul Gortmaker. Вот список наиболее широко известных платы, поддерживаемых Linux. Полный список в HOWTO приблизительно в три раза длиннее. Однако, даже если Вы нашли вашу плату в этом списке, проверите сначала HOWTO; иногда существуют важные детали относительно работы этих карт. На пример, некоторые DMA-основанные Ethernet платы используют тот же самый DMA канал что и Adaptec 1542 SCSI контролер. Если Вы не переместите один из них на другой DMA канал, не удивляйтесь, что ваша Ethernet плата пишет данные в произвольные места вашего жесткого диска. - 65 - 3Com EtherLink поддерживаются и 3c503 и 3c503/16, как - 3c507 и 3c509. 3c501 также поддерживается, но слишком медленна, чтобы ее покупать. Novell Eagle NE1000 и NE2000, и разнообразные клоны. NE1500 и NE2100 также поддерживаются. Western Digital/SMC WD8003 и WD8013 ( то же самое что SMC Elite и SMC Elite Plus) поддержана также и более новая SMC Elite 16 Ultra. Hewlett Packard HP 27252, HP 27247B и HP J2405A. D-Link DE-600 pocket adaptor, DE-100, DE-200, и DE-220-T.. Имеется также комплект для DE-650-T, который является PCMCIA картой. (4) DEC DE200 (32K/64K), DE202, DE100, и DEPCA rev E. Allied Teliesis AT1500 and AT1700. Чтобы использовать одну из этих карт, Вы можете использовать ядро от одной из главных Linux дистрибуций. Они вообще имеют драйвера для всех из них. Однако, лучше собрать ваше собственное ядро и собирать с единственном драйвером, в котором Вы фактически нуждаетесь. 4.4.3. Автоматическое определение Ethernet Во время загрузки, Linux попробует найти вашу плату и определить ее тип. Карты ищутся по следующим адресам и в следующем порядке: ------------------------------------------------------ +--------------+-------------------------------------+ |карта | адреса поиска | +--------------+-------------------------------------+ |WD/SMC | 0x300, 0x280, 0x380, 0x240 | - 66 - |SMC 16 Ultra | 0x300, 0x280 | |3c501 | 0x280 | |3c503 | 0x300, 0x310, 0x330, 0x350, 0x250, | | | 0x280, 0x2a0, 0x2e0 | |NEx000 | 0x300, 0x280, 0x320, 0x340, 0x360 | |HP | 0x300, 0x320, 0x340, 0x280, 0x2C0, | | | 0x200, 0x240 | |DEPCA | 0x300, 0x320, 0x340, 0x360 | +--------------+-------------------------------------+ +--------------+-------------------------------------+ Имеются два ограничения autoprobing. Во первых, он может не распознавать все платы должным образом. Это особенно касается некоторых из дешевых клонов известных плат, а также для некоторых WD80x3 плат. Вторая проблема состoит в том, что ядро находит не больше одной платы. Если Вы используете больше чем одну плату, или если autoprobe не в состоянии обнаружить вашу плату, Вы должны явно сообщить ядру основной адреса карты и имя. В Net-3, для этого Вы может использовать две различных схемы Один путь состoит в том, чтобы изменить или добавить информацию в файл drivers/net/Space.c в исходном коде ядра, который содержит всю информацию относительно драйверов. Это рекомендуются только, если Вы знакомы с сетевым кодом. Лучший путь состoит в том, чтобы обеспечить ядро этой информацией при загрузке. Если Вы используете lilo для загрузки вашей системы, Вы можете передавать параметры ядру, определяя их через опцию в lilo.conf. Чтобы сообщить ядру о Ethernet устройстве, Вы можете передавать следующий параметр: ether=irq,base addr,param1,param2,name Первые четыре параметра числовые, в то время как последний - имя устройства. Все числовые значения необязательные; если они опущены или равны нолю, ядро будет пробовать само обнаружить эти значения или использует значение установленное по умолчанию. Первый параметр устанавливает IRQ для устройства. Если он не указан, ядро будет пробовать обнаружить IRQ канал само. 3c503 драйвер - 67 - имеет специальную особенность, которая позволяет ему выбирать свободный IRQ (из 5, 9, 3, 4) и конфигурировать плату для использования этой линии. addr параметр задает основной адрес ввода-вывода платы; значение ноль сообщает ядру исследовать адреса внесенные в следующий список. Следующие два параметра могут использоваться по-разному различными драйверами. Для плат с разделяемой памятью типа WD80x3, они определяют начальный и конечный адреса разделенной области памяти. Другие карты обычно используют param1 чтобы устанавливать уровень отладочной информации. От 1 до 7 обозначают увеличивающиеся уровни подробности, в то время как 8 выключает их; 0 обозначает значение установленное по умолчанию. 3c503 драйвер использует param2 чтобы выбрать внутренний transceiver (установленный по умолчанию) или внешний transceiver ( значение 1). Первый использует BNC; последний -- AUI порт. Если Вы имеете две Ethernet платы, Вы можете одну плату определять автоматически, а параметры второй платы с помощью lilo. Однако, Вы должны удостоверился, что драйвер случайно не находит вторую плату, в то время как первая не будет регистрироваться вообще. Это можно сделать, указывая в lilo избегать исследовать пространство ввода-вывода занятое второй платой. Например, прося Linux установить вторую Ethernet плату в 0x300 как eth1, Вы бы передали следующие параметры к ядру: Reserve=0x300,32 ether=0,0x300, eth1 reserve опция требует чтобы никакие драйверы не трогали при исследование пространство ввода-вывода некоторого устройства. Вы можете также использовать параметры ядра для управления авто поиском: Reserve=0x340,32 ether=0,0x340, eth0 Чтобы выключить autoprobing вообще, Вы можете определить addr в -1: - 68 - Ether=0,-1, eth0 4.5. PLIP Драйвер PLIP основан на IP для параллельных линий и используется, если необходимо соединить две машины. Он использует параллельный порт и специальный кабель и позволяет достигать скоростей от 10Кбит/cек до 20Кбит/сек. PLIP был первоначально разработан компанией Crynwr. Довольно оригинальный проект: в течение длительного времени параллельные порты в PC использовались в основном для принтеров; то есть восемь линий использовались только чтобы послать данные с PC на периферийное устройство и никуда больше. PLIP работает, обходя это ограничение, используя пять линий состояний порта для ввода, что позволяет передавать по пол-байта за раз между машинами. Этот режим работы называется mode zero PLIP (0 способ PLIP). Сегодня, эти однонаправленные порты кажется больше нигде не используются. Поэтому, имеется также PLIP расширение, названное способом 1 который использует полный 8 разрядный интерфейс. В настоящее время, только Linux поддерживает 0 способ. В отличии От более ранних версий PLIP, теперь он пытается быть совместимым с PLIP сделанным на Crynwr, а также PLIP драйвером в NCSA telnet. Чтобы соединить две машины использующие PLIP, Вам требуется специальный кабель -- "Null Printer" или "Turbo Laplink" кабель. Вы можете сделать его и сами. Приложение 20.3 описывает как. РLIP поддерживало большое количество людей. В настоящее время его поддерживает Niibe Yutaka. Если PLIP компилируется в ядро, он устанавливает сетевой интерфейс для каждого из возможных портов принтера, plip0 соответствует параллельному порту lp0, plip1 -- lp1, и т.д.. В настоящее время интерфейсы отображаются на порты следующим образом: - 69 - -------------------------------- +-----------+-----------+------+ | Интерфейс | I/O порт | IRQ | +-----------+-----------+------+ |plip0 | 0x3BC | 7 | |plip1 | 0x378 | 7 | |plip2 | 0x278 | 5 | +-----------+-----------+------+ +-----------+-----------+------+ Если Вы отконфигурировали ваш порт принтера по-другому, Вы должны изменить эти значения в drivers/net/Space.c в исходниках ядра Linux, и собрать новое ядро. Этот отображение не означает, однако, что Вы не можете использовать эти параллельные порты как обычные. PLIP драйвер обращается к ним только, когда соответствующий интерфейс отконфигурирован. 4.6. SLIP и PPP Драйвера SLIP (Serial Line IP), и PPP ( Point-to-Point Протокол ) - широко используемые протоколы для посылки IP пакетов через последовательное соединение. Ряд учреждений предлагают телефонный SLIP и PPP доступ на машины которые находятся в Internet, таким образом обеспечивая IP частным лицам. Чтобы запустить SLIP или PPP, не требуется модификации аппаратных средств. Вы можете использовать любой последовательный порт. Более подробно об этом написано в главе 5. . - 70 - 5. Установка последовательных аппаратных средств Ходят слухи, что где-то там существуют люди, которые имеют только один PC и не имеют денег на T1 Internet соединение. Чтобы получить свою ежедневную дозу новостей и почты, они полагаются на SLIP связь, UUCP сети, и системы информационных табло (BBS), которые используют телефонные сети. Эта глава написана для всех тех людей, кто полагается на модемы. Однако, существует большое количество деталей, в которые мы не будем вдаваться, например как конфигурировать ваш модем. Все эти темы будут охвачены в создающемся Serial HOWTO Greg Hankins, который регулярно отправляется по почте к comp.os.linux.announce. 5.1. Коммуникационное программного обеспечения для модемной связи Имеются ряд коммуникационных пакетов доступных для Linux. Многие из них -- это терминальные программы, которые позволяют пользователю на брать номер другого компьютера и работать как будто Вы сидите перед простым терминалом. Традиционная терминальная программа для Unix -- kermit. Имеются более удобные программы, которые поддерживают список телефонных номеров, языки для написания скриптов запросов и описания входа в удаленные системы, и т.д.. Один из них -- minicom, который близок к некоторый терминальным программам для DOS. Имеются также Х-основанные пакеты коммуникаций, например seyon. Также, доступны несколько linux-основанных BBS пакетов для людей, которые хотят управлять системой информационных табло. Некоторые из этих пакетов могут быть найдены на sunsite.unc.edu в /pub/Linux/system/Network. Кроме терминальных программ, имеется также программное обеспечение, которое использует последовательную связь в не - 71 - интерактивном режиме для транспортировки данных к или от вашего компьютера. Преимущество этой техники в том, что требуется гораздо меньше времени, чтобы загрузить несколько дюжины килобайт автоматически, чем это мог бы отнять у Вас при чтении вашей почты интерактивно в некотором почтовом ящике на удаленной машине или при просмотре интересной информации на BBS. С другой стороны, она требует больше места на диске из-за большого количества бесполезной информации, которую Вы обычно получаете. Основной представитель этого вида программного обеспечения -- UUCP. UUCP -- это набор программы, которые позволяют копировать файлы с одного хоста на другой, выполнять программы на отдаленном хосте, и т.д.. Он часто используется для транспортировки почты или новостей в частных сетях. Ian Taylor's UUCP пакет, который работает под Linux, описан в следующей главе. Но есть и другое недиалоговое комуникационное программное обеспечение, например, используемое в Fido. Порты Fido приложений подобно ifmail также доступны. SLIP находится где-то посередине и используется как диалоговыми так и не-диалоговыми приложениями. Множество людей используют SLIP чтобы дозвонится до университетской сети или какого-либо другого общественного SLIP сервера, чтобы управлять FTP сессиями, и т.д.. SLIP может также использоваться для постоянной или полупостоянной связи сеть-сеть, хотя здесь полезен скорее ISDN. 5.2. Представления последовательных устройств Unix ядро обеспечивает обращение к последовательным устройствам, названым ttys. Это - сокращение от названия компании Teletype(tm), которая в прошлом был одним из основных изготовителей терминалов. Этот термин используется в настоящее время для любого основоного на символьных данных устройства. Повсюду в этой главе, мы будем использовать этот термин исключительно по отношению к устройствам ядра. В Linux существует три класса tty: (виртуальные) консоли, псевдо терминалы (подобные дуплексному каналу, используемому приложениями - 72 - типа X11) и последовательные устройства. Последние также причисляется к ttys, потому что они позволяют создавать диалоговые сессии по последовательной связи; будь то интенсивно-зашитый терминал или удаленный компьютер соединенный с данным по телефонной линии. Ttys имеют ряд конфигурируемых параметров которые могут быть установлены с помощью ioctl запроса. Многие из них применяются только для последовательных устройств, так как они нуждаются в большой гибкости для того, чтобы работать с изменяющимися типами соединений. Среди наиболее видных параметров линии -- скорость линии и паритет. Но имеются также флаги для преобразования между верхним и нижним регистрами символов, и т.п. Tty драйвер может также поддерживать различные опции линии, которые заставляют драйвер вести себя совершенно по разному. На пример, SLIP драйвер для Linux может представляется в терминах специальных дисциплин. Существует также некоторая двусмысленность относительно того как измерять скорость линии. Правильно - bit rate(побитовое измерение), которое связано со скоростью линии измеренной в битах за секунду (или bps для краткости). Иногда, люди называют это Бод (Baud), что тоже верно. Эти два термина, однако, не взаимозаменяемы. Бод относит к физической характеристике некоторого последовательного устройства, а именно время за которое произошла передача импульса. Битовое измерение обозначает текущее состояние существующей последовательной связи между двумя точками, а именно средний число битов переданных за секунду. Важно знать что эти два значения обычно различны, поскольку большинство устройств кодируют больше чем один бит за электрический импульс. 5.3. Доступ к последовательным устройствам Подобно всем устройствам в Unix системах, последовательные порты доступны через специальные файлы, располагающиеся в директории /dev. Имеются два множества файлов устройств, связанных с последовательными драйверами, и для каждого порта, имеется один файл из каждого множества. В зависимости от файла к которому обращаются, устройство будет вести себя по-разному. - 73 - Первые файлы требуются в случае, если порт используется для входа; они имеет главный номер 4, и файлы названы ttyS0, ttyS1, и т.д.. Вторые используется для выхода; файлы названы cua0, и т.д., и имеют главный номер 5. Незначительные номера одинаковы для обоих типов. Если ваш модем подключен к одному из портов от COM1 до COM4, незначительный номер будет номер COM порта плюс 63. Если ваша установка отлична от этой, например при использовании платы поддерживающей множество последовательных линий, пожалуйста обратитесь к Serial Howto. Предположим, что ваш модем находится на COM2. Таким образом незначительный номер будет 65, а главный номер для дозвона будет 5. Следовательно, должно иметься устройство cua1 которое имеет этот номер. Просмотрите список последовательный ttys в директрорие /dev. Колонки 5 и 6 должны показать главные и незначительные номера, соответственно: $ ls -l /dev/cua* crw-rw-rw- 1 root root 5, 64 Nov 30 19:31 /dev/cua0 crw-rw-rw- 1 root root 5, 65 Nov 30 22:08 /dev/cua1 crw-rw-rw- 1 root root 5, 66 Oct 28 11:56 /dev/cua2 crw-rw-rw- 1 root root 5, 67 Mar 19 1992 /dev/cua3 Если нет таких устройств, Вы должны создать их: войдите супер-пользователем и наберите # mknod -m 666 /dev/cua1 c 5 65 # chown root.root /dev/cua1 Некоторые Люди предлагают создание символической связи /dev/modem на ваше устройство модема, так, чтобы случайные пользователи не должны были запоминать несколько неинтуитивное cua1. Однако, Вы не можете использовать modem в одной программе, а реальное название файла устройства в другой. Это - потому что эти программы используют так называемые файлы замка (lock files) для обозначения того, что устройство используется. В соответствии с соглашением, имя файла замка для cua1, например, является LCK..cua1. Использование различных файлов - 74 - устройства для того же самого порта приведет к тому, что программы окажутся не в состоянии распознавать файлы замка для каждого имени, и будут и использовать устройство в одно и то же время. В результате, оба приложения не будут работать вообще. 5.4. Аппаратные Средства для последовательных линий. Linux в настоящее время поддерживает разнообразные последовательные платы, которые используют стандарт RS-232. RS-232 в настоящее время наиболее общий стандарт для последовательных коммуникаций в мире PC. Хотя аппаратные средства 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. (Чтобы проверить, используется ли маршрут, который Вы ввели, посмотрите на поле 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 Конечно, любой хост в сети Винодельни, с которым вы желаете - 91 - поговорить должен иметь соответствующую запись в таблице маршрутизации для Сети Пивоварни, иначе Вы были бы способны только послать данные с 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 адрес, и это все. Весьма полезно добавлять информацию относительно двух интерфейсов к файлу хостов путем показанным ниже, так чтобы иметь удобные имена для них: - 92 - 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: - 93 - # 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. - 94 - 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 адрес который - 95 - требуется назначить для интерфейса. Это может быть или 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 с соответствующими названиями флага, данными в скобках. Опция которая просто включает некоторую особенность также позволяют выключать ее, если названию опции предшествует (-). - 96 - 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 демона, Вы не нуждаетесь в этой опции вообще; если используете, - 97 - Вы редко должны будете изменять это значение. 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 адреса -- некоторый вид широковещательных адресов позволяющих обращаться к группе хостов, которые не обязательно должны - 98 - быть на той же самой подсети. 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 и лишь за тем сравнивает результат с целью маршрута. - 99 - Четвертая колонка показывает различные флаги, которые описывают маршрут: 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 колонки показывают сколько пакетов были - 100 - получены или переданы без ошибок (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) - 101 - 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 может выдать - 102 - # 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 - 103 - интерфейс. Теперь когда хост посылает 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, - 104 - которая будет устанавливать Максимальный размер пакета для определенного маршрута. Этот маршруто-определенный 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. . - 105 - 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, может включать различные драйверы для - 106 - любого из вышеперечисленного, и нуждается в особой осторожности. 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 (см. выше) будут - 107 - причинами того, чтобы решающее устройство отправило бы сообщение к 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, отделенны пробелом, запятой, двоеточием, или точкой с запятой. - 108 - 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. 7.1.3 Конфигурирование сервера поиска --- resolv.conf При конфигурировании библиотеки решающего устройства, для того чтобы использовать BIND обслуживание для поиска хостов, вы обязательно должны сообщить, какое имя сервера вы используете. Существует отдельный файл, предназначенный специально для этого, называемый resolv.conf. Если этот файл не существует или пуст, то решающее устройство примет имя сервера, определенного для вашего локального хоста.Если Вы запускаете сервер на Вашем локальном хосте, то Вы должны установить это имя отдельно, как это сделать, будет объяснено позже в следующем разделе. Если в локальпой уети есть возможность использовать существующее имя сервера, то этому должно отдаваться предпочтение. Самая важная опция в resolv.conf - nameserver, которая дает IP адрес используемого сервера. Если Вы определите несколько имен серверов используя nameserver опцию несколько раз, то они будут проверяться в данном порядке. Поэтому Вы должны поместить наиболее надежный сервер первым. Постоянно, могут поддерживаться не более трех серверов. Если опция nameserver не дана, то решающее устройство попытается - 109 - соединиться с сервером на локальном хосте. Две других опции, domain и search имеют дело с заданными по умолчанию областями, которые беруться из имени хоста, если BIND не может решить это с первого запроса. Опция search определяет список названий областей, которые необходимо проверить. Пункты списка отделены пробелом или табуляцией. Если опция search не дана, то заданный по умолчанию список поиска создается из локального имени области, используя само название области непосредственно, плюс все родительские области вплоть до root. Локальное название области может быть дано при использовании оператора области; если ни один из них не дан, то решающее устройство получит его через getdomainname(2) системный вызов. Если это уж слишком для вас, рассмотрите пример resolv.conf файла для Virtual Brewery: # /etc/resolv.conf # Our domain domain vbrew.com # # We use vl