Gentoo Linux amd64 Handbook: Настройка сети

From Gentoo Wiki
Jump to:navigation Jump to:search
This page is a translated version of the page Handbook:AMD64/Full/Networking and the translation is 100% complete.



Следующая часть руководства описывает «продвинутую» настройку сети для систем, работающих под управлением системы инициализации OpenRC, используя netifrc в качестве системы управления сетью.

Для систем, работающих под управлением systemd, читателям следует ознакомиться с частью по настройке сети статьи systemd.

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

В этом руководстве о сети предполагается, что пользователь правильно настроил систему и определил имя (имена) сетевого интерфейса. Имя сетевого интерфейса создается на основе расположения сетевой карты на шине. Поэтому есть множество имен сетевых интерфейсов включая: eno0, ens1, wlan0, enp1s0 и так далее. В разных система имена могут различаться. Далее подразумевается, что имя настроенного сетевого интерфейса — eth0. Хотя будут работать и другие из вышеупомянутых сетевых имен, если их подставлять.

В начале настройки сетевой карты, нужно рассказать об этом системе Gentoo RC. Это делается путем создания символьной ссылки с net.lo на net.eth0 (или что-либо другое, в зависимости от названия сетевого интерфейса) в /etc/init.d.

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

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

ФАЙЛ /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"
dns_servers_eth0="192.168.0.1 8.8.8.8"
  
# Статический IP-адрес, запись с маской подсети
config_eth0="192.168.0.7 netmask 255.255.255.0"
routes_eth0="default via 192.168.0.1"
dns_servers_eth0="192.168.0.1 8.8.8.8"
Заметка
Если конфигурация для интерфейса не указывается, предполагается использование DHCP.
Заметка
CIDR расшифровывается как Classless InterDomain Routing (бесклассовая междоменная маршрутизация). Изначально, адреса IPv4 были разделены на классы A, B и C. Ранняя система классификации не была рассчитана на массовую популярность интернета, и попала под угрозу исчерпания новых уникальных адресов. CIDR - это схема адресации, позволяющая одному IP-адресу обозначать множество IP-адресов. IP-адрес CIDR выглядит как обычный IP-адрес с добавлением косой черты и числа; например, 192.168.0.0/16. CIDR описывается в RFC 1519.

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

root #rc-service net.eth0 start
root #rc-service net.eth0 stop
Важно
При поиске неисправностей сети взгляните на /var/log/rc.log. В данном лог файле можно найти информацию об активности при загрузке системы, если только переменная rc_logger не установлена в значение NO в файле /etc/rc.conf.

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

root #rc-update add net.eth0 default
root #rc
Заметка
Последняя команда rc указывает Gentoo, что нужно запустить в текущем уровне запуска любые еще не запущенные скрипты.





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

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

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

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

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

Можно соединить эти значения вместе. Вот несколько практических примеров:

ФАЙЛ /etc/conf.d/netПримеры конфигурации
# Добавление трёх адресов 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
Важно
Для fallback важен порядок! Если опция null не была указана, то apipa будет работать только в случае неудачи noop.
Заметка
APIPA и DHCP будут рассмотрены позже.

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

Init-скрипты в /etc/init.d/ могут зависеть от конкретного сетевого интерфейса или просто от "net". Все сетевые интерфейсы в системе инициализации Gentoo обеспечивают то, что называется "net".

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

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

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

Ответ в определении настройки rc_net_{interface}_need в /etc/conf.d/net:

ФАЙЛ /etc/conf.d/netДобавление зависимости для net.br0
rc_net_br0_need="net.eth0 net.eth1"

Этого, однако, не достаточно, как такового. Сетевые init-скрипты в Gentoo используют виртуальную зависимость, которая называется "net", которая информирует систему о том, что сеть доступна. Очевидно, что и в предыдущем случае, сеть должна быть помечена как доступной, только тогда, когда поднят интерфейс net.br0, а не другие. Таким образом, мы должны написать в /etc/conf.d/net так:

ФАЙЛ /etc/conf.d/netОбновление виртуальных зависимостей и положений для сети
rc_net_eth0_provide="!net"
rc_net_eth1_provide="!net"

За подробной информацией о зависимостях обратитесь к разделу о написании init-скриптов в Gentoo Handbook. Больше информации о /etc/rc.conf доступно в виде комментариев в самом файле.

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

