В началоНастольная книга Gentoo Linux x86 → Настройка сети в Gentoo
Gentoo-doc HOME Пред.: Работа с PortageВ началоУровень выше: Настольная книга Gentoo Linux x86

4. Настройка сети в Gentoo

4.1. Начальная настройка

4.1.1. Приступаем к настройке

Примечание

В документе предполагается, что вы правильно сконфигурировали свое ядро и модули для оборудования, и вам известно интерфейсное имя устройств. Мы также предполагаем, что вы настраиваете eth0, хотя на самом деле это может оказаться eth1, wlan0 и т.д.

Примечание

Требуется, чтобы у вас использовался baselayout-1.11.11 или более свежий.

Для начала настройки своей сетевой платы, нужно рассказать о ней системе Gentoo RC. Это делается созданием символической ссылки с net.lo на net.eth0 в /etc/init.d.

Листинг 269. Создание символической ссылки с net.lo на net.eth0

# cd /etc/init.d
# ln -s net.lo net.eth0


Теперь система Gentoo RC знает об этом интерфейсе. Ей также нужно знать, как настраивать новый интерфейс. Конфигурация всех сетевых интерфейсов находится в /etc/conf.d/net. Вот простая настройка для использования DHCP или статического адреса.

Листинг 270. Примеры для /etc/conf.d/net

# использование DHCP
config_eth0=( "dhcp" )

# статический IP-адрес, используется запись CIDR
config_eth0=( "192.168.0.7/24" )
routes_eth0=( "default via 192.168.0.1" )

# статический IP-адрес, запись с маской подсети
config_eth0=( "192.168.0.7 netmask 255.255.255.0" )
routes_eth0=( "default gw 192.168.0.1" )


Примечание

Если конфигурация для интерфейса не указывается, предполагается использование DHCP.

Примечание

CIDR расшифровывается как Classless InterDomain Routing (бесклассовая междоменная маршрутизация). Первоначально, адреса IPv4 были разделены на классы A, B и C. Ранняя система классификации не была рассчитана на массовую популярность интернета, и попала под угрозу исчерпания новых уникальных адресов. CIDR — это схема адресации, позволяющая одному IP-адресу обозначать множество IP-адресов. IP-адрес CIDR выглядит как обычный IP-адрес с добавлением косой черты и числа; например, 192.168.0.0/16. CIDR описывается в RFC 1519.

Теперь, настроив интерфейс, мы можем запускать и останавливать его следующими командами:

Листинг 271. Сценарии запуска и остановки сети

# /etc/init.d/net.eth0 start
# /etc/init.d/net.eth0 stop


Важно

При поиске неисправностей сети рекомендуется установить RC_VERBOSE="yes" в /etc/conf.d/rc для получения более подробной информации о происходящем.

Теперь, успешно запустив и остановив сетевой интерфейс, вы можете захотеть, чтобы он запускался при каждой загрузке Gentoo. Вот как это сделать. Последняя команда «rc» указывает Gentoo, что нужно запускать в текущем уровне запуска любые еще не запущенные сценарии.

Листинг 272. Настройка запуска сетевого интерфейса при загрузке

# rc-update add net.eth0 default
# rc


4.2. Расширенная настройка

4.2.1. Расширенная настройка

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

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

Команда

Описание

null

Не выполнять никаких действий

noop

Если интерфейс включен и существует адрес, успешно завершить настройку.

an IPv4 or IPv6 address

Добавить адрес к интерфейсу

dhcp, adsl or apipa(или команда запуска модуля стороннего изготовителя)

Запустить модуль, реализующий команду. Например, dhcp запускает модуль, реализующий команду. Например, dhcp запускает модуль, реализующий DHCP, которым может быть dhcpcd, udhcpc, dhclient или pump.

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

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

Листинг 273. Примеры настройки

# Задание трех адресов 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 обсуждаются позже.

4.2.2. Сетевые зависимости

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

Значение

Описание

none

Служба net считается всегда работающей

no

В основном это означает, что по крайней мере одна служба net.*, кроме net.lo, должна работать. Это может пригодиться пользователям ноутбуков, у которых есть WIFI и статическое проводное подключение, когда нужно, чтобы при включении хотя бы одного интерфейса служба сети выглядела включенной.

lo

То же, что и no, но с учетом net.lo. Может быть полезно для тех, кого не волнует, чтобы определенный интерфейс включался при загрузке.

yes

В этом случае ВСЕ сетевые интерфейсы ДОЛЖНЫ работать, чтобы служба net считалась работающей.

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

Ответом является создание своей собственной функции depend() в /etc/conf.d/net.

