ользовать сетевые приложения на автономном хосте. После добавления вышеупомянутых строк к 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