В начало → Настольная книга Gentoo Linux x86 → Настройка сети в Gentoo |
В документе предполагается, что вы правильно сконфигурировали свое ядро и модули для оборудования, и вам известно интерфейсное
имя устройств. Мы также предполагаем, что вы настраиваете 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
Переменная 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 обсуждаются позже.
Сценарии инициализации в /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.
Имена переменных являются динамическими. Обычно они следуют структуре 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.
Сейчас мы поддерживаем модульные сетевые сценарии. Это значит, что мы можем легко добавлять поддержку для новых типов интерфейсов и конфигурационных модулей, сохраняя совместимость с существующими.
По умолчанию, модули загружаются только если пакет, нужный им, установлен. Если отметить модуль, для которого не установлен пакет, будет выдана ошибка с указанием, какой пакет нужно установить. В идеале, настройка модулей требуется только тогда, когда установленно несколько пакетов, представляющих одну и ту же службу, а вам установить приоритет одного из них.
Все обсуждаемые значения хранятся в /etc/conf.d/net
, если явно не указано иное.
Листинг 276. Предпочтение модуля
# выбор iproute2, а не ifconfig modules=( "iproute2" ) # можно также указать другие модули для отдельного интерфейса # здесь мы выбираем udhcpc, а не dhcpcd modules_eth0=( "udhcpc" ) # также можно указать, какие модули не надо использовать: например, # возможно, вы используете supplicant или linux-wlan-ng для управления # параметрами беспроводной сети, но при этом желаете настраивать сетевые # параметры раздельно для каждого связанного ESSID modules=( "!iwconfig" )
Сейчас мы предоставляем два обработчика интерфейса: ifconfig и iproute2. Для настройки сети вам нужен только один из них.
ifconfig в текущем Gentoo используется по умолчанию, и включен в системный профиль.
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" )
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, используйте
(замените модуль на имя используемого модуля DHCP, например, модуль
_eth0="..."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, поэтому его больше не требуется указывать.
Сначала нужно установить программное обеспечение для ADSL.
В 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
.
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" )
Для объединения каналов в ствол (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 }
Для поддержки мостов установите 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 }
Для использования некоторых вариантов моста вам может потребоваться обращение к документации по именам переменных.
Для изменения 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"
Для образования тоннеля вам не нужно ничего устанавливать, поскольку на это способен сам обработчик интерфейса.
Листинг 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" )
Для поддержки 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 вам может потребоваться обращение к документации по именам переменных.
В настоящее время поддерживается подключение к беспроводной сети с помощью wireless-tools или wpa_supplicant. Важно помнить, что подключение к беспроводным сетям настраивается глобально, а не для определённого интерфейса.
wpa_supplicant — лучший выбор, но он поддерживает не все драйверы. Список поддерживаемых драйверов находится на сайте wpa_suppliant. Кроме того, сейчас wpa_supplicant может подключаться только к тем сетям, на SSID которых настроен.
wireless-tools поддерживает практически все платы и драйверы, но не способен подключаться к точкам доступа, работающим исключительно с WPA.
Драйвер linux-wlan-ng в данный момент не поддерживается в baselayout. Это из-за того, что в linux-wlan-ng своя собственная программа установки и настройки, которая ни на что не похожа. Разработчики linux-wlan-ng, по слухам, собираются перейти на установку как в wireless-tools; когда это произойдет, вы сможете использовать linux-wlan-ng с baselayout.
Запросчик WPA (WPA Supplicant) — пакет, позволяющий подсоединяться к точкам доступа с протоколом WPA. Его настройка проходит достаточно гладко, и пакет работает достаточно стабильно, хотя находится на стадии бета-тестирования.
Для работы 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="тайный пароль" }
Wireless Tools обеспечивают общий способ настройки базовых беспроводных интерфейсов, вплоть до защиты WEP. Хотя WEP является слабым методом защиты, он наиболее распространен.
Для настройки 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" )
Можно указать несколько дополнительных параметров для уточнения порядка выбора точки доступа, но обычно этого не требуется.
Вам решать, подключаться ли только к указанным точкам доступа, или нет. По умолчанию, если подключение ко всем настроенным
точкам доступа не удалось, и есть возможность подключиться к не шифрующей точке доступа, такое соединение произойдет. Этот
порядок зависит от переменной 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"
Если вы хотите становиться отдельным узлом (ad hoc), когда не удается подключиться ни к какой точке доступа в ведомом режиме, это тоже возможно.
Как насчет подключения к сетям 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.»
Существуют дополнительные переменные, которые можно использовать для запуска своего беспроводного оборудования и устранения неполадок, возникших из-за драйвера или проблем с сетевым окружением. Ниже приведена таблица прочих функций, которые можно перепробовать:
Переменная |
Значение по умолчанию |
Описание |
---|---|---|
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. |
Иногда необходим статический 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" )
Можно определить четыре функции, которые вызываются при операциях запуска (start) и останова (stop). При вызове функциям передается название интерфейса, так что одна и та же функция может управлять несколькими адаптерами.
Для указания на то, что запуск или останов интерфейса может продолжаться, возвращаемое значение функций preup()
и predown()
должно быть нулевым (успешным). Если preup() возвращает ненулевое значение, запуск интерфейса прерывается. Если predown()
возвращает ненулевое значение, не допускается продолжение останова интерфейса.
Возвращаемые значение функций postup()
и postdown()
игнорируется, так как показываемая ими ошибка не обрабатывается.
${IFACE}
присваивается название запускаемого/останавливаемого интерфейса.
${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 }
Это не работает вместе с 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()
.
Если вы часто берете компьютер в поездки, то у вас не всегда может быть возможность подключения к сети Ethernet или к беспроводной точке доступа. Но мы можем захотеть, чтобы сеть заработала автоматически, как только к компьтеру подключен кабель Ethernet или найдена беспроводная точка доступа.
Здесь вы найдете некоторые инструменты, которые помогут это организовать.
В этом документе рассказывается только о ifplugd, но есть и альтернативные решения, например, quickswitch.
ifplugd — это программа, которая запускает и останавливает интерфейс при подключении или отключении кабеля к сети Ethernet. Также она может обработать подключение к беcпроводной точке доступа или появление новых точек доступа.
Настройка 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"
В начало → Настольная книга Gentoo Linux x86 → Настройка сети в Gentoo |