Листинг 274. Зависимость net.br0 в /etc/conf.d/net

# Можно использовать любую зависимость (use, after, before),
# как видно в текущих сценариях
depend_br0() {
  need net.eth0 net.eth1
}


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

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

Имена переменных являются динамическими. Обычно они следуют структуре 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:

Листинг 275. Пример имени переменной

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

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


4.3. Модульное построение сети

4.3.1. Сетевые модули

Сейчас мы поддерживаем модульные сетевые сценарии. Это значит, что мы можем легко добавлять поддержку для новых типов интерфейсов и конфигурационных модулей, сохраняя совместимость с существующими.

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

Примечание

Все обсуждаемые значения хранятся в /etc/conf.d/net, если явно не указано иное.

Листинг 276. Предпочтение модуля

  # выбор iproute2, а не ifconfig
modules=( "iproute2" )

# можно также указать другие модули для отдельного интерфейса
# здесь мы выбираем udhcpc, а не dhcpcd
modules_eth0=( "udhcpc" )

# также можно указать, какие модули не надо использовать: например,
# возможно, вы используете supplicant или linux-wlan-ng для управления
# параметрами беспроводной сети, но при этом желаете настраивать сетевые
# параметры раздельно для каждого связанного ESSID
modules=( "!iwconfig" )


4.3.2. Обработчики интерфейса

Сейчас мы предоставляем два обработчика интерфейса: ifconfig и iproute2. Для настройки сети вам нужен только один из них.

  1. ifconfig в текущем Gentoo используется по умолчанию, и включен в системный профиль.

  2. iproute2 — более мощный и гибкий пакет, который не включен в системный профиль по умолчанию.

Листинг 277. Установка iproute2

# emerge sys-apps/iproute2

# выбор iproute2, а не ifconfig, когда установлены оба
modules=( "iproute2" )


Так как и ifconfig и iproute2 делают очень сходные вещи, то мы сделали их базовую настройку взаимозаменяемой. Например, оба приведенных ниже примера работают не зависимо от того, какой модуль используется.

Листинг 278. Примеры ifconfig и iproute2

  config_eth0=( "192.168.0.2/24" )
config_eth0=( "192.168.0.2 netmask 255.255.255.0" )

# также можно указать широковещательный адрес
config_eth0=( "192.168.0.2/24 brd 192.168.0.255" )
config_eth0=( "192.168.0.2 netmask 255.255.255.0 broadcast 192.168.0.255" )


4.3.3. DHCP

DHCP — это способ получения сетевой информации (адреса IP, сервера DNS, шлюза и т.д.) с сервера. Это значит, что если в сети запущен сервер DHCP, вам остается только сказать каждому клиенту, чтобы он использовал DHCP, и сеть настроится сама собой. Конечно, вам придется настраивать все остальное (бесроводную сеть, подключение точка-точка и т.д.), если они должны работать до использования DHCP.

Поддержка DHCP обеспечивается dhclient, dhcpcd, pump или udhcpc. У каждого модуля DHCP есть свои плюсы и минусы: здесь мы быстренько рассмотрим их.

 Модуль DHCP

Пакет

Плюсы

Минусы

dhclient

net-misc/dhcp

Сделан ISC, теми же людьми, кто делает BIND DNS. Гибок в настройке.

Настройка чрезмерно сложна, программа довольно «распухшая», не может получать данные о серверах NTP с DHCP, по умолчанию не отправляет имя узла.

dhcpcd

net-misc/dhcpcd

Давно в Gentoo по умолчанию, не зависит от внешних утилит.

Более не поддерживается разработчиком, может быть временами медленным, не становится демоном при неограниченном сроке аренды адреса.

pump

net-misc/pump

Компактный, не зависит от внешних утилит.

Более не поддерживается разработчиком, ненадежен, особенно по модему, не может получать данные о серверых NIS по DHCP.

udhcpc

net-misc/udhcp

Компактный; наименьший существующий клиент DHCP, сделан для встроенных систем.

Не зарекомендовал себя — ни в одном дистрибутиве не используется по умолчанию; не поддерживает длительность таймаута более 3 секунд.

Если у вас установлено больше одного DHCP клиента, вам нужно указать, какой использовать; иначе по умолчанию используется dhcpcd, если есть.

Чтобы передать определенные параметры модулю DHCP, используйте модуль_eth0="..." (замените модуль на имя используемого модуля DHCP, например, dhcpcd_eth0).