Имена переменных динамичны. Как правило, они следуют следующей структуре variable_${interface|mac|essid|apmac}. Например, переменная dhcpcd_eth0 содержит значение для опций dhcpcd на интерфейсе eth0, а dhcpcd_essid содержит опции для dhcpcd при подключении любой из интерфейсов к ESSID "essid".

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

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

Другой недостаток баш проявляется в содержании переменных; некоторые символы должны быть экранированы. Это можно сделать путем добавления \ (обратного слэша) перед символами, которые должны быть экранированы. Ниже приведен список символов, которые должны быть экранированы таким образом: ", ' и \.

В это примере мы использовали беспроводной ESSID, поскольку они могут содержать большое количество символов. Мы будем использовать идентификатор ESSID My "\ NET:

ФАЙЛ /etc/conf.d/netИмена переменных
# это будет работать, но домен не действительный
dns_domain_My____NET="My \"\\ NET"

Настройка выше устанавливает DNS домен в My "\ NET, когда беспроводная карта подключена к точке доступа у которой ESSID My "\ NET.

Именование сетевых интерфейсов

Как это работает

Имена сетевых интерфейсов не выбираются произвольно: ядро Linux и менеджер устройств (в большинстве систем используется Udev в качестве менеджера устройства, хотя могут быть другие варианты) выбирают имя сетевого интерфейса через фиксированный набор правил.

В случае обнаружения сетевой карты в системе, ядро Linux собирает необходимые данные об этой карте. В которые входят:

  • Для встроенных (работающие на основной шине (не PCI, актуально для SoC)) регистрируется имя сетевой карты; позже будет видно в ID_NET_NAME_ONBOARD.
  • Слот в который подключена сетевая карта; позже будет виден в ID_NET_NAME_SLOT.
  • Путь по которому можно получить доступ к сетевой карте; позже будет виден в ID_NET_NAME_PATH.
  • MAC-адрес (предоставляемый поставщиком) сетевой карты; позже будет виден в ID_NET_NAME_MAC.

Основываясь на этой информации менеджер устройств определяет как назвать устройство. По умолчанию, он назначает первое значение из первых трех переменных выше (ID_NET_NAME_ONBOARD, _SLOT или _PATH). Например, если ID_NET_NAME_ONBOARD найден и задан как eno1, тогда интерфейс будет называться как eno1.

Значения переменных для интерфейса можно получить следующей командой udevadm:

root #udevadm test-builtin net_id /sys/class/net/enp3s0 2>/dev/null
ID_NET_NAME_MAC=enxc80aa9429d76
ID_OUI_FROM_DATABASE=Quanta Computer Inc.
ID_NET_NAME_PATH=enp3s0

Поскольку (а это так и есть), первое значение из трех главных переменных это переменная ID_NET_NAME_PATH, ее значение используется в качестве имени интерфейса. Если ни одна из переменных не содержит значение, то система возвращается к предоставляемой ядром схеме именования (eth0, eth1 и так далее)

Использование именования в старом стиле (ядром)

До введения нового стиля именования сетевым интерфейсам присваивались имена самим ядром Linux на основе того, как были загружены драйвера (именование также зависело от других непонятных причин). Такое поведение все еще может быть включено при помощи настройки net.ifnames=0 как загрузочного параметра в загрузчике.

Использование пользовательских имен

Основная идея пользовательских имен предназначена не для запутывания людей, а сделать изменения имен сетевых интерфейсов проще. Предположим, что в системе имеется два интерфейса, которые обычно называются eth0 и eth1. Один подразумевает доступ к сети через провода, другой подразумевает под собой беспроводной доступ. Если использовать поддержку именования интерфейса, пользователи могли бы называть интерфейсы lan0 (проводной) и wifi0 (беспроводной); что поможет избежать от использования хорошо известных имен eth* и wlan*, так как их именование остается не точным.

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

root #udevadm test-builtin net_id /sys/class/net/eth0 2>/dev/null
ID_NET_NAME_MAC=enxc80aa9429d76
ID_OUI_FROM_DATABASE=Quanta Computer Inc.
root #vim /etc/udev/rules.d/70-net-name-use-custom.rules
# Используется информация о MAC и число 70- , чтобы быть перед другими правилами
SUBSYSTEM=="net", ACTION=="add", ATTR{address}=="c8:0a:a9:42:9d:76", NAME="lan0"
root #vim /etc/udev/rules.d/76-net-name-use-custom.rules
# Затем используется информация из ID_NET_NAME_PATH и число 76- , 
# чтобы быть между правилами 75-net-*.rules и 80-net-*.rules
SUBSYSTEM=="net", ACTION=="add", ENV{ID_NET_NAME_PATH}=="enp3s0", NAME="wifi0"

