Внутреннее устройство Linux - Уорд Брайан. Страница 67
В данной книге мы рассмотрим наиболее распространенный тип физического уровня — сеть Ethernet. Семейство стандартов IEEE 802 определяет различные типы сетей Ethernet, от проводных до беспроводных, но их все объединяют некоторые ключевые особенности.
• Все устройства сети Ethernet обладают адресом MAC (Media Access Control, управление доступом к среде передачи данных), который иногда называют аппаратным адресом. Этот адрес не зависит от IP-адреса хоста и является уникальным для сети Ethernet этого хоста (но не обязательно для более крупной программной сети, такой как Интернет). MAC-адрес может быть, например, таким: 10:78:d2:eb:76:97.
• Устройства в сети Ethernet отправляют сообщения в виде кадров, которые являются оболочкой вокруг набора данных. Кадр содержит MAC-адреса отправителя и назначения.
На самом деле сеть Ethernet не пытается выйти за рамки аппаратного обеспечения для одной сети. Если, например, у вас есть две различные сети Ethernet с одним хостом, подключенным к обеим сетям (и два различных устройства сетевого интерфейса), вы не сможете напрямую передать кадр из одной сети Ethernet в другую, если вы не настроите специальный Ethernet-мост. Именно здесь возникают более высокие сетевые уровни (такие как интернет-уровень). По договоренности каждая сеть Ethernet является обычно и подсетью Интернета. Даже если кадр не может покинуть физическую сеть, маршрутизатор способен извлечь данные из кадра, заново упаковать их и отправить хосту другой физической сети — именно это и происходит в сети Интернет.
9.7. Понятие о сетевых интерфейсах ядра
Физический и интернет-уровни должны быть соединены таким способом, который позволяет интернет-уровню сохранять свою не зависящую от аппаратных средств гибкость. Ядро Linux обеспечивает собственное разделение этих двух уровней и предоставляет стандарты коммуникации для их соединения под названием «сетевой интерфейс (ядра)». Когда вы настраиваете сетевой интерфейс, вы соединяете настройки IP-адреса со стороны Интернета с идентификацией аппаратного средства со стороны физического устройства. Сетевые интерфейсы имеют имена, которые обычно отражают тип расположенного под ними аппаратного средства, например eth0 (первая карта Ethernet в компьютере) и wlan0 (беспроводной интерфейс).
В подразделе 9.3.1 вы узнали о наиболее важной команде для просмотра или ручной настройки параметров сетевого интерфейса: ifconfig. Вспомните такой результат ее работы:
eth0 Link encap:Ethernet HWaddr 10:78:d2:eb:76:97
inet addr:10.23.2.4 Bcast:10.23.2.255 Mask:255.255.255.0
inet6 addr: fe80::1278:d2ff:feeb:7697/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:85076006 errors:0 dropped:0 overruns:0 frame:0
TX packets:68347795 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:86427623613 (86.4 GB) TX bytes:23437688605 (23.4 GB)
Interrupt:20 Memory:fe500000-fe520000
Для каждого сетевого интерфейса в левой части вывода отображается имя интерфейса, а правая часть содержит параметры и статистические данные об этом интерфейсе. В дополнение к уже рассмотренным нами частям интернет-уровня можно увидеть MAC-адрес на физическом уровне (HWaddr). Строки, которые содержат слова UP и RUNNING, сообщают о том, что такой интерфейс работает.
Хотя команда ifconfig и показывает некоторую информацию об аппаратном средстве (в данном случае даже параметры низкоуровневого устройства, такие как прерывание и использованная память), она предназначена в основном для просмотра и конфигурирования программных уровней, присоединенных к интерфейсам. Чтобы проникнуть вглубь аппаратного и физического уровней, стоящих за сетевым интерфейсом, используйте что-либо вроде команды ethtool для отображения или изменения параметров карт Ethernet. Мы кратко рассмотрим беспроводные сети в разделе 9.23.
9.8. Введение в конфигурирование сетевого интерфейса
Теперь вы узнали обо всех основных элементах, которые входят в нижние уровни сетевого стека: физический уровень, сетевой (интернет-) уровень и сетевые интерфейсы ядра Linux. Чтобы объединить эти части в целях подключения компьютера с Linux к Интернету, вам или какому-либо ПО необходимо выполнить следующее.
1. Подключить сетевое оборудование и убедиться в том, что у ядра есть драйверы для него. Если драйвер есть, то команда ifconfig -a отобразит сетевой интерфейс ядра, соответствующий этому аппаратному средству.
2. Выполнить дополнительную настройку физического уровня, например выбор имени сети или пароля.
3. Связать IP-адрес и маску сети с сетевым интерфейсом ядра, чтобы драйверы устройства (физический уровень) и подсистемы Интернета (интернет-уровень) могли общаться друг с другом.
4. Добавить дополнительные необходимые маршруты, включая шлюз по умолчанию.
Когда все компьютеры были большими стационарными ящиками, соединенными с помощью проводов, все было сравнительно просто: ядро выполняло первый шаг, второй шаг не требовался и вам следовало выполнить третий шаг с помощью команды ifconfig и четвертый шаг с помощью команды route.
Чтобы вручную указать IP-адрес и маску сети для сетевого интерфейса ядра, нужно было выполнить следующее:
# ifconfig interface address netmask mask
Здесь параметр interface является именем интерфейса, таким как eth0. Когда интерфейс заработает, вам следует быть готовыми к добавлению маршрутов, что, как правило, сводится к указанию шлюза по умолчанию, например, так:
# route add default gw gw-address
Параметр gw-address является IP-адресом вашего шлюза по умолчанию; он должен быть адресом в локально подключенной подсети, определенной адресом и маской одного из сетевых интерфейсов.
Добавление и удаление маршрутов вручную. Чтобы удалить шлюз по умолчанию, запустите команду:
# route del -net default
Можно легко переопределить шлюз по умолчанию с помощью других маршрутов. Допустим, ваш компьютер находится в подсети 10.23.2.0/24, вы желаете попасть в подсеть 192.168.45.0/24 и знаете о том, что адрес 10.23.2.44 может выступать в роли маршрутизатора для этой подсети. Запустите такую команду, чтобы отправить трафик, связанный с адресом 192.168.45.0 на этот маршрутизатор:
# route add -net 192.168.45.0/24 gw 10.23.2.44
Нет необходимости указывать маршрутизатор, чтобы удалить маршрут:
# route del -net 192.168.45.0/24
Вам следует знать о том, что работа с маршрутами зачастую намного сложнее, чем кажется. Для приведенного примера следует также убедиться в том, что маршруты для всех хостов сети 192.163.45.0/24 могут привести обратно в сеть 10.23.2.0/24, а иначе первый добавленный вами маршрут окажется бесполезным.
Обычно для своих клиентов вам следует настраивать сети по возможности проще, чтобы хостам требовался лишь один маршрут. Если вам необходимо несколько подсетей и возможность маршрутизации между ними, обычно для этого лучше настроить маршрутизаторы в качестве шлюзов по умолчанию, которые выполняют всю работу по маршрутизации между различными локальными подсетями. Пример вы увидите в разделе 9.17.
9.9. Конфигурация сети, активизируемая при загрузке системы
Мы рассмотрели способы ручной настройки сети. Традиционно для обеспечения правильной сетевой конфигурации компьютера требовалось, чтобы во время загрузки системы запускался сценарий ручной конфигурации. Это сводится к запуску таких инструментов, как ifconfig и route, где-либо среди последовательности событий загрузки. Многие серверы до сих пор поступают подобным образом.
Предпринимались многие попытки стандартизировать файлы конфигурации для настройки сети во время загрузки системы Linux. Инструменты ifup и ifdown выполняют это: например, сценарий загрузки может (теоретически) запустить команду ifup eth0, чтобы запустить корректные команды ifconfig и route для интерфейса eth0. К сожалению, в разных версиях системы различная реализация команд ifup и ifdown, в результате чего их файлы конфигурации также совершенно различны. Версия Ubuntu, например, использует вариант ifupdown, файлы конфигурации которого расположены в каталоге /etc/network, а версия Fedora пользуется собственным набором сценариев и конфигурацией в каталоге /etc/sysconfig/network-scripts.