Мы попытались сделать DHCP относительным агностиком: по существу, мы поддерживаем следующие команды, с использованием переменной dhcp_eth0. По умолчанию не включена ни одна из них.

  • release — освобождать IP-адрес для повторного использования

  • nodns — не замещать /etc/resolv.conf

  • nontp — не замещать /etc/ntp.conf

  • nonis — не замещать /etc/yp.conf

Листинг 279. Простая настройка DHCP в /etc/conf.d/net

# требуется только если у вас несколько модулей DHCP
modules=( "dhcpcd" )

config_eth0=( "dhcp" )
dhcpcd_eth0="-t 10" # прекращение после 10 секунд
dhcp_eth0="release nodns nontp nonis" # только получать адрес


Примечание

По умолчанию, dhcpcd, udhcpc и pump передают текущее узла на сервер DHCP, поэтому его больше не требуется указывать.

4.3.4. Модем ADSL

Сначала нужно установить программное обеспечение для ADSL.

Листинг 280. Установка пакета rp-pppoe

# emerge net-dialup/rp-pppoe


Внимание

В baselayout-1.11.x поддерживается только PPPoE. Надеемся, что в будущих версиях появится поддержка PPPoA.

Сейчас нам нужно указать, что на eth0 будет ADSL-интерфейс, и ввести наше имя пользователя, обновив /etc/conf.d/net.

Листинг 281. Настройка eth0 для ADSL в /etc/conf.d/net

config_eth0=( "adsl" )
adsl_user_eth0="имя-пользователя"


Наконец, нужно указать ваше имя и пароль в /etc/ppp/pap-secrets.

Листинг 282. Пример /etc/ppp/pap-secrets

# * обязательна
"пользователь"  *  "пароль"


4.3.5. APIPA (автоматическая частная IP-адресация)

2APIPA пытается найти свободный адрес в диапазоне 169.254.0.0-169.254.255.255, проверяя отклик на интерфейсе произвольного адреса из этого диапазона по протоколу arp. Если отклика нет, адрес назначается интерфейсу.

Это полезно только в локальных сетях, где нет сервера DHCP, нет прямого подключения к интернету, и все другие компьютеры используют APIPA.

Для поддержки APIPA установите net-misc/iputils или net-analyzer/arping.

Листинг 283. Настройка APIPA в /etc/conf.d/net

# сначала пробуем DHCP, при неудаче переходим на APIPA
config_eth0=( "dhcp" )
fallback_eth0=( "apipa" )

# использование только APIPA
config_eth0=( "apipa" )


4.3.6. Объединение интерфейсов

Для объединения каналов в ствол (bonding) установите net-misc/ifenslave.

Объединение используется для повышения пропускной способности сети. Если у вас есть две сетевых карты, выходящих в одну и ту же сеть, можно объединить их, так что ваши приложения увидят только один интерфейс, но реально будут пользоваться двумя сетевыми платами.

Листинг 284. Настройка объединения в /etc/conf.d/net

  # объединение интерфейсов
slaves_bond0="eth0 eth1 eth2"

# вы можете не захотеть назначать адрес IP объединенному интерфейсу
config_bond0=( "null" )

# указание зависимости от eth0, eth1 и eth2, так как им может требоваться
# дополнительная настройка
depend_bond0() {
need net.eth0 net.eth1 net.eth2
}


4.3.7. Образование моста (поддержка 802.1d)

Для поддержки мостов установите net-misc/bridge-utils.

Мосты используются для объединения сетей. Например, у вас может быть сервер, подсоединенный к интернету через ADSL-модем, и плата беспроводного доступа для предоставления доступа в интернет через ADSL модем другим компьютерам. Чтобы соединить оба интерфейса, можно создать «мост».

Листинг 285. Настройка моста в /etc/conf.d/net

# настройка моста: подробности в "man btctl"
brctl_br0=( "setfd 0" "sethello 0" "stp off" )

# включаем порты в мост br0
bridge_br0="eth0 eth1"

# устанавливаем порты в "null", чтобы не запускался dhcp
config_eth0=( "null" )
config_eth1=( "null" )

# наконец, даем мосту адрес; можно использовать и DHCP
config_br0=( "192.168.0.1/24" )

# указываем зависимость от eth0 и eth1, так как им может требоваться
# дополнительная настройка
depend_br0() {
need net.eth0 net.eth1
}


Важно

Для использования некоторых вариантов моста вам может потребоваться обращение к документации по именам переменных.

4.3.8. MAC-адрес

