Etcnet

Материал из ALT Linux Wiki
Freesource-logo.png Blue Glass Arrow.svg MediaWiki logo.png
Эта страница была перемещена с freesource.info.
Эта страница наверняка требует чистки и улучшения — смело правьте разметку и ссылки.
Просьба по окончанию убрать этот шаблон со страницы.


Подсказки пользователю /etc/net


Быстрый старт

Где брать информацию

Обращаю внимание, что начиная с версии 0.8.0 документация /etc/net переместилась из комментариев, рассеянных по множеству файлов, в несколько man-страниц. Список всех файлов документации пакета можно получить командой

rpmquery -d etcnet

Как быстро настроить одну карту Ethernet

  1. Создайте каталог /etc/net/ifaces/eth0. Это собственный каталог конфигурации данного интерфейса, в нём будут храниться файлы с настройками.
  2. Определите, какой модуль необходим для вашей карты. Для этого можно использовать lspci, lspcidrake, pciscan. Затем
  3. В каталоге конфигурации создайте файл options, в который впишите строку
    MODULE=<имя модуля>
    . Больше ничего пока не добавляйте.
  4. Выясните, какой IP-адрес должен быть назначен вашему интерфейсу. Если интерфейс конфигурируется по DHCP, то поместите в файл /etc/net/ifaces/eth0/options строку BOOTPROTO=dhcp и переходите к шагу 7. Замечание: в ряде случаев может также понадобиться
    DHCP_HOSTNAME=<имя машины без домена>
    . Эта опция описана в man-странице etcnet-options. Также необходимо, чтобы была пустая строка в конце файла.
  5. У вашего интерфейса есть два взаимосвязанных атрибута: IP-адрес и сетевая маска. Текущие назначенные адреса можно просмотреть командой /sbin/ip address show. Скорее всего вы увидите, что интерфейс-петля lo уже сконфигурирован с адресом 127.0.0.1/8. Создайте файл /etc/net/ifaces/eth0/ipv4address, в который поместите IP-адрес с длиной маски, например
    10.0.0.20/24
    . Наиболее популярны маски /24 и /30. Для справки приводится##LINKTOFTN ftnd1## таблица соответствия сетевых масок в различных нотациях.
  6. Выясните адрес вашего шлюза (маршрут по умолчанию). Например, этот IP-адрес -- 10.0.0.254. Создайте файл /etc/net/ifaces/eth0/ipv4route, в который поместите строку
    default via 10.0.0.254
  7. Убедитесь, что всё выполнено правильно, выполнив команду service network restart. Ваш интерфейс должен быть успешно сконфигурирован. Если вы конфигурировали использование DHCP, но адрес интерфейсу не назначается, просмотрите /var/log/messages.

Как настроить ifplugd

С версии 0.7.10 /etc/net управляет ifplugd самостоятельно. Это было сделано для лучшей интеграции пакетов и для возможности мониторить несколько интерфейсов одновременно. Для корректного использования ifplugd необходимо выполнить chkconfig ifplugd off и назначить переменную USE_IFPLUGD в файлах options соответствующих интерфейсов. Комментарий по данной переменной дан в файле /etc/net/ifaces/default/options-eth.

==== Как настроить интерфейс PPP ====

Для настройки обычного модемного PPP-соединения вам нужно:

  1. Создать каталог конфигурации, например, /etc/net/ifaces/ppp5. Сейчас вы не можете использовать что-либо кроме pppN или pppNN или pppNNN и т.п.
  2. Прочесть /etc/net/ifaces/default/options-ppp
  3. Создать файлы конфигурации. Скорее всего вам понядобятся pppconnect и pppdisconnect, чтобы pppd знал, как дозваниваться и соединяться. Это скрипты для программы chat(8). Кроме этого в файле pppoptions можно (а зачастую нужно) перечислить опции pppd(8), определяющие способ авторизации, скорость и название порта и т.п.
  4. Заполнить /etc/ppp/chap-secrets или /etc/ppp/pap-secrets.

Как настроить интерфейс PPtP или PPPoE