Поскольку эти правила запускаются до любого правила, которые обычно идут по умолчанию (правила запускаются в алфавитном порядке, поэтому 70 сработает до 80), имена, приведенные в файле правил выше, будут использоваться вместо обычно используемых по умолчанию. Номер в имени файла должен быть между 76 и 79 (переменное окружение определяется правилами, которые начинаются с 75, а запасной вариант присвоения имен делается в правиле 80).





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

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

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

Заметка
Все обсуждаемое применимо к /etc/conf.d/net, если не указано иное.
ФАЙЛ /etc/conf.d/netНастройка модулей
# Использовать ifconfig вместо iproute2
# modules="ifconfig"
  
# Можно также указывать другие модули на уровне интерфейса
# Здесь используется dhclient вместо dhcpcd
modules_eth0="dhclient"
  
# Можно также указывать, какие модули не использовать, например,
# использовать supplicant или linux-wlan-ng для управления беспроводной сетью,
# но при этом сетевые настройки производить на уровне связанных с ними ESSID.
modules="!iwconfig"

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

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

Оба установлены по умолчанию как часть системного профиля. iproute2 — более мощный и гибкий пакет. ifconfig и net-tools больше не должны использоваться для конфигурирования сетевых настроек.

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

ФАЙЛ /etc/conf.d/netПример конфигурации
config_eth0="192.168.0.2/24"
config_eth0="192.168.0.2 netmask 255.255.255.0"

DHCP

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

DHCP может быть предоставлен модулями dhclient или dhcpcd. Каждый модуль DHCP имеет свои плюсы и минусы — вот краткое описание:

Модуль DHCP Пакет Плюсы Минусы
dhclient net-misc/dhcp Создан ISC, те же самые люди, которые создали BIND DNS. Имеет множество настроек. Может использоваться для работы DHCPv4 и DHCPv6. Конфигурация очень сложна, программа «раздута», не может получить сервер NTP от DHCP, по умолчанию не отправляет имя хоста. Больше не поддерживается разработчиками.
dhcpcd net-misc/dhcpcd Давно в Gentoo по умолчанию, не зависит от других утилит, активно развивается Gentoo. Одновременно предоставляет поддержку DHCPv4 и DHCPv6. Иногда бывает медленным, не «демонизируется» при неограниченной аренде адреса.

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

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

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

release
освобождать IP-адрес для повторного использования (во время остановки сервиса)
nodns
не перезаписывать /etc/resolv.conf
nontp
не перезаписывать /etc/ntp.conf
nonis
не перезаписывать /etc/yp.conf
ФАЙЛ /etc/conf.d/netПример конфигурации DHCP (v4)
# Необходимо указывать, если установлено больше одного модуля DHCP
modules="dhcpcd"
  
config_eth0="dhcp"
dhcpcd_eth0="-t 10" # таймаут после 10 секунд
dhcp_eth0="release nodns nontp nonis" # только получить адрес
Заметка
По умолчанию dhcpcd отправляет имя хоста на сервер DHCP, поэтому больше не нужно это специально указывать.
ФАЙЛ /etc/conf.d/netПример конфигурации DHCPv6
# Необходимо указывать, если установлено больше одного модуля DHCP
modules="dhclient"
  
config_eth0="dhcpv6"
# Чтобы использовать и DHCPv4, и DHCPv6 в сети, поддерживающей оба протокола, удалите предыдущую строку и раскомментируйте следующие строки
#config_eth0="dhcp
#dhcpv6"

# Чтобы передать параметры запуска в dhclient для DHCPv6
dhclientv6_eth0="-t 10" # Таймаут после 10 секунд

# Установка общих параметров DHCPv6
dhcpv6_eth0="release nodns nontp nonis nogateway nosendhost"

ADSL с PPPoE/PPPoA

Во-первых, установите программное обеспечение ADSL:

root #emerge --ask net-dialup/ppp

Во-вторых, создайте сетевой скрипт для PPP и Ethernet интерфейса, который будет использовать PPP:

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