Для изменения MAC-адреса своего интерфейса вам не потребуется ничего устанавливать, если у вас sys-apps/baselayout-1.11.14 или новее, и вы собираетесь сменить MAC-адрес на какой-то определенный. Однако, если вам нужно сменить MAC-адрес на случайный, или ваш baselayout старше указанной версии, для смены адреса потребуется установить пакет командой emerge net-analyzer/macchanger.

Листинг 286. Пример изменения MAC-адреса

# установка MAC-адреса интерфейса
mac_eth0="00:11:22:33:44:55"

# случайная установка последних 3 байт адреса
mac_eth0="random-ending"

# установка случайного адреса из диапазона для физического соединения
# того же типа (оптического, медного, беспроводного) любого изготовителя
mac_eth0="random-samekind"

# установка случайного адреса из диапазона для любого типа физического
# соединения (оптического, медного, беспроводного) любого изготовителя
mac_eth0="random-anykind"

# полностью случайный; ВНИМАНИЕ, некоторые MAC-адреса, сгенерированные
# таким образом, могут вести себя НЕ ТАК, как предполагается
mac_eth0="random-full"


4.3.9. Образование тоннеля

Для образования тоннеля вам не нужно ничего устанавливать, поскольку на это способен сам обработчик интерфейса.

Листинг 287. Настройка тоннеля в /etc/conf.d/net

# для тоннелей GRE
iptunnel_vpn0="mode gre remote 207.170.82.1 key 0xffffffff ttl 255"

# для тоннелей IPIP
iptunnel_vpn0="mode ipip remote 207.170.82.2 ttl 255"

# для настройки интерфейса
config_vpn0=( "192.168.0.2 peer 192.168.1.1" )


4.3.10. Виртуальные сети (поддержка 802.1q)

Для поддержки VLAN, установите net-misc/vconfig.

Виртуальная локальная сеть (VLAN) — это группа сетевых устройств, которые ведут себя, как будто подключены к одному сегменту сети, даже когда это не так. Членам VLAN видны только члены той же VLAN даже если в той же физической сети присутствуют другие.

Листинг 288. VLAN configuration in /etc/conf.d/net

# указание номеров VLAN для интерфейса
# пожалуйста, убедитесь, что ваши номера VLAN НЕ дополнены нулем
vlans_eth0="1 2"

# можно также настроить VLAN
# за подробностями обращайтесь к man vconfig
vconfig_eth0=( "set_name_type VLAN_PLUS_VID_NO_PAD" )
vconfig_vlan1=( "set_flag 1" "set_egress_map 2 6" )

# настройка интерфейса как обычно
config_vlan1=( "172.16.3.1 netmask 255.255.254.0" )
config_vlan2=( "172.16.2.1 netmask 255.255.254.0" )


Важно

Для использования некоторых вариантов VLAN вам может потребоваться обращение к документации по именам переменных.

4.4. Беспроводная сеть

4.4.1. Введение

В настоящее время поддерживается подключение к беспроводной сети с помощью wireless-tools или wpa_supplicant. Важно помнить, что подключение к беспроводным сетям настраивается глобально, а не для определённого интерфейса.

  1. wpa_supplicant — лучший выбор, но он поддерживает не все драйверы. Список поддерживаемых драйверов находится на сайте wpa_suppliant. Кроме того, сейчас wpa_supplicant может подключаться только к тем сетям, на SSID которых настроен.

  2. wireless-tools поддерживает практически все платы и драйверы, но не способен подключаться к точкам доступа, работающим исключительно с WPA.

Внимание

Драйвер linux-wlan-ng в данный момент не поддерживается в baselayout. Это из-за того, что в linux-wlan-ng своя собственная программа установки и настройки, которая ни на что не похожа. Разработчики linux-wlan-ng, по слухам, собираются перейти на установку как в wireless-tools; когда это произойдет, вы сможете использовать linux-wlan-ng с baselayout.

4.4.2. Запросчик WPA

Запросчик WPA (WPA Supplicant) — пакет, позволяющий подсоединяться к точкам доступа с протоколом WPA. Его настройка проходит достаточно гладко, и пакет работает достаточно стабильно, хотя находится на стадии бета-тестирования.

Листинг 289. Установка wpa_supplicant

# emerge net-wireless/wpa_supplicant


Важно

Для работы wpa_supplicant в ядре должен быть включен параметр CONFIG_PACKET.

Теперь нам необходимо настроить /etc/conf.d/net для предпочтения wpa_supplicant по отношению к wireless-tools (по умолчанию, если обе программы установлены, работает wireless-tools).

Листинг 290. Настройка /etc/conf.d/net для wpa_supplicant

# выбор wpa_supplicant
modules=( "wpa_supplicant" )