Хотя PPtP-соединения могут быть настроены и как обычные PPP-соединения, в /etc/net версии 0.7.10 для удобства пользователей была введена опция PPPTYPE. Она может принимать следующие значения:

  • dialup: обычный PPP-интерфейс.
  • pppoe: интерфейс PPPoE. Для такого интерфейса необходимо в опции HOST указывать имя Ethernet-интерфейса, через который будет производиться работа PPPoE. Побочным положительным эффектом будет то, что этот интерфейс будет при необходимости автоматически подниматься (см. ##FTN requires##).
  • pptp: интерфейс PPtP. Для такого интерфейса необходимо в опции PPTP_SERVER указывать имя хоста или IP-адрес PPtP-сервера, к которому будет производиться подключение. Обратите внимание, что хотя такие интерфейсы не имеют опции HOST, в большинстве случаев имеет смысл указать в опции REQUIRES интерфейс, через который будет достижим хост, указанный в PPTP_SERVER.

См также ##FTN vpn##)

DNS и PPP-соединения

Внимание: здесь описывается проблема, которая на самом деле была создана, а не решена -- бишь ради специфики kppp была создана чётная ошибка в ppp-common; последняя уже исправлена.

Довольно долгое время существовала проблема неправильной модификации /etc/resolv.conf при установке PPP-соединений: https://bugzilla.altlinux.org/show_bug.cgi?id=4249. Сейчас она решена, но необходимо дать пояснения. Прежде всего убедитесь, что у вас в файле /etc/resolv.conf есть строка

# ppp temp entry

Если этой строки нет, то в файле не будут модифицироваться строки nameserver, если только какая-нибудь программа типа kppp это не сделает специально. Если такая строка есть, то /etc/resolv.conf будет модифицироваться в зависимости от значения булевской переменной RESOLV_MODS, которую необходимо задавать в файле /etc/sysconfig/network.//

Внимание

: при ppp-common >= 0.4-alt1 строки # ppp temp entry в /etc/resolv.conf при отсутствии PPP-соединения, поднятого какой-либо "звонилкой", запущенной от рута -- быть не должно! Если есть -- уберите, чтобы /etc/ppp/ip-up занимался обновлением записей про DNS в этом файле.

restart, reload и другие команды

У сервиса network имеется ряд команд:

  • start: запустить все стационарные интерфейсы. hotplug-интерфейсы будут сконфигурированы при поступлении соответствующего вызова от hotplug.
  • startwith <имя профиля>: start с указанным именем профиля, а не определённым автоматически.
  • stop: остановить все стационарные интерфейсы. hotplug-интерфейсы будут расконфигурированы при поступлении соответствующего вызова от hotplug.
  • stopwith <имя профиля>: stop с указанным именем профиля, а не определённым автоматически.
  • restart: эквивалентно stop с последующим start, как и в большинстве других сервисов.
  • restartwith <имя профиля>: рестарт в контексте указанного профиля, эквивалентно stopwith <имя профиля> и startwith <имя профиля>.
  • switchto <имя профиля>: переключение в указанный профиль, эквивалентно stop и startwith <имя профиля>.
  • reload: семантически обозначает "актуализировать текущую конфигурацию". Для всех сконфигурированных в настоящий момент интерфейсов будет выполнена реконфигурация при наличии конфигурации.
  • check: автоматическая проверка конфигурационной базы.

Протоколы конфигурации адресов

С помощью опции BOOTPROTO вы можете управлять тем, как у интерфейса будут появляься адреса и маршруты (это относится только к протоколу IPv4, так как IPv6 и IPX приобретают адреса только статически).

  • static -- адреса и маршруты будут взяты из ipv4address и ipv4route.
  • dhcp -- интерфейс будет сконфигурирован по DHCP.
  • ipv4ll -- интерфейс будет сконфигурирован с помощью IPv4LL (link-local), ранее известному как ZCIP (zeroconf IP). Это значит, что из сети 169.254.0.0/16 будет подобран ещё не использованный адрес и назначен на интерфейс.

Существует несколько комбинированных способов:

  • dhcp-static -- если конфигурация по DHCP не удалась, конфигурировать методом static.
  • dhcp-ipv4ll -- если конфигурация по DHCP не удалась, конфигурировать методом ipv4ll.
  • dhcp-ipv4ll-static -- если конфигурация по DHCP не удалась, конфигурировать методом ipv4ll. Если и это не удалось, конфигурировать методом static.

Почему всё так устроено

Общие сведения

/etc/net -- немного больше, чем кажется на первый взгляд. Несмотря на это, /etc/net остаётся системой конфигурации сети в Linux, то есть должна позволить вам сконфигурировать вашу сеть без трюков и особого напряжения. Если вы всё же читаете эту страницу, то у вас, вероятно, возникли трудности с её использованием.

Для начала я дам ряд утверждений, от которых можно оттолкнуться:

  1. У проекта есть сайт, на котором можно найти примеры конфигурации и тексты, претендующие на звание документации: http://etcnet.org/
  2. /etc/net интегрирован в ALTLinux Sisyphus в виде пакетов:
    • etcnet (базовые сценарии)
    • etcnet-full (виртуальный пакет с зависимостями на все пакеты, которые могут использоваться сценариями /etc/net, с указанием их точных версий)
    • etcnetconf (прототип конфигуратора)
    • etcnet-defaults-desktop (умолчания для рабочей станции)
    • etcnet-defaults-server (умолчания для сервера)
  1. Пакеты etcnet и net-scripts -- две конфликтующие реализации такой сущности, как "подсистема конфигурации сети" (network-config-subsystem).
  2. При установке etcnet вместо net-scripts или наоборот сервис network оказывается выключенным. Это означает, что при загрузке системы сеть не будет сконфигурирована, проверить это можно командой chkconfig --list network. Для быстрого исправления проблемы можно дать команду chkconfig network reset.
  3. etcnet НЕ импортирует автоматически настройки net-scripts. Если вы только что установили etcnet и ваши сетевые интерфейсы всё ещё остаются сконфигурированными (несмотря на уже отсутствующий пакет net-scripts), то вы можете запустить сценарий /etc/net/scripts/initconf. Он попытается проанализировать текущее состояние интерфейсов и выведет вам результат. Никаких файлов при этом записано не будет. Если вам понравится вывод initconf, запустите его с параметром write и он проделает то же самое, но уже с сохранением конфигурации.
  4. Для корректной работы системы в целом необходимо, чтобы содержимое файла /etc/sysconfig/network было корректным.
  5. Переменные sysctl в ALTLinux конфигурируются в следующих местах: /etc/sysctl.conf (глобальные системные), /etc/sysconfig/network-scripts/sysctl.conf (общие сетевые в net-scripts), /etc/net/sysctl.conf (общие сетевые в /etc/net), /etc/net/ifaces/*/sysctl.conf* (частные для конкретных интерфейсов или их типов в /etc/net).

Как организованы опции по умолчанию

Методология /etc/net предусматривает несколько шагов наследования опций, первый из которых -- загрузка опций по умолчанию. Раньше это происходило из одного файла /etc/net/options, сейчас же в нашем распоряжении есть каталог /etc/net/options.d, из которого будут последовательно прочитаны все файлы.

Смысл этого нагромождения следующий: оригинальный архив etcnet содержит только файл /etc/net/options.d/00-default.

Упаковщик etcnet в какой-либо дистрибутив вместо того, чтобы прикладывать патч, просто добавляет файл с бОльшим номером, который переопределяет нужные опции.

Администратору системы может не понравиться дистрибутивный набор, в этом случае он создаст файл с ещё более высоким номером и определит умолчания для своей системы. В результате такого подхода:

  1. Уменьшается количество патчей (хотя их свойство отваливаться бывает полезным).
  2. Не изменяются файлы с опциями, принадлежащие пакету. Это делает обновление пакета намного более корректным.
  3. Сразу видно, на каком этапе какие опции переопределяются.

Зачем нужен iftab

Имена сетевых интерфейсов по умолчанию, как правило, содержат их тип (eth, ppp, wifi, ipsec) и индекс: 0 для первого созданного интерфейса, 1 для второго и т.д. При этом соответствие автоматически назначенных имён физическим устройствам может не сохраняться.

Эта особенность неудобна, когда машина с Linux имеет более одного интерфейса каждого типа. Типичными примерами являются маршрутизаторы и ноутбуки. В маршрутизаторах, как правило, используются однотипные сетевые карты и при их замене или изменении порядка на PCI-шине соответствие оказывается нарушенным. В ноутбуках используются ethernet и wifi-устройства с горячим подключением, при этом слотов и карт может быть более чем 1. В этом случае пользователь скорее всего пожелает закрепить за каждой сменной картой её конфигурацию.

/etc/net при конфигурации интерфейса использует то имя, под которым он сконфигурирован, а именно имя каталога, в котором хранятся файлы конфигурации интерфейса. За редким исключением интерфейсам можно назначать произвольные имена. Для того, чтобы автоматически назначенное имя было изменено на требуемое, необходимо поддерживать в актуальном состоянии файл /etc/net/iftab. man-страница по формату этого файла входит в пакет ifrename (man 5 iftab). Позволю себе заметить, что формат businfo зависит от версии ядра, у 2.6 он длиннее. Мне кажется, у ethtool -i businfo более корректна, чем у lspci.

См. тж. это письмо про отличия etcnet и сервиса ifrename:

И сразу позволю себе прокомментировать другие письма этого треда:

1. "etcnet уже научился менять местами eth0 и eth1?"

Освоение этого фокуса обладает сомнительной пользой. Я по-прежнему
рекомендую рассматривать eth0 как временное имя с малым сроком жизни,
а для повышения комфорта пользователей Ethernet-интерфейсы предлагаю
называть eth00, eth01, eth02 etc.

2. "Существование (номинальное) net-scripts вынуждает поддерживать
ряд сервисов, которые иначе могли бы быть упразднены"

Эти сервисы можно обезвредить контролем CONFMETHOD
из /etc/sysconfig/network. При этом зависимости на пакет etcnet 
не возникнет, только на network-config-subsystem. Примеры таких
пакетов должны быть в Sisyphus.

3. "после приведения в порядок /etc/udev/rules.d/19-udev-ifrename.rules
нужности в /etc/net/iftab я не заметил"

Важнейшее принципиальное отличие /etc/net/iftab от /etc/iftab ---
нахождение /etc/net/iftab в специальном пространстве имён. Для него
действуют механизмы определения профиля и хоста конфигурации. Это,
например, позволит _желающим_ составить конфигурацию так, что срочный
ремонт маршрутизатора сведётся к переносу диска (или массива) 
из сгоревшего шасси в запасное. Возможны и другие примеры, которые
станут невозможными при помещении iftab в /etc и его лобовой
интерпретации.

Конечно, пользователю единственного ноутбука с одним-двумя сетевыми
интерфейсами такая практика --- полный overkill, но его никто и не
заставляет видеть всю подводную часть. В этом и гибкость.

Интерфейсы lo, default и unknown

Сразу после установки в каталоге /etc/net/ifaces (в котором хранятся конфигурации интерфейсов) можно обнаружить три каталога: lo, default и unknown.

Интерфейс lo -- стандартная петля, которая должна быть во всякой Linux-системе, поэтому конфигурация для него включена по умолчанию. В остальном он ничем не отличается от любого другого интерфейса и конфигурируется точно так же файлами options и ipv4address.

Интерфейс default -- вовсе не интерфейс. Это специальный каталог, файлы в котором обрабатываются следующим образом:

  • resolv.conf -- если присутствует, то копируется в /etc/resolv.conf.
  • options -- файл опций, читается после опций по умолчанию. Этот файл содержит комментарии.
  • options-<вид интерфейса> -- этот файл содержит опции, специфичные для данного вида интерфейсов. Какие-то из них необязательны и позволяют использовать особенности данного вида интерфейсов, например, LINKDETECT в options-eth; другие обязательны, например, HOST в options-bri. Эти файлы содержат комментарии. Обратите внимание, что эти файлы лучше не редактировать. Если вам нужно задать опцию для интерфейса, то как правило это можно сделать в файле options в конфигурационном каталоге данного интерфейса. Это облегчит процесс обновления пакета etcnet.
  • sysctl.conf-<вид интерфейса> -- файл с переменными sysctl, которые необходимо изменить. Сейчас единственный такой файл -- sysctl.conf-dvb, который отключает return path filter, что всегда нужно в случае асимметричной маршрутизации.
  • iplink-<вид интерфейса> -- файл с командами iplink, специфичными для данного вида.
  • selectprofile -- если этот файл исполняемый, то он будет вызван из сценариев ifup/ifdown, setup/shutdown для того, чтобы вернуть на стандартном выводе имя профиля, которое необходимо использовать. Это позволяет автоматически переключать профили в зависимости от каких-либо условий. В поставку включен комментированный пример сценария: /etc/net/ifaces/default/selectprofile.
  • fw -- каталог с настройками сетевого экрана по умолчанию.

Интерфейс unknown -- специальная конфигурация, которая будет использована в том случае, когда /etc/net просят сконфигурировать hotplug-интерфейс, для которого не существует каталога конфигурации. Это будет работать только в том случае, если включена опция ALLOW_UNKNOWN.