Убедитесь, что в файле /etc/rc.conf установили rc_depend_strict в YES.

Теперь мы должны настроить /etc/conf.d/net.

ФАЙЛ /etc/conf.d/netБазовая настройка PPPoE
config_eth0=null #(укажите необходимый сетевой интерфейс)
config_ppp0="ppp"
link_ppp0="eth0" #(укажите необходимый сетевой интерфейс)
plugins_ppp0="pppoe"
username_ppp0='user'
password_ppp0='password'
pppd_ppp0="
noauth
defaultroute
usepeerdns
holdoff 3
child-timeout 60
lcp-echo-interval 15
lcp-echo-failure 3
noaccomp noccp nobsdcomp nodeflate nopcomp novj novjccomp"
  
rc_net_ppp0_need="net.eth0"

Также можно указать пароль в /etc/ppp/pap-secrets.

ФАЙЛ /etc/ppp/pap-secretsОбразец pap-secrets
# «*» — важна
"username"  *  "password"

Если PPPoE настраивается на USB-модеме, убедитесь, что установили br2684ctl. Пожалуйста, прочтите /var/db/repos/gentoo/net-dialup/speedtouch-usb/files/README для получения информации о том как его правильно настроить.

Важно
Пожалуйста, внимательно прочтите раздел о ADSL и PPP в /usr/share/doc/netifrc-*/net.example.bz2. Там содержится много хорошо описанных примеров для любой настройки PPP, которые могут понадобятся.

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

APIPA пытается найти свободный ip-адрес из диапазона 169.254.0.0-169.254.255.255 с помощью арпинга на интерфейсе (arping) случайного адреса из этого диапазона сети. Если ответа не приходит, то назначается этот ip-адрес для интерфейса.

This is only useful for LANs where:

  • there is no DHCP server;
  • the system doesn't connect directly to the Internet; and
  • all other computers use APIPA.

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

ФАЙЛ /etc/conf.d/netКонфигурация APIPA
# пробуем сперва DHCP. Если это не удается, переходим к APIPA
config_eth0="dhcp"
fallback_eth0="apipa"
  
# просто используем APIPA
config_eth0="apipa"

Агрегация интерфейсов

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

Есть множество способов настройки агрегации интерфейсов. Некоторые из них, такие как 802.3ad LACP mode, требуют поддержки и дополнительной конфигурации со стороны сетевого коммутатора. Для уточнения отдельных опций, пожалуйста, обратитесь к /usr/src/linux/Documentation/networking/bonding.txt.

Сперва, очистите конфигурацию для требуемых интерфейсов:

ФАЙЛ /etc/conf.d/netОчищаем конфигурацию интерфейса
config_eth0="null"
config_eth1="null"
config_eth2="null"

Далее, настройте агрегацию (bonding) между сетевыми интерфейсами:

ФАЙЛ /etc/conf.d/netНастройка агрегации
slaves_bond0="eth0 eth1 eth2"
config_bond0="192.168.100.4/24"
# выберите необходимый режим и дополнительные параметры конфигурации
mode_bond0="balance-alb"

Удалите сервисы net.eth* с уровня запуска, создайте net.bond0 и добавьте его на необходимый уровень запуска.

Объединение типа «мост» (поддержка 802.1d)

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

ФАЙЛ /etc/conf.d/netКонфигурация сетевого моста
# конфигурация моста - "man brctl" для уточнения деталей
bridge_forward_delay_br0=0
bridge_hello_time_br0=200
bridge_stp_state_br0=1
  
# добавление сетевых интерфейсов в мост br0
bridge_br0="eth0 eth1"
  
# необходимо настроить значение null, чтобы dhcp не пытался настроить интерфейс
config_eth0="null"
config_eth1="null"
  
# и наконец назначить мосту адрес - также можно использовать DHCP
config_br0="192.168.0.1/24"
  
# связать в одну зависимость eth0 и eth1, так как для них может потребоваться дополнительная конфигурация
rc_net_br0_need="net.eth0 net.eth1"
Важно
Для настройки некоторых вариантов моста, ознакомьтесь с документацией переменных имен.
Важно
Если сетевой мост использует IPv6, для SLAAC необходимо установить STP в 1, как показано в примере выше.

MAC-адрес

Изменить MAC-адреса сетевых интерфейсов можно с помощью файла конфигурации сети.

