Здесь вы изучите, как работает конфигурация — это нужно сделать перед изучением модульного построения сети. 8 2011-08-19
Расширенная настройка

Переменная config_eth0 служит основой конфигурации интерфейса. Она содержит список высокоуровневых инструкций по настройке интерфейса (в данном случае, eth0). Все команды списка выполняются последовательно. Интерфейс считается работоспособным, если хотя бы одна команда выполнена успешно.

Вот список встроенных инструкций:

nullНе выполнять никаких действийnoop Если интерфейс включен и существует адрес, успешно завершить настройку. an IPv4 or IPv6 addressДобавить адрес к интерфейсу dhcp, adsl or apipa (или команда запуска модуля стороннего изготовителя) Запустить модуль, реализующий команду. Например, dhcp запускает модуль, реализующий DHCP, которым может быть dhcpcd, dhclient или pump.
Команда Описание

На случай неудачного выполнения команды можно указать запасную команду. Запасной вариант должен строго соответствовать структуре конфигурации.

Команды можно сцеплять. Вот несколько практических примеров.

# Задание трех адресов IPv4
config_eth0="192.168.0.2/24
192.168.0.3/24
192.168.0.4/24"

# Задание одного адреса IPv4 и двух адресов IPv6
config_eth0="192.168.0.2/24
4321:0:1:2:3:4:567:89ab
4321:0:1:2:3:4:567:89ac"

# Сохранять адрес, присвоенный ядром, до отключения интерфейса.
# При этом назначить другой через DHCP. Если DHCP не работает, 
# задать статический адрес, определяемый APIPA
config_eth0="noop
dhcp"
fallback_eth0="null
apipa"
При использовании модуля ifconfig для назначения нескольких адресов, для каждого дополнительного адреса создаются псевдонимы интерфейса. Так, в двух примерах, приведенных выше, создаются интерфейсы eth0, eth0:1 и eth0:2. С этими интерфейсами нельзя сделать ничего особенного, так как и ядро, и другие программы обрабатывают eth0:1 и eth0:2 просто как eth0. Порядок настройки запасного режима имеет значение! Если бы мы не указали инструкцию null, то команда apipa запускалась бы только при неудачном выполнении команды noop. APIPA и DHCP обсуждаются позже.
Сетевые зависимости

Сценарии инициализации в /etc/init.d могут находиться в зависимости от определенного сетевого интерфейса или просто от службы сети (net). Все сетевые интерфейсы в системе инициализации Gentoo предоставляют то, что называется net.

Если в файле /etc/rc.conf, установлена опция rc_depend_strict="YES", тогда все сетевые интерфейсы, которые предоставляют net, должны быть активны, прежде чем будет зависимость от "net" будет выполнена. Другими словами, если у вас есть net.eth0 и net.eth1, а инициализационный скрипт зависит от "net", то они обе должны быть включены.

С другой стороны, если установлена опция rc_depend_strict="NO", тогда зависимость "net" будет помечена как разрешенная при включении хотя бы одного сетевого интерфейса.

Но как насчет net.br0, зависимого от net.eth0 и net.eth1? net.eth1 может быть беспроводным или РРР-устройством, требующим предварительной настройки для возможности включения в мост. Это невозможно сделать в /etc/init.d/net.br0, так как он является символьной ссылкой на net.lo.

Ответом является определение настройки rc_need_ в /etc/conf.d/net.

rc_need_br0="net.eth0 net.eth1"

Но этого, однако, недостаточно. Инициализационные сетевые скрипты Gentoo используют виртуальную зависимость, называемую net для того, чтобы сообщить системе, что сеть доступна. Ясно, что в вышеприведенном примере сеть можно считать доступной только когда включен интерфейс net.br0, а не когда включены остальные. Поэтому нам нужно сказать об этом в файле /etc/conf.d/net:

rc_net_lo_provide="!net"
rc_net_eth0_provide="!net"
rc_net_eth1_provide="!net"

Более подробно зависимости обсуждаются в разделе Написание сценариев инициализации Настольной книги Gentoo. Более детальная информация о файле /etc/rc.conf находится в комментариях в этом файле.

Имена и значения переменных

Имена переменных являются динамическими. Обычно они следуют структуре variable_${interface|mac|essid|apmac}. Например, значение переменной dhcpcd_eth0 хранит параметры dhcpcd для eth0, а переменной dhcpcd_essid — параметры dhcpcd, используемые при подключении любого интерфейса к ESSID «essid».

Однако, не существует твердого простого правила, устанавливающего, что интерфейсы должны называться ethx. На деле, имена многих беспроводных выглядят как wlanx, rax и ethx. Кроме того, некоторые пользовательские интерфейсы, например, мосты, можно называть как угодно, например, foo. Для пущего разнообразия, в именах беспроводных точек доступа также допускаются знаки, не входящие в алфавитно-цифровые; это имеет значение, потому что есть возможность настройки сетевых параметров для отдельных ESSID.

Оборотная сторона всего этого в том, что для настройки сети в Gentoo используются переменные bash, а bash не в состоянии использовать что-либо кроме знаков английского алфавита и цифр. Чтобы обойти такое ограничение, мы заменяем каждый символ, не являющийся английским буквенно-цифровым, на знак подчеркивания: _.

Другая особенность bash — это значения переменных: некоторые символы требуют специальной записи, перед ними помещается знак \. Им необходимо предварять следующие символы: ", ' и \.

В следующем примере мы используем беспроводные ESSID, так как в них может содержаться самое широкое множество символов. Мы воспользуемся ESSID My "\ NET:

(Этот пример работает, но домен не существует)
dns_domain_My____NET="My \"\\ NET"

( Предыдущая строка устанавливает домен dns в My "\ NET при 
подключении беспроводной платы к точке доступа с ESSID My "\ NET)