# важно указать wpa_supplicant, какой драйвер нужно использовать,
# так как программа пока не слишком хорошо угадывает сама

wpa_supplicant_eth0="-Dбезумный-wifi"


Примечание: Если вы используете драйвер host-ap, то вам потребуется перевести плату в ведомый режим (managed mode), прежде чем она сможет правильно работать с wpa_supplicant. Для этого можно указать iwconfig_eth0="mode managed" в /etc/conf.d/net.

Это довольно просто, не так ли? Однако, нужно настроить саму программу wpa_supplicant, что значительно сложнее. Сложность зависит от степени защиты точек доступа, к которым вы собираетесь подключаться. Следующий упрощенный пример взят из /etc/wpa_supplicant.conf.example, поставляемого в составе wpa_supplicant.

Листинг 291. Пример /etc/wpa_supplicant.conf

# следующую строку нельзя изменять, иначе программа не сможет работать
ctrl_interface=/var/run/wpa_supplicant

# ограничим доступ к настройкам WPA только для root
ctrl_interface_group=0

# пусть wpa_supplicant заботится о сканировании и выборе точки доступа
ap_scan=1

# простой случай: WPA-PSK, согласованный ключ - текстовая строка,
# принимать любой допустимый шифр
network={
  ssid="просто"
  psk="очень тайный пароль"
  # чем выше приоритет, тем скорее выбор
  priority=5
}

# как в предыдущем, но с запросом сканирования по определенному SSID
# (для точек доступа, отклоняющих широковешательный SSID)
network={
  ssid="второй ssid"
  scan_ssid=1
  psk="очень тайный пароль"
  priority=2
}

# использовать только WPA-PSK; принимать любое допустимое сочетание шифров

network={
  ssid="пример"
  proto=WPA
  key_mgmt=WPA-PSK
  pairwise=CCMP TKIP
  group=CCMP TKIP WEP104 WEP40
  psk=06b4be19da289f475aa46a33cb793029d4ab3db7a23ee92382eb0106c72ac7bb
  priority=2
}

# открытое подключение без шифрования (не WPA, не IEEE #802.1X)

network={
  ssid="тест-открытого-текста"
  key_mgmt=NONE
}

# подключение с общим ключом WEP (не WPA, не IEEE #802.1X)
network={
  ssid="тест-статического-wep"
  key_mgmt=NONE
  wep_key0="abcde"
  wep_key1=0102030405
  wep_key2="1234567890123"
  wep_tx_keyidx=0
  priority=5
}

# подключение с общим ключом WEP (не WPA, не IEEE #802.1X),
# допуск c использованим общего ключа IEEE 802.11
network={
  ssid="тест2-статического-wep"
  key_mgmt=NONE
  wep_key0="abcde"
  wep_key1=0102030405
  wep_key2="1234567890123"
  wep_tx_keyidx=0
  priority=5
  auth_alg=SHARED
}

# сеть IBSS/ad-hoc с WPA-None/TKIP
network={
  ssid="тест adhoc"
  mode=1
  proto=WPA
  key_mgmt=WPA-NONE
  pairwise=NONE
  group=TKIP
  psk="тайный пароль"
}


4.4.3. Утилиты Wireless tools

4.4.3.1. Начальная установка и режим ведомого

Wireless Tools обеспечивают общий способ настройки базовых беспроводных интерфейсов, вплоть до защиты WEP. Хотя WEP является слабым методом защиты, он наиболее распространен.

Для настройки Wireless Tools служат несколько основных переменных. В примере файла настроек, приведенном ниже, описано все, что вам потребуется. Нужно помнить, что отсутствие настройки означает «подключаться к нешифрующей точке доступа с самым сильным сигналом». Программа будет всегда пытаться подключить вас к чему-нибудь.

Листинг 292. Установка wireless-tools

# emerge net-wireless/wireless-tools


Примечание

Хотя вы можете хранить свои параметры настройки беспроводной сети в /etc/conf.d/wireless, это руководство рекомендует хранить их в /etc/conf.d/net.

Важно

Вам понадобится обратиться к документации по именам переменных.

Листинг 293. Пример настройки iwconfig /etc/conf.d/net

# приоритет использования iwconfig над wpa_supplicant
modules=( "iwconfig" )