ФАЙЛ /etc/conf.d/netПример изменения 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"

Туннелирование

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

ФАЙЛ /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 (поддержка 802.1q)

Для работы с VLAN убедитесь, что установлен sys-apps/iproute2 и используется iproute2 в качестве конфигурационного модуля, а не ifconfig.

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

Для настройки VLAN, сперва укажите номер VLAN в /etc/conf.d/net так:

ФАЙЛ /etc/conf.d/netОпределение чисел VLAN (vlan id)
vlans_eth0="1 2"

Далее, настройте каждый VLAN-интерфейс:

ФАЙЛ /etc/conf.d/netНастройка VLAN-интерфейсов
config_eth0_1="172.16.3.1 netmask 255.255.254.0"
routes_eth0_1="default via 172.16.3.254"
  
config_eth0_2="172.16.2.1 netmask 255.255.254.0"
routes_eth0_2="default via 172.16.2.254"

Конфигурация, специфичная для VLAN, обрабатывается vconfig примерно так:

ФАЙЛ /etc/conf.d/netНастройка VLAN
vlan1_name="vlan1"
vlan1_ingress="2:6 3:5"
eth0_vlan1_egress="1:2"
Важно
Для настройки некоторых вариантов VLAN, ознакомьтесь с документацией переменных имен.





Введение в беспроводную сеть

Настроить беспроводные сети в Linux довольно легко. Есть три способа настроить wifi: графический клиент, текстовые интерфейсы и интерфейсы командной строки.

Самый простой способ это использовать графический клиент, после того как окружение рабочего стола было установлено. Большинство графических клиентов, такие как NetworkManager, довольно просты. Они предлагают простой интерфейс, который позволит оказаться в сети за несколько секунд.

Заметка
В дополнение к основным графическим режимам NetworkManager предлагают также интерфейс в текстовом режиме. Установите пакет net-misc/networkmanager с включенным USE-флагом tools. Утилита nmtui будет особенно полезна тем, кто не использует рабочую среду на основе X или Wayland, но все же хочет использовать простую в использовании утилиту, которая не требует редактирования файлов конфигурации вручную.

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

Здесь перечислены три утилиты, с помощью которых можно настроить беспроводную сеть в командной строке: net-wireless/iw, net-wireless/wireless-tools и net-wireless/wpa_supplicant. Из трех наиболее предпочитаем net-wireless/wpa_supplicant. Важно помнить, что беспроводные сети настраиваются на глобальной основе, а не на основе интерфейса.

net-wireless/iw, приемник программы net-wireless/wireless-tools, поддерживает почти все карты и драйверы, но не может подключаться к точкам доступа WPA. Если в сети используется только WEP-шифрование или они полностью открыты, то net-wireless/iw превосходит другие пакеты благодаря своей простоте.

Некоторые беспроводные сетевые карты отключены по умолчанию. Чтобы включить их, сверьтесь с документацией для используемого аппаратного обеспечения. Некоторые из таких карт могут быть разблокированы с помощью приложения rfkill. В этом случае используйте rfkill list, чтобы увидеть доступные карты, и rfkill unblock INDEX для активации. В противном случае беспроводная карта может быть разблокирована с помощью кнопки, переключателя или специальной комбинации клавиш на ноутбуке.

WPA supplicant

Проект WPA supplicant предоставляет пакет, который позволяет пользователям подключится к точкам доступа с WPA.

root #emerge --ask net-wireless/wpa_supplicant
Важно
Для того чтобы wpa_supplicant смог работать, необходимо, чтобы в ядре было включено CONFIG_PACKET. Чтобы проверить это, выполните:
root #zgrep CONFIG_PACKET /proc/config.gz
root #grep CONFIG_PACKET /usr/src/linux/.config
Заметка
В зависимости от USE-флагов, wpa_supplicant может установить графический интерфейс, написанный на Qt5, который прекрасно сочетается с KDE. Чтобы получить это, включите для пакета net-wireless/wpa_supplicant USE="qt5" .

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

ФАЙЛ /etc/conf.d/netПринудительное использование wpa_supplicant
# Выбирать wpa_supplicant вместо wireless-tools
modules="wpa_supplicant"
Заметка
В случае использования драйвера host-ap необходимо перевести карту в managed mode (управляемый режим), чтобы она работала корректно вместе с wpa_supplicant. Этого можно достигнуть с помощью настройки iwconfig_eth0="mode managed" в /etc/conf.d/net.

