Библиотека сайта rus-linux.net
Настройка интерфейса для IP
После установки аппаратных средств, как было объяснено в главе 4, Вы должны дать знать об этом сетевому программному обеспечению. Пара команд используется, чтобы конфигурировать сетевые интерфейсы и инициализировать таблицу маршрутизации. Эти задачи выполняются обычно в скрипте инициализации сети при загрузке системы. Эти команды называются ifconfig и route .
ifconfig
|
Эта команда связывает адрес ip-address
с интерфейсом interface
и активизирует
его. Все остальные параметры устанавливаются по умолчанию. Например, маска
подсети по умолчанию получена из сетевого класса IP-адреса
(255.255.0.0 для класса B).
ifconfig описан более подробно в
конце этой главы.
route [add|del] [-net|-host] target [if] |
Аргументы add
и del
определяют добавлять или удалять маршрут
target
. Аргументы
-net
и -host
определяют тип
маршрута: к сети или к компьютеру (второй вариант принимается по умолчанию).
Аргумент if
определяет, к какому сетевому интерфейсу
относится команда.
Кольцевой интерфейс (Loopback)
#
|
hosts
, где должна быть запись, объявляющая его как
имя для адреса 127.0.0.1:
# Sample /etc/hosts entry for localhost localhost 127.0.0.1 |
$
|
Как Вы можете видеть, интерфейс loopback получил сетевую маску 255.0.0.0, так как адрес 127.0.0.1 принадлежит к классу A.
# route add 127.0.0.1 |
Здесь тоже можно использовать localhost
вместо IP-адреса, если он задан в файле /etc/hosts
.
Затем вы должны проверить правильность работы, например, используя ping. ping сетевой эквивалент звукового устройства и используется для проверки того, доступен ли IP-адрес и измерения интервала времени между посылкой пакета и получением ответа. Время, требуемое для этого, часто называется round-trip time:
#
|
При вызове ping он будет испускать пакеты, пока
пользователь его не остановит. ^C
отмечает место,
где я нажал Ctrl-C для прерывания.
Вышеупомянутый пример показывает, что пакеты доставлены к 127.0.0.1, и ответ пришел к ping почти мгновенно. Это показывает, что вы преуспели во введении вашего первого сетевого интерфейса.
Если вывод который вы получаете от ping не походит
на показанный выше, вы нарвались на неприятности. Проверьте ошибки в
установочных файлах. Проверьте чтобы ifconfig и
route, которые вы используете, были совместимы с
ядром, которым Вы пользуетесь, и что ядро вообще компилировалось с
разрешенной сетью (если сеть запрещена, вы увидите это по отсутствию каталога
/proc/net
). Если Вы получаете сообщение об ошибке,
"Network unreachable", значит вы неправильно использовали команду
route. Удостоверьтесь, что используете тот же самый
адрес, что дали ifconfig.
Описанных выше шагов достаточно, чтобы использовать сетевые приложения на
автономном компьютере. После добавления вышеупомянутых строк к скрипту
запуска, вы можете перезагрузить вашу машину и попытаться использовать
различные приложения. Например, telnet localhost
должен установить telnet-соединение с вашей машиной и
вывести приглашение login:
.
Однако, интерфейс loopback полезен не только как пример в книгах о сетях или как система отладки, он фактически используется некоторыми приложениями в течение нормальной работы. Поэтому вы всегда должны конфигурировать его независимо от того, присоединена ли ваша машина к сети или нет.
Интерфейсы Ethernet
Конфигурирование интерфейса Ethernet, идет почти также, как и интерфейса loopback, он только требует больше параметров когда вы используете подсети.
#
|
eth0
IP-адрес
vstout (172.16.1.2
). Если бы мы опустили netmask, ifconfig вывел
бы netmask из класса сети, что привело бы к неправильной маске подсети
255.255.0.0. Теперь быстренько проверим:
#
|
Вы можете видеть, что ifconfig автоматически устанавливает широковещательный адрес (поле Bcast ), равный обычному значению, которое является номером сети с битами хоста, равными 1. Также размер передаваемых сообщений (для данного интерфейса устанавливается максимальный размер Ethernet-пакета) был установлен равным максимальному значению в 1500 байт. Все эти значения могут быть исправлены специальными опциями, которые описаны ниже.
eth0
. Для Virtual Brewery, это:
#
|
Сначала это смотрится как волшебство, потому что, действительно, не
очевидно, как route обнаруживает, какие сети с какими
интерфейсами связаны. Однако, уловка довольно проста: ядро проверяет все
интерфейсы, которые были отконфигурированы, и сравнивает адрес места
назначения (в этом случае (172.16.1.0) с
сетевой частью адреса интерфейса. Единственный интерфейс, который
соответствует данному адресу, eth0
.
Теперь подумаем, что такое опция -net
? Она
используется, потому что route может работать с
маршрутами к сетям и с маршрутам к отдельным машинам (как вы видели в
localhost). Когда route
получает адрес в стандарте с точками, он пытается предположить,
принадлежит ли этот адрес сети или машине, проверяя биты части машины. Если
эта часть адреса ноль, route предполагает, что он
обозначает сеть, в противном случае, что адрес машины. Поэтому
route решил бы, что
172.16.1.0 означает адрес машины: он не может знать, что мы используем
подсети. Поэтому мы должны явно сообщить, что это адрес сети, что делается
опцией -net
.
/etc/networks
.. Это делает команду
более удобочитаемой. Даже опция -net
может быть
опущена, потому что route теперь знает, что
172.16.1.0 обозначает сеть:
#
|
#
|
-n
указывает печа-
тать вместо адресов имена машин):
#
|
Детальное значение этих полей объясняется ниже.
Колонка Flags содержит список флагов,
устанавливаемых для каждого интерфейса. U
всегда установлен для активных интерфейсов, а H
сообщает, что адрес места назначения обозначает машину (хост). Если
флаг H установлен для маршрута, который вы
считаете сетевым маршрутом, тогда вы должны использовать опцию
-net
с командой route. Чтобы
проверить, используется ли маршрут, который вы ввели, посмотрите на поле
Use, которое находится между двумя
сообщениями ping.
Маршрутизация через шлюз (Gateway)
В предыдущем разделе я рассмотрел только случай введения хоста с единственным Ethernet-интерфейсом. Достаточно часто приходится сталкиваться с сетями, соединенными с помощью gateway. Этот gateway может просто связывать два или больше Ethernet, а может обеспечивать связь с внешним миром (например, с Internet). Чтобы использовать сервис gateway, вы должны обеспечить сетевому уровню дополнительную информацию о маршрутизации.
Например, Ethernet-сети Virtual Brewery и Virtual Winery связаны через такой gateway, а именно хост vlager. Предположим, что vlager уже был отконфигурирован, и нам осталось только добавить новую запись в таблицу маршрутизации vstout, которая сообщает его ядру, что он может достичь всех хостов сети Winery через vlager. Соответствующее описание маршрута показано ниже. Ключевое слово gw сообщает, что следующий аргумент обозначает gateway:
#
|
Конечно, любой хост в сети Winery, с которым вы желаете работать должен иметь соответствующую запись в таблице маршрутизации для сети Brewery, иначе вы сможете только послать данные, но ответа не получите.
#
|
Сетевое имя default (по умолчанию) связано
с адресом 0.0.0.0, что обозначает маршрут,
установленный по умолчанию. Вы не должны добавлять это имя к
/etc/networks
, потому что это построено в
route.
Если используя ping, вы обнаружили большой процент потерь пакетов при их проходе через несколько gateway, это может говорить об очень большой нагрузке на сеть. Потеря пакетов в основном происходит не из-за технических проблем, а скорее, благодаря временной избыточной нагрузке на направляющие хосты, которые из-за этого задерживают или даже выбрасывают поступающие пакеты.
Настройка шлюза
Отконфигурировать машину для передачи пакетов между двумя сетями Ethernet довольно просто. Вернемся к vlager, который оборудован двумя Ethernet-платами, каждая из них связана с одной из двух сетей. Все, что вы должны сделать, это сконфигурировать оба интерфейса отдельно, дав им их IP-адреса.
hosts
путем показанным ниже так, чтобы иметь
удобные имена для них:
172.16.1.1 vlager.vbrew.com vlager vlager-if1 172.16.2.1 vlager-if2 |
# |
Если эта последовательность не работает, проверьте, включена ли в ядре
поддержка IP forwarding. Для этого посмотрите первое число во второй строке
файла /proc/net/snmp
, оно должна быть
1
.
Интерфейс PLIP
При использовании PLIP-связи для соединения двух машин существуют лишь небольшие отличия от того, что вы должны сделать при использовании Ethernet. Вышеупомянутая связь называется point-to-point (точка с точкой), потому что она соединяет только два хоста ("точки") в противоположность широковещательным (broadcast) сетям.
plip1
. Чтобы сформировать связь, Вы должны отконфигурировать интерфейс
plip1
, используя следующие команды:
# |
#
|
Интересно, что интерфейс plip1
на
vlager не обязан иметь отдельный IP-адрес, но
если хочется, можете дать ему адрес 172.16.1.1
.
#
|
Гораздо лучше иметь дело с временными маршрутами, используя динамическую маршрутизацию. Один из способов сделать это состoит в запуске демона gated, который вы должны установить на каждом хосте в сети, чтобы он распространял информацию о маршрутах динамически. Самый легкий путь, однако, состoит в том, чтобы использовать proxy ARP. С proxy ARP vlager будет отвечать на любой ARP-запрос для vlite, посылая собственный Ethernet-адрес. Результат: все пакеты для vlite будут закачивать на vlager, который будет передавать их на laptop. Мы будем возвращаться к proxy ARP позже.
Текущие версии net-tools
имеют утилиту
plipconfig, которая позволяет настроить параметры
PLIP timing. IRQ для порта принтера можно задать командой
ifconfig.
Интерфейсы SLIP и PPP
Хотя SLIP и PPP всего лишь простые point-to-point связи, подобные PLIP-соединениям, о них есть дополнительная информация. Обычно при установке SLIP-соединения требуется дозвониться до удаленной машины через модем и отрегулировать последовательную линию для SLIP. PPP используется подобным образом. Инструменты, требуемые для создания SLIP или PPP-связи, будут описаны в главе 7 и главе 8.
Тупой (Dummy) интерфейс
Фиктивный интерфейс Dummy немного экзотический, но довольно полезный. Он наиболее удобен для автономных хостов и машин, которые связаны с сетью через модем. Фактически, последние большую часть времени также являются автономными хостами.
Проблема автономных хостов в том, что они имеют только одно активное
сетевое устройство, loopback, которому обычно назначен адрес
127.0.0.1. Но в некоторых случаях, вы должны
послать данные к "официальному" IP-адресу локального хоста. Например,
рассмотрим laptop vlite, который был
отсоединен от сети. Приложение на vlite может
понадобиться послать данные другому приложению на том же самом хосте. Поиск
vlite в файле
/etc/hosts
выдает IP-адрес
172.16.1.65, таким образом приложение
пытается послать данные этому адресу. Поскольку интерфейс loopback в
настоящее время единственный активный интерфейс на машине, ядро не имеет
никаких идей относительно этого адреса! Как следствие, ядро отказывается от
пакета и возвращает приложению ошибку.
# |
IP-псевдонимы (IP-Alias)
Новые ядра поддерживают свойство, которое может полностью заменить dummy-интерфейс, и имеет другие полезные функции. IP Alias позволяет конфигурировать много IP-адресов на одно физическое устройство. В самом простом случае Вы могли бы копировать функцию dummy-интерфейса, конфигурируя адрес как псевдоним для loopback, и полностью избежать применения интерфейса dummy. В более сложных случаях Вы могли бы конфигурировать ваш компьютер, чтобы он выглядел как несколько машин с разными IP-адресами. Эта конфигурация иногда называется "Virtual Hosting".
/proc/net/ip_alias
, если его нет, ядро
придется перестроить). Конфигурация IP-псевдонима фактически идентична
конфигурированию реального сетевого устройства. Вы используете специальное
имя, чтобы указать, что это псевдоним. Например:
#
|
172.16.1.1
. IP aliases используют переменную
n
для каждого устройства, где "n"
является целым числом. В нашем примере сетевое устройство, на котором мы
создаем псевдоним, lo
и создается псевдоним номер
ноль для него. Этим путем одно физическое устройство может поддерживать ряд
псевдонимов.Каждый псевдоним может обрабатываться как отдельное устройство, однако, оно будет совместно использовать аппаратные средства с другим интерфейсом.
Назад | Глобальное оглавление | Вперед |
Написание файлов hosts и networks | Локальное оглавление | Все про ifconfig |