# Настройка ключей WEP для точек доступа ESSID1 и ESSID2
# Можно указывать до 4 ключей WEP, но только 1 может работать в каждый
# момент, поэтому мы указываем индекс по умолчанию [1], чтобы сделать ключ [1],
# а впоследствии снова, чтобы изменить активный ключ на [1].
# Это нужно, если вы настраиваете другие ESSID на использование WEP-ключей, 
# отличающихся от [1].
#
# Приставка s: перед ключом означает, что ключ текстовый, иначе - 
# шестнадцатиричный
#
# enc open указывает открытую защиту (более безопасно)
# enc restricted указывает ограниченную защиту (менее безопасно)
key_ESSID1="[1] s:ваш-ключ-здесь key [1] enc open"
key_ESSID2="[1] aaaa-bbbb-cccc-dd key [1] enc restricted"
#
# Нижеследующее работает только при поиске доступных точек доступа.

# Иногда видны несколько точек доступа, и требуется задать
# предпочтительный порядок подключения
preferred_aps=( "ESSID1" "ESSID2" )


4.4.3.2. Настройка порядка выбора точки доступа

Можно указать несколько дополнительных параметров для уточнения порядка выбора точки доступа, но обычно этого не требуется.

Вам решать, подключаться ли только к указанным точкам доступа, или нет. По умолчанию, если подключение ко всем настроенным точкам доступа не удалось, и есть возможность подключиться к не шифрующей точке доступа, такое соединение произойдет. Этот порядок зависит от переменной associate_order. Ниже приводится таблица значений и с описанием их действия:

Значение

Описание

any

поведение по умолчанию

preferredonly

соединяться только с видимыми точками доступа из списка

forcepreferred

принудительно подключаться к точкам доступа в заданной последовательности, если они не обнаружены при сканировании

forcepreferredonly

не сканировать точки доступа, просто пытаться подключиться к каждой по списку

forceany

так же, как в forcepreferred + подключаться к любой доступной точке доступа

Наконец, мы можем указать blacklist_aps и unique_ap. blacklist_aps работает подобно preferred_aps. unique_ap устанавливается в yes или no, указывая, можно ли подключать второй беспроводной интерфейс к той же точке доступа, что и первый.

Листинг 294. Пример blacklist_aps и unique_ap

# иногда требуется полностью исключить возможность подключения
# к определенным точкам доступа
blacklist_aps=( "ESSID3" "ESSID4" )

# если у вас несколько беспроводных плат, можно указать, можно ли им
# подключаться к одной и той же точке доступа
# значение - "yes" или "no"
# по умолчанию - "yes"
unique_ap="yes"


4.4.3.3. Режим отдельного и ведущего узла

Если вы хотите становиться отдельным узлом (ad hoc), когда не удается подключиться ни к какой точке доступа в ведомом режиме, это тоже возможно.

Листинг 295. Откат к режиму отдельного узла

adhoc_essid_eth0="Этот отдельный узел"


Как насчет подключения к сетям Ad-Hoc или запуска в режиме ведущего (master), чтобы стать точкой доступа? Есть конфигурация и для такой работы! Вам может потребоваться определить WEP-ключи, как показано выше.

Листинг 296. Пример настройки ad-hoc/master

# установка режима: допускается managed (ведомый, по умолчанию),
# ad-hoc (отдельный) или или master (ведущий). Не все драйверы поддерживают 
# каждый режим 
mode_eth0="ad-hoc"

# установка ESSID интерфейса
# в ведомом режиме заставляет интерфейс пытаться подключиться к указанному
# ESSID, и больше ничего
essid_eth0="Этот отдельный узел"

# если не указан, используется канал 3
channel_eth0="9"


Важно

Следующий текст взят дословно из документации BSD wavelan, входящей в документацию NetBSD. «Существуют 14 каналов. Нам сообщили, что использование каналов с 1 по 11 является законным в Северной Америке, каналов с 1 по 13 — в большинстве стран Европы, каналов с 10 по 13 — во Франции, и только канала 14 — в Японии. Если у вас есть сомнения, обратитесь к документации от вашей платы или точки доступа. Убедитесь что выбранный канал совпадает с каналом точки доступа (или другой платы в сети ad-hoc). По умолчанию на платах, продаваемых в Северной Америке и большинстве стран Европы, настроен канал 3; на платах, продаваемых во Франции — канал 11; на платах, продаваемых в Японии — канал 14.»

4.4.3.4. Устранение неполадок в wireless tools

Существуют дополнительные переменные, которые можно использовать для запуска своего беспроводного оборудования и устранения неполадок, возникших из-за драйвера или проблем с сетевым окружением. Ниже приведена таблица прочих функций, которые можно перепробовать:

Переменная

Значение по умолчанию

Описание

iwconfig_eth0

За подробными сведениями о параметрах iwconfig обращайтесь к странице справки iwconfig.

iwpriv_eth0

За подробными сведениями о параметрах iwpriv обращайтесь к странице справки iwpriv

sleep_scan_eth0

0

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

sleep_associate_eth0

5

Время ожидания связи интерфейса с точкой доступа (в секундах) перед переходом к опросу следующей

associate_test_eth0

MAC

Некоторые драйверы не сбрасывают MAC-адрес, связанный с недоступной точкой доступа, при потере или попытки связи. Некоторые драйверы не сбрасывают значение качества сигнала при потере или попытке соединения. Допустимые значения: MAC, quality и all.

scan_mode_eth0

Некоторым драйверам необходимо сканировать в режиме ad-hoc. Если сканирование не удается, попробуйте указать здесь ad-hoc.

iwpriv_scan_pre_eth0

Посылать интерфейсу некоторые команды iwpriv перед сканированием. За дополнительными сведениями обращайтесь к странице справки iwpriv.

iwpriv_scan_post_eth0

Посылать интерфейсу некоторые команды iwpriv после сканирования. За дополнительными сведениями обращайтесь к странице справки iwpriv.

4.4.4. Раздельная настройка сети по ESSID

Иногда необходим статический IP при соединении с ESSID1, и DHCP при соединении с ESSID2. На деле, большинство переменных модуля можно определять раздельно по ESSID. Вот как это сделать:

Примечание

Примечание: Это работает при использовании WPA Supplicant или Wireless Tools.

Важно

Вам потребуется свериться с документацией по именам переменных.

Листинг 297. Назначение сетевых настроек для ESSID

config_ESSID1=( "192.168.0.3/24 brd 192.168.0.255" )
routes_ESSID1=( "default via 192.168.0.1" )

config_ESSID2=( "dhcp" )
fallback_ESSID2=( "192.168.3.4/24" )
fallback_route_ESSID2=( "default via 192.168.3.1" )

# можно также указать сервера имен и др.
# ПРЕДУПРЕЖДЕНИЕ: DHCP переопределит настройки, если не указано иное
dns_servers_ESSID1=( "192.168.0.1" "192.168.0.2" )
dns_domain_ESSID1="some.domain"
dns_search_domains_ESSID1="search.this.domain search.that.domain"

# перенастройка производится по МАС-адресу точки доступа;
# это полезно, когда в разных местах есть точки доступа с одинаковым ESSID
config_001122334455=( "dhcp" )
dhcpcd_001122334455="-t 10"
dns_servers_001122334455=( "192.168.0.1" "192.168.0.2" )


4.5. Дополнительные возможности

4.5.1. Стандартные функции-обработчики

Можно определить четыре функции, которые вызываются при операциях запуска (start) и останова (stop). При вызове функциям передается название интерфейса, так что одна и та же функция может управлять несколькими адаптерами.

Для указания на то, что запуск или останов интерфейса может продолжаться, возвращаемое значение функций preup() и predown() должно быть нулевым (успешным). Если preup() возвращает ненулевое значение, запуск интерфейса прерывается. Если predown() возвращает ненулевое значение, не допускается продолжение останова интерфейса.

Возвращаемые значение функций postup() и postdown() игнорируется, так как показываемая ими ошибка не обрабатывается.

  1. ${IFACE} присваивается название запускаемого/останавливаемого интерфейса.

  2. ${IFVAR} — это значение ${IFACE}, преобразованное в имя переменной, разрешенное в bash.

Листинг 298. Примеры функций до/после запуска/останова

preup() {
  # Проверка соединения интерфейса перед его запуском. Она
  # работает лишь с некоторыми сетевыми адаптерами и требует наличия
  # установленного пакета mii-diag.
  if mii-tool ${IFACE} 2> /dev/null | grep -q 'no link'; then
    ewarn "Интерфейс ${IFACE} не подключен, прерывание запуска"
    return 1
  fi

  # Проверка соединения интерфейса перед его запуском. Она
  # работает лишь с некоторыми сетевыми адаптерами и требует наличия
  # установленного пакета ethtool.
  if ethtool ${IFACE} | grep -q 'Link detected: no'; then
    ewarn "Интерфейс ${IFACE} не подключен, прерывание запуска"
    return 1
  fi

  # Не забываем вернуть 0 при успехе
  return 0
}

predown() {
  # Назначение этого сценария - проверить наличие корня NFS
  # и в этом случае предотвратить останов интерфейсов. Заметьте, что
  # определяя функцию predown(), вы отменяете существующую логику. 
  # Вот она, на случай если все же понадобится...
  if is_net_fs /; then
    eerror "Корневая ФС смонтирована в сети - останов ${IFACE} невозможен"
    return 1
  fi

  # Не забываем вернуть 0 при успехе
  return 0
}

postup() {
  # Эту функцию можно использовать, например, для регистрации в
  # службе динамического DNS. Другой пример - отправка/прием почты после
  # запуска интерфейса.
       return 0
}

postdown() {
  # Эта функция приводится в основном для полноты... Я не придумал,
  # что бы ценное в нее поместить ;-)
  return 0
}


4.5.2. Функции-обработчики wireless tools

Примечание

Это не работает вместе с WPA Supplicant, но переменные ${ESSID} и ${ESSIDVAR} доступны в функции postup().

Можно определить две функции, вызываемые до и после функции подключения (associate). При вызове им сначала передается название интерфейса, так что одна и та же функция может управлять несколькими адаптерами.

Для указания на то, что запуск или останов интерфейса можно продолжать, возвращаемое значение функции preassociate() должно быть нулевым (успешным). Если preassociate() возвращает ненулевое значение, запуск интерфейса прерывается.

Возвращаемое значение функции postassociate() игнорируется, так как показываемая ей ошибка не обрабатывается.

${ESSID} присваивается точный ESSID точки доступа, к которой вы подключаетесь. ${ESSIDVAR} — это ${ESSID}, преобразованный в имя переменной, разрешенное в bash.

Листинг 299. Функции до/после соединения

preassociate() {
  # Ниже добавляются две конфигурационных переменных, leap_user_ESSID
  # и leap_pass_ESSID. Когда они обе настроены на подключаемый ESSID,
  # мы запускаем сценарий CISCO LEAP

  local user pass
  eval user=\"\$\{leap_user_${ESSIDVAR}\}\"
  eval pass=\"\$\{leap_pass_${ESSIDVAR}\}\"

  if [[ -n ${user} && -n ${pass} ]]; then
    if [[ ! -x /opt/cisco/bin/leapscript ]]; then
      eend "Для поддержки LEAP, выполните emerge net-misc/cisco-aironet-client-utils"
      return 1
    fi
    einfo "Ожидание допуска LEAP на \"${ESSID//\\\\//}\""
    if /opt/cisco/bin/leapscript ${user} ${pass} | grep -q 'Login incorrect'; then
      ewarn "Вход пользователя ${user} не удался"
      return 1
    fi
  fi

  return 0
}

postassociate() {
  # Эта функция приводится в основном для полноты... Я не придумал,
  # что бы ценное в нее поместить ;-)

  return 0
}


Примечание

${ESSID} и ${ESSIDVAR} недоступны в функциях predown() и postdown().

4.6. Управление сетью

4.6.1. Управление сетью

Если вы часто берете компьютер в поездки, то у вас не всегда может быть возможность подключения к сети Ethernet или к беспроводной точке доступа. Но мы можем захотеть, чтобы сеть заработала автоматически, как только к компьтеру подключен кабель Ethernet или найдена беспроводная точка доступа.

Здесь вы найдете некоторые инструменты, которые помогут это организовать.

Примечание

В этом документе рассказывается только о ifplugd, но есть и альтернативные решения, например, quickswitch.

4.6.2. ifplugd

ifplugd — это программа, которая запускает и останавливает интерфейс при подключении или отключении кабеля к сети Ethernet. Также она может обработать подключение к беcпроводной точке доступа или появление новых точек доступа.

Листинг 300. Установка ifplugd

# emerge sys-apps/ifplugd


Настройка ifplugd — довольно простая задача. Файл конфигурации расположен по адресу: /etc/conf.d/ifplugd. Для просмотра подробного описания переменных запустите man ifplugd.

Листинг 301. Пример конфигурации ifplug

# назначение интерфейса для слежения
INTERFACES="eth0"

AUTO="no"
BEEP="yes"
IGNORE_FAIL="yes"
IGNORE_FAIL_POSITIVE="no"
IGNORE_RETVAL="yes"
POLL_TIME="1"
DELAY_UP="0"
DELAY_DOWN="0"
API_MODE="auto"
SHUTDOWN="no"
WAIT_ON_FORK="no"
MONITOR="no"
ARGS=""

# дополнителные параметры ifplugd для указанного интерфейса.
# учтите, установки глобальных переменных игнорируются, если указаны значения
# для конкретного интерфейса
MONITOR_wlan0="yes"
DELAY_UP_wlan0="5"
DELAY_DOWN_wlan0="5"


Пред.: Работа с PortageВ началоУровень выше: Настольная книга Gentoo Linux x86
В началоНастольная книга Gentoo Linux x86 → Настройка сети в Gentoo