Конфигурация интерфейса для IP

После установки аппаратных средств, как было объяснено в предыдущей главе, Вы должны дать знать об этом сетевому программному обеспечению. Пара команд используются чтобы конфигурировать сетевые интерфейсы, и инициализировать таблицу маршрутизации. Эти задачи выполняются обычно в rc.inet1 скрипте, при загрузке системы. Эти команды называются ifconfig ( где "если" относится к интерфейсу ), и route.

ifconfig используется чтобы сделать интерфейс доступным для ядра, что включает в себя назначение IP адреса и других параметров и формирование интерфейса, также известное как "taking up". Активность означает, что ядро будет посылать и получить IP datagrams через интерфейс. Самый простой путь установки

# ifconfig interface ip-address

Который связывает ip-адрес с интерфейсом и активирует его. Все другие параметры устанавливаются по умолчанию Например, маска подсети установленная по умолчанию получена из сетевого класса IP адреса, типа 255.255.0.0 для класса B адрес. ifconfig описан более подробно в конце этой главы.

route позволяет Вам добавлять или устранять маршруты из таблицы маршрутизации. Это может быть использовано так

route [add|del] target

Где add и del аргументы определяют добавлять или удалять маршрут к таблице.

Интерфейс loopback

Сам первый интерфейс который нужно сформировать и активизировать -- интерфейс loopback:

# ifconfig lo 127.0.0.1

Иногда, Вы будете также видеть фиктивное имя localhost используемое вместо IP адреса. ifconfig будет искать имя в hosts файле, где должна быть запись, объявляющая его как имя для 127.0.0.1:

# Sample /etc/hosts entry for localhost localhost 127.0.0.1

Чтобы просмотреть информацию о конфигурации интерфейса, Вы можете вызвать ifconfig передав как аргумент имя интерфейса:

$ ifconfig lo

lo Link encap Local Loopback

inet addr 127.0.0.1 Bcast [NONE SET] Mask 255.0.0.0

UP BROADCAST LOOPBACK RUNNING MTU 2000 Metric 1

RX packets 0 errors 0 dropped 0 overrun 0

TX packets 0 errors 0 dropped 0 overrun 0

Как Вы можете видеть, интерфейс loopback получил netmask равную 255.0.0.0, так как 127.0.0.1 -- адрес A класса. Вы можете также увидеть, что интерфейс не имеет множества общевещательных адресов, который вообще-то бесполезны для loopback. Однако, если Вы используете rwhod демона на вашем хосте, Вы возможно будете должны установить широковещательный адрес loopback для того чтобы rwho функционировал должным образом. Установка этого адреса объясняется в секции "Все о ifconfig".

Теперь, Вы можете начать играть с вашей мини-"сетью". Единственное чего не хватает -- это запись в таблице маршрутизации, которая говорит IP, что этот интерфейс как маршрут к месту назначения 127.0.0.1. Это делается с помощью следующей команды

# route add 127.0.0.1

Здесь, тоже можно использовать localhost вместо IP адреса. Затем, Вы должны проверить правильность работы, например, используя ping. ping - сетевой эквивалент звукового(sonar) устройства и используется для проверки того доступен ли данный IP адрес, и измерения интервала времени между посылкой дэйтаграмы и получением ответа. Время требуемое для этого часто называется roundtrip time.

# ping localhost

PING localhost (127.0.0.1):

56 data bytes 64 bytes from 127.0.0.1: icmp seq=0 ttl=32 time=1 ms

64 bytes from 127.0.0.1: icmp seq=1 ttl=32 time=0 ms

64 bytes from 127.0.0.1: icmp seq=2 ttl=32 time=0 ms

^C --- localhost ping statistics ---

3 packets transmitted, 3 packets received, 0% packet loss round-trip min/avg/max = 0/0/1 ms