Следующее настроит сам wpa_supplicant (что немного сложнее, в зависимости от того, насколько безопасны точки доступа). Пример ниже взят и упрощен из /usr/share/doc/wpa_supplicant-<version>/wpa_supplicant.conf.gz, который поставляется вместе с wpa_supplicant.

ФАЙЛ /etc/wpa_supplicant/wpa_supplicant.confВ какой-то степени упрощённый пример
# Строку ниже не следует изменять, иначе wpa_supplicant откажется работать
ctrl_interface=/var/run/wpa_supplicant
  
# Убедимся, что только root может читать конфигурацию WPA
ctrl_interface_group=0
  
# Пусть wpa_supplicant заботится о сканировании и выборе точек доступа
ap_scan=1
  
# Простой случай: WPA-PSK, PSK как ASCII пароль (passphrase), разрешены все действующие методы шифрования
network={
  ssid="simple"
  psk="very secret passphrase"
  # Чем больше приоритет, тем больше шансов что эта настройка будет использоваться
  priority=5
}
  
# Так же как и в предыдущем случае, но сканируем определенную точку доступа по SSID
# (для точек доступа, которые не сообщают свой SSID (скрытые точки доступа))
network={
  ssid="second ssid"
  scan_ssid=1
  psk="very secret passphrase"
  priority=2
}
  
# Используется только WPA-PSK. Любые действующие комбинации методов шифрования допустимы
network={
  ssid="example"
  proto=WPA
  key_mgmt=WPA-PSK
  pairwise=CCMP TKIP
  group=CCMP TKIP WEP104 WEP40
  psk=06b4be19da289f475aa46a33cb793029d4ab3db7a23ee92382eb0106c72ac7bb
  priority=2
}
  
# Подключение и авторизация с помощью простого текста (без WPA, без IEEE 802.1X)
network={
  ssid="plaintext-test"
  key_mgmt=NONE
}
  
# Соединение с помощью общего WEP-ключа (без WPA, без IEEE 802.1X)
network={
  ssid="static-wep-test"
  key_mgmt=NONE
  # Ключи в кавычках — ASCII ключи
  wep_key0="abcde"
  # Ключи указанные без кавычек — HEX-ключ (шестнадцатеричный ключ)
  wep_key1=0102030405
  wep_key2="1234567890123"
  wep_tx_keyidx=0
  priority=5
}
  
# Соединение с помощью общего WEP-ключа (no WPA, no IEEE 802.1X),
# используя общий ключ для IEEE 802.11 авторизации
network={
  ssid="static-wep-test2"
  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="test adhoc"
  mode=1
  proto=WPA
  key_mgmt=WPA-NONE
  pairwise=NONE
  group=TKIP
  psk="secret passphrase"
}

Wireless tools

Первоначальная настройка и управляемый режим

Проект wireless tools предоставляет общий способ настроить базовые беспроводные интерфейсы до уровня безопасности WEP. Хотя WEP слабый метод безопасности, он все еще распространен в мире.

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

root #emerge --ask net-wireless/wireless-tools
Заметка
Хотя на данный момент используется утилита net-wireless/iw для беспроводных сетей, net-misc/netifrc до версии 0.6.0 не мог работать с новыми командами. Для работы с netifrc более ранних версий должен использоваться net-wireless/wireless-tools. Для более подробной информации смотрите документацию о именах переменных.
ФАЙЛ /etc/conf.d/netПример настройки iwconfig
# Использовать iwconfig вместо wpa_supplicant
modules="iwconfig"
  
# Настроим WEP-ключи для точки доступа с названием ESSID1 и ESSID2
# Вы можете настроить до 4 WEP-ключей, но только 1 может быть применен
# в какое то время so we supply a default index of [1] to set key [1] and then
# again afterwards to change the active key to [1]
# We do this incase you define other ESSID's to use WEP keys other than 1
#
# Использование в начале ключа s: означает что ключ в ASCII-ключ, иначе HEX-ключ
#
# enc open указывает использовать open security (более безопасно)
# enc restricted указывает использовать restricted security (менее безопасно)
key_ESSID1="[1] s:yourkeyhere key [1] enc open"
key_ESSID2="[1] aaaa-bbbb-cccc-dd key [1] enc restricted"
  
