Handbook:X86/Networking/Modular

From Gentoo Wiki
Jump to:navigation Jump to:search
This page is a translated version of the page Handbook:X86/Networking/Modular and the translation is 100% complete.
X86 Handbook
Установка
Об установке
Выбор подходящего источника для установки
Настройка сети
Подготовка дисков
Установка файла stage
Установка базовой системы
Настройка ядра
Настройка системы
Установка системных утилит
Настройка загрузчика
Завершение
Работа с Gentoo
Введение в Portage
USE-флаги
Возможности Portage
Система сценариев инициализации
Переменные окружения
Работа с Portage
Файлы и каталоги
Переменные
Смешение ветвей программного обеспечения
Дополнительные утилиты
Дополнительные репозитории пакетов
Расширенные возможности
Настройка сети OpenRC
Начальная настройка
Расширенная настройка
Модульное построение сети
Беспроводная сеть
Добавляем функциональность
Динамическое управление


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

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, ознакомьтесь с документацией переменных имен.