При вызове ping, он будет продолжать испускать пакеты пока не будет прервано пользователем. ^C отмечает место где мы нажали Ctrl-C. Вышеупомянутый пример показывает, что пакеты доставлены к 127.0.0.1 и ответ пришел к ping почти мгновенно. Это показывает что Вы преуспели во введении вашего первого сетевого интерфейса. Если вывод который Вы получаете от ping не походит на показанный выше, Вы нарвались на неприятности. Проверите ошибки в установочных файлах. Проверите чтобы ifconfig и маршрутизирующие приложения, которые вы используете, были совместимы с ядром, которым Вы пользуетесь и, вообще, что ядро компилировалось с разрешенной сетью (Вы увидите это по отсутствию директории /proc/net ). Если Вы получаете сообщение об ошибки, говорящее "Network unreachable" ,тогда вероятно вы не правильно использовали команду route. Удостоверитесь что Вы используете тот же самый адрес, что Вы дали ifconfig.

Шагов описанных выше достаточно чтобы использовать сетевые приложения на автономном хосте. После добавления вышеупомянутых строк к rc.inet1 и проверки, что оба rc.inet скрипта запускаются из /etc/rc, Вы можете перезагрузить вашу машину и попытаться использовать различные приложения. Например, "telnet localhost" должен установить telnet соединение с вашем хостом.

Однако, интерфейс loopback полезен не только как пример в книгах о сетях , или как система отладки, но фактически используется некоторыми приложениями в течение нормальной работы. Поэтому, Вы всегда должны конфигурировать его, независимо от того присоединена ли ваша машина к сети или нет.

Ethernet интерфейсы

Конфигурирование интерфейса Ethernet, идет почти также как и интерфейса loopback, он только требует больше параметров когда Вы используете подсети.

В Виртуальной Пивоварне, мы разбивали на подсети IP сеть, которая была первоначально класс B. При установке интерфейса для требовалось бы написать:

# ifconfig eth0 vstout netmask 255.255.255.0

Эта запись назначает eth0 интерфейсу IP адрес vstout (191.72.1.2). Если бы мы опустили netmask, ifconfig вывел бы netmask из класса сети, что привело бы к netmask 255.255.0.0. Теперь быстренько проверим:

# ifconfig eth0

eth0 Link encap 10Mps Ethernet HWaddr 00:00:C0:90:B3:42

inet addr 191.72.1.2 Bcast 191.72.1.255 Mask 255.255.255.0

UP BROADCAST RUNNING MTU 1500 Metric 1

RX packets 0 errors 0 dropped 0 overrun 0 TX packets 0 errors 0 dropped 0 overrun 0

Вы можете видеть что ifconfig автоматически устанавливает широковещательный адрес (поле Bcast) равный обычному значению, которое является номером сети хостов с битами хоста равными 1. Также, размер передаваемых сообщений (для данного интерфейса устанавливается максимальный размер Ethernet пакета) был установлен равным максимальному значению 1500 байтов. Все эти значения могут быть исправлены специальными опциями, которые было описаны позже.

Также как в loopback случае, Вы должны теперь установить маршрутизационную запись, которая сообщает ядру о сети, которая может быть достигнута через eth0. Для Виртуальной Пивоварни, Вы это сделали бы так

# route add -net 191.72.1.0

Сначала это смотрится как волшебство, потому что это действительно не очевидно как route обнаруживает, которые сети связываются с помощью каких интерфейсов. Однако, уловка довольно проста: ядро проверяет все интерфейсы которые были отконфигурированы и сравнивает адрес места назначения (в этом случае 191.72.1.0) с сетевой частью адреса интерфейса. Единственный интерфейс, который соответствует данному адресу, -- eth0.

Теперь, что такое -net опция? Она используется, потому что route может работать с маршрутами к сетям и с маршрутам к отдельным хостам (как Вы видели в localhost). Когда route получает адрес в dotted quad стандарте, он пытается предположить принадлежит ли этот адрес сети или хосту, проверяя биты части хоста. Если хост часть адреса - ноль, маршрут предполагает, что это обозначает сеть, в противном случае, что это адрес хоста.

Поэтому, route решил бы, что 191.72.1.0 - адрес хоста, потому что он не может знать что мы используем подсети. Поэтому мы должны явно сообщить, что это адрес сети, это делает -net флаг.

Конечно, вышеупомянутая команда, немного утомительна для набора и дает много ошибок. Более удобный подход -- использование сетевых имен, которые мы определили в /etc/networks. Это делает команду еще более удобочитаемой; и даже -net флаг может быть теперь опущен, потому что route теперь знает, что 191.72.1.0 обозначает сеть.

# route add brew-net Теперь, когда вы закончили основные шаги конфигурации, надо удостовериться что ваш Ethernet интерфейс действительно работает правильно Выберите хост на вашем Ethernet, например vlager, и наберите

# ping vlager PING

vlager: 64 byte packets 64 bytes from 191.72.1.1: icmp seq=0. time=11. ms

64 bytes from 191.72.1.1: icmp seq=1. time=7. ms 64 bytes from 191.72.1.1: icmp seq=2. time=12. ms 64 bytes from 191.72.1.1: icmp seq=3. time=3. ms ^C

----vstout.vbrew.com PING Statistics----

4 packets transmitted, 4 packets received, 0% packet loss round-trip (ms) min/avg/max = 3/8/12 Если Вы не видите вывод подобный этому, значит что-то не так. Если Вы сталкиваетесь с необычным количеством потерянных пакетов, это означает проблему аппаратных средств, типа плохого или отсутствующего terminator, и т.д.. Если Вы не получаете пакеты вообще, Вы должны проверить конфигурацию интерфейса с помощью netstat. Пакетная статистика, показанная ifconfig, должна сообщить Вам были ли вообще посланы какие-то пакеты. Если у вас есть доступ к удаленному хосту, Вы должны сходить к той машине и проверять там статистику интерфейса. Таким образом, Вы можете точно решить, где пропали пакеты. Кроме того, Вы должны посмотреть маршрутизационную информацию с помощью route, чтобы выяснить имеют ли оба хоста правильные записи в таблице маршрутов. route печатает всю таблицу маршрутизации, если его вызвать без аргументов( -n опция указывает печатать вместо адресов имена хостов):

# route -n

Kernel routing table Destination Gateway Genmask Flags Metric Ref Use Iface

127.0.0.1 * 255.255.255.255 UH 1 0 112 lo 191.72.1.0 * 255.255.255.0 U 1 0 10 eth0

Колонка 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.

Маршрутизация через Gateway

В предыдущей секции, Я охватил только случай введения хоста с единственным Ethernet. Достаточно часто, однако, мы сталкивается с сетями, соединенными с помощью gateway. Этот gateway может просто связывать два или больше Ethernet, а может обеспечить связь с внешним миром, (например с Internet). Чтобы использовать gateway сервис, Вы должны обеспечить сетевому уровню дополнительную информацию о маршрутизации.

Например, Ethernet Виртуальной Пивоварни и Виртуальной Винодельни связаны через такой gateway, а именно хост vlager. Предположим, что vlager уже был отконфигурирован, и нам осталось только добавить новую запись в таблицу маршрутизации vstout, которая сообщает его ядру что он может достигнуть всех хостов на Сети Винодельни через vlager. Соответствующее описание маршрута показывается ниже; gw ключевое слово, которое сообщает что следующий аргумент обозначает gateway. # route add wine-net gw vlager

Конечно, любой хост в сети Винодельни, с которым вы желаете поговорить должен иметь соответствующую запись в таблице маршрутизации для Сети Пивоварни, иначе Вы были бы способны только послать данные с vstout на vbardolino, но ответа вы не получите.

Этот пример описывает только gateway который переключает пакеты между двумя изолированными Ethernet. Теперь предположите что vlager также имеет соединение с Internet ( работающее через дополнительную SLIP связь). Тогда мы хотели бы чтобы дэйтаграмы для любой сети, отличной от Пивоваренной, передавались vlager. Это может быть выполнено с помощью установки gateway по умолчанию для vstout: # route add default gw vlager

Сетевое имя default(по умолчанию) связано с адресом 0.0.0.0, что обозначает маршрут установленный по умолчанию. Вы не должны добавлять это имя к /etc/networks, потому что это построено в route.

Если, используя ping, Вы обнаружили большой процент потери пакетов при их проходе через несколько gateway, это может говорить о очень большой нагрузке на сеть. Потеря пакетов в основном происходит не из-за техническим проблемам, а скорее благодаря временной избыточной нагрузке на направляющие хосты, которые из-за этого задерживают или даже выбрасывают поступающие дэйтаграмы.

Конфигурирование Gateway

Отконфигурировать машину для передачи пакетов между двумя Ethernet довольно просто. Вернемся к vlager, который оборудован двумя Ethernet платами, каждая из них связанна с одной из двух сетей. Все, что Вы должны сделать отконфигурировать оба интерфейса отдельно, дав им их соответствующий IP адрес, и это все. Весьма полезно добавлять информацию относительно двух интерфейсов к файлу хостов путем показанным ниже, так чтобы иметь удобные имена для них:

191.72.1.1 vlager vlager.vbrew.com

191.72.1.1 vlager-if1 191.72.2.1 vlager-if2

Последовательность команд для создания двух интерфейсов:

# ifconfig eth0 vlager-if1

# ifconfig eth1 vlager-if2

# route add brew-net

# riute add wine-net

PLIP интерфейс

При использовании PLIP связи для соединения двух машин, существуют лишь небольшие отличия от того, что Вы должны делать при использовании Ethernet. Вышеупомянутая связь называется point-to-point(точка с точкой) связь, потому что она соединяет только два хоста ("точки"), в противоположность широковещательным сетям.

Как пример, мы рассматриваем laptop компьютер некоторого служащего в Виртуальной Пивоварне, который связана с vlager через PLIP. Laptop непосредственно назван vlite, и имеет только один параллельный порт. В о время загрузки, этот порт будет регистрироваться как plip1. Чтобы сформировать связь, Вы должны отконфигурировать интерфейс plip1, используя следующие команды:

# ifconfig plip1 vlite pointopoint vlager

# route add default gw vlager

Первая команда конфигурирует интерфейс, сообщая ядру, что это point-to-point связь, с удаленной машиной имеющей адрес vlager. Вторая устанавливает маршрут по умолчанию, используя vlager как gateway. На vlager, подобная команда ifconfig необходима чтобы сформировать связь и на vlager:

# ifconfig plip1 vlager pointopoint vlite

Интересно, что интерфейс plip1 на vlager не должен иметь отдельный IP адрес, но если хочется можете дать ему адрес 191.72.1.1.

Теперь, мы отконфигурировали маршрутизацию от laptop до Сети Пивоварни; что но все еще отсутствует маршруту от любого из Хостов Пивоварни к vlite. Особенно тяжелый путь состoит в том, чтобы добавлять определенный маршрут к таблице маршрутизации каждого хоста, который состоит в том чтобы объявить vlager как gateway к vlite:

# route add vlite gw vlager

Гораздо лучше иметь дело с временными маршрутами, используя динамическую маршрутизацию. Один из способов сделать это состoит в запуске gated демона, который Вы должны устанавливать на каждом хосте в сети, чтобы он распространял информацию о маршрутах динамически. Самый легкий путь, однако, состoит в том, чтобы использовать proxy ARP. С proxy ARP, vlager будет отвечать на любой ARP pfпрос для vlite посылая собственный Ethernet адрес. Результат этого то, что все пакеты для vlite будут закачивать на vlager, который будет передавать их на laptop.

Будущие выпуски Net-3 будут содержать инструмент названный plipconfig, который позволит Вам устанавливать IRQ порта принтера. Позже, это может быть заменено более общей командой ifconfig.

SLIP и PPP Интерфейсы

Хотя SLIP и PPP соединения -- всего лишь простые point-to-point связь подобно PLIP соединениям, о них также есть некая дополнительная информация. Обычно, при установке SLIP соединение требуется дозвонится до удаленного участка через ваш модем, и отрегулировать последовательную линию для SLIP способа. PPP используется подобным образом.

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