# Строка ниже работает только во время сканирования (поиска) новых точек доступа
  
# Иногда доступно более одной точки доступа,
# поэтому нужно определить предпочитаемый порядок подключения
preferred_aps="'ESSID1' 'ESSID2'"

Тонкая настройка выбора точек доступа

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

Один из способов настроить систему так, чтобы она подключалась только к предпочитаемым точкам доступа. По умолчанию, если не удалось подключится ко всем настроенным точкам доступа, то wireless-tools будет подключаться к не зашифрованной точке доступа. Такое поведение можно контролировать с помощью переменной associate_order. Ниже таблица значений и на что они влияют.

Значение Описание
any Поведение по умолчанию.
preferredonly Подключатся только к видимым точкам доступа из списка предпочитаемых.
forcepreferred Принудительно подключаться к точкам доступа в предпочтительном порядке, если они не обнаружены при сканировании.
forcepreferredonly Не сканировать точки доступа. Вместо этого просто попытаться подключится к ним по порядку.
forceany Тоже самое как и в forcepreferred + подключатся к любой доступной точке доступа.

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

ФАЙЛ /etc/conf.d/netПример blacklist_aps и unique_ap
# Иногда нужно заблокировать подключение к некоторым точкам доступа
blacklist_aps="'ESSID3' 'ESSID4'"
  
# Если у вас есть более одной беспроводной карты, вы можете указать
# хотите ли вы чтобы другая карта подключалась к той же точке доступа или нет
# Значение может быть "yes" или "no"
# По умолчанию используется "yes"
unique_ap="yes"

Режимы ad-hoc и master

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

ФАЙЛ /etc/conf.d/netРезервное возвращение в режим ad-hoc
adhoc_essid_eth0="This Adhoc Node"

Также можно подключится к ad-hoc сетям или настроить систему так, чтобы она работала в master режиме и стала сама точкой доступа.

ФАЙЛ /etc/conf.d/netОбразец настройки ad-hoc/master
# Устанавливает режим - может быть managed (по умолчанию), ad-hoc или master
# Не все драйверы поддерживают все режимы
mode_eth0="ad-hoc"
  
# Устанавливает ESSID интерфейса
# В режиме managed это заставляет интерфейс попытаться подключиться к определенной ESSID и ничего больше
essid_eth0="This Adhoc Node"
  
# Если ничего не задано, то используется канал 3
channel_eth0="9"
Важно
Важным ресурсом о выборе канала является документация BSD wavelan из документации NetBSD. Всего существует 14 каналов; нам сообщили, что в Северной Америке разрешены каналы 1-11, в большинстве стран Европы каналы 1-13, во Франции каналы 10-13, и в Японии единственный канал 14. Если вы сомневаетесь, пожалуйста, обратитесь к документации, которая приложена к сетевой карте или точке доступа. Убедитесь, что выбран тот же канал, что и канал, где включёна точка доступа (или другая сетевая карта, если это самоорганизующаяся (ad-hoc) сеть). Для карт, продающихся в Северной Америке и Европе, каналом по умолчанию является канал 3, для карт во Франции канал 11, а для карт в Японии канал 14.

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

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

Имя переменной Значение по умолчанию Описание
iwconfig_eth0 Более подробную информацию о том, что можно отправить iwconfig смотрите в man-странице iwconfig.
iwpriv_eth0 Более подробную информацию о том, что можно отправить iwpriv смотрите в man-странице iwpriv.
sleep_scan_eth0 0 Число секунд ожидания перед попыткой сканирования. Это необходимо, если драйверу или прошивке (firmware) необходимо больше времени для активации оборудования, чтобы им можно было пользоваться.
sleep_associate_eth0 5 Число секунд ожидания пока интерфейс ассоциируется с точкой доступа, по истечение которых, переходит к следующей.
associate_test_eth0 MAC Некоторые драйверы не сбрасывают MAC-адрес ассоциируемый с недоступной точкой доступа, когда потеряли связь с ней или после попытки подсоединения. Некоторые драйверы не сбрасывают уровень качества связи, после потери связи или после попытки подсоединения. Допустимые значения MAC, quality и all.
scan_mode_eth0 Некоторые драйверы должны сканировать в режиме ad-hoc. Поэтому если сканирование не удается, то установите ad-hoc здесь.
iwpriv_scan_pre_eth0 Применяет к интерфейсу некоторые iwpriv до сканирования. За более подробной информацией обратитесь к man-странице iwpriv.
iwpriv_scan_post_eth0 Применяет к интерфейсу некоторые iwpriv после сканирования. За более подробной информацией обратитесь к man-странице iwpriv.

Определение сетевой конфигурации для отдельных ESSID

В этом разделе мы покажем как настроить сетевые настройки на основе ESSID. Например, с беспроводной сетью и ESSID ESSID1 использовать статический IP-адрес, а с ESSID ESSID2 использовать DHCP.

Заметка
Это работает как с wpa_supplicant, так и с wireless-tools
Важно
Пожалуйста, ознакомьтесь с документацией о именах переменных, о которых упоминалось ранее.
ФАЙЛ /etc/conf.d/netПереопределение сетевых настроек для конкретных 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"
  
# We can define nameservers and other things too
# NOTE: DHCP will override these unless it's told not to
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"
  
# You override by the MAC address of the Access Point
# This handy if you goto different locations that have the same ESSID
config_001122334455="dhcp"
dhcpcd_001122334455="-t 10"
dns_servers_001122334455="192.168.0.1 192.168.0.2"






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

Four functions can be defined in /etc/conf.d/net:

  • preup(), called before an interface is brought up;
  • predown(), called before an interface is brought down;
  • postup(), called after an interface is brought up; and
  • postdown(), called after an interface is brought down.

Each of these these functions is called with the interface name, available within each function via the IFACE variable, so that one function can control multiple interfaces.

The return values for the preup() and predown() functions should be:

  • 0 to indicate success, and that configuration or de-configuration of the interface can continue.
  • A non-zero value otherwise.

If preup() returns a non-zero value, interface configuration will be aborted. If predown() returns a non-zero value, the interface will not be allowed to continue de-configuration.

Return values for the postup() and postdown() functions are ignored since there's nothing to do if they indicate failure.

${IFACE} присваивается название запускаемого или останавливаемого интерфейса. ${IFVAR} — это значение ${IFACE}, преобразованное в имя переменной, разрешенное в bash.

ФАЙЛ Примеры функций до/после запуска/останова в /etc/conf.d/net
preup() {
  # Проверка соединения интерфейса перед его запуском. Она
  # работает лишь с некоторыми сетевыми адаптерами и требует наличия
  # установленного пакета 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
}
Заметка
Для более подробной информации о написании своих собственных функций, прочитайте /usr/share/doc/netifrc-*/net.example.bz2.

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

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

Two functions can be defined in /etc/conf.d/net:

  • preassociate(), called before association.
  • postassociate(), called after association.

Each of these these functions is called with the interface name, available within each function via the IFACE variable, so that one function can control multiple interfaces.

The return values for the preassociate() function should be:

  • 0 to indicate success, and to continue configuration.
  • A non-zero value otherwise.

If preassociate() returns a non-zero value, interface configuration will be aborted.

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

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

ФАЙЛ /etc/conf.d/netФункции до/после соединения
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().
Заметка
Для более подробной информации о написании своих собственных функций, прочитайте /usr/share/doc/netifrc-*/net.example.bz2.





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

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

В данной главе мы рассмотрим, как это сделать.

Заметка
В этом документе рассказывается только о ifplugd, но существуют альтернативы, например netplug. netplug это более легковесная альтернатива ifplugd, но она считает, что сетевые драйверы ядра работают правильно, а иногда это не так.

ifplugd

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

root #emerge --ask sys-apps/ifplugd

Настройка ifplugd также довольно простая задача. Файл настроек расположен по адресу /etc/conf.d/net. Для более детальной информации о существующих переменных запустите man ifplugd. Также просмотрите файл /usr/share/doc/netifrc-*/net.example.bz2 для большего числа примеров.

ФАЙЛ /etc/conf.d/netПример конфигурации ifplug
# Замените eth0 на интерфейс, за которым нужно следить
ifplugd_eth0="..."
  
# Чтобы следить за беспроводным интерфейсом
ifplugd_eth0="--api-mode=wlan"

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

root #emerge --ask net-dns/openresolv

Просмотрите man resolvconf, чтобы узнать больше о его возможностях.




Warning: Display title "Gentoo Linux amd64 Handbook: Настройка сети" overrides earlier display title "Handbook:AMD64/Full/Networking".