This is Gentoo's testing wiki. It is a non-operational environment and its textual content is outdated.
Please visit our production wiki at https://wiki.gentoo.org
Handbook:X86/Networking/Modular
Сетевые модули
На данный момент скрипты netifrc поддерживают модульные сетевые скрипты, что означает, что можно легко добавлять поддержку для новых типов интерфейсов и конфигурационных модулей, сохраняя совместимость с существующими.
Модули загружаются по умолчанию, если установлен пакет, в котором они находятся. Если пользователь указывает модуль для которого не установлен пакет, тогда он получит сообщение об ошибке с указанием какой пакет необходимо установить. В идеале, настройка модулей необходима лишь только тогда, когда установлено два или более пакетов с модулями одинаковой функциональности и нужно выбрать какой предпочтительнее.
Все обсуждаемое применимо к /etc/conf.d/net, если не указано иное.
# Prefer ifconfig over iproute2 modules="ifconfig" # You can also specify other modules for an interface # In this case we prefer pump over dhcpcd modules_eth0="pump" # You can also specify which modules not to use - for example you may be # using a supplicant or linux-wlan-ng to control wireless configuration but # you still want to configure network settings per ESSID associated with. modules="!iwconfig"
Обработчики интерфейса
Мы предоставляем два обработчика интерфейса: ifconfig и iproute2. Только один из них необходим для настройки любой сети.
Оба установлены по умолчанию как часть системного профиля. iproute2 более мощный и гибкий пакет.
root #
emerge --ask sys-apps/iproute2
# выбрать ifconfig, вместо iproute2, если установлены оба, # так как openrc предпочтет использовать iproute2 modules="ifconfig"
Так как и ifconfig, и iproute2 делают очень схожие вещи, мы приведем базовую конфигурацию для обоих. Например, оба примера ниже будут работать независимо от того какой модуль используется.
config_eth0="192.168.0.2/24" config_eth0="192.168.0.2 netmask 255.255.255.0" # также мы можем указать broadcast 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
DHCP является средством получения информации о сети (IP-адрес, DNS-серверы, шлюз и так далее) с сервера DHCP. Это означает, что если в сети есть работающий сервер DHCP, пользователь просто может использовать DHCP- клиент, который настроит сеть самостоятельно. Конечно, пользователи должны будут настроить такие вещи, как беспроводное подключение, PPP или другие вещи, если это необходимо, прежде чем они смогут использовать DHCP.
DHCP может быть реализован модулями dhclient, dhcpcd или pump. Каждый модуль DHCP имеет свои плюсы и минусы - ниже краткий обзор.
Модуль DHCP | Пакет | Плюсы | Минусы |
---|---|---|---|
dhclient | net-misc/dhcp | Создан ISC, те же самые люди, которые создали BIND DNS. Имеет множество настроек. | Конфигурация очень сложна, программа «раздута», не может получить сервер NTP от DHCP, по умолчанию не отправляет имя хоста. |
dhcpcd | net-misc/dhcpcd | Давно в Gentoo по умолчанию, не зависит от других утилит, активно развивается Gentoo. | Иногда бывает медленным, не «демонизируется» при неограниченной аренде адреса. |
pump | net-misc/pump | Легковесный и не зависит от других утилит. | Больше не поддерживается разработчиками, ненадежен, особенно с модемами, не может получить NIS сервер от DHCP. |
Если установлено более одного клиента DHCP, укажите какой необходимо использовать - в противном случае по умолчанию будет использоваться dhcpcd, если он установлен.
Чтобы передать особую опцию модулю DHCP, используйте module_eth0="..."
(подставьте модуль, который будете использовать, например dhcpcd_eth0).
Мы попытались сделать DHCP настройки относительно независимыми - мы поддерживаем следующие параметры, которые можно передать с помощью переменной dhcp_eth0. По умолчанию ни одна из них не используется:
release
- освобождать IP-адрес для повторного использования (во время остановки сервиса)
nodns
- не перезаписывать /etc/resolv.conf
nontp
- не перезаписывать /etc/ntp.conf
nonis
- не перезаписывать /etc/yp.conf
# необходимо указать модуль DHCP, если установлено несколько модулей modules="dhcpcd" config_eth0="dhcp" dhcpcd_eth0="-t 10" # таймаут после 10 секунд dhcp_eth0="release nodns nontp nonis" # только получить адрес
По умолчанию dhcpcd и pump отправляют имя хоста на сервер DHCP, поэтому больше не нужно специально указывать.
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.
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.
# «*» — важна "username" * "password"
Если PPPoE настраивается на USB-модеме, убедитесь, что установили br2684ctl. Пожалуйста, прочтите /usr/portage/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-адрес для интерфейса.
Такое полезно для сетей в которых отсутствует сервер DHCP и система не подключена напрямую к интернету, при этом все остальные компьютеры используют APIPA.
Для поддержки APIPA установите net-misc/iputils с USE-флагом arping
или net-analyzer/arping.
# пробуем сперва DHCP. Если это не удается, переходим к APIPA config_eth0="dhcp" fallback_eth0="apipa" # просто используем APIPA config_eth0="apipa"
Bonding (агрегация интерфейсов)
Агрегация (bonding) используется для увеличения пропускной способности сети или для повышения отказоустойчивости в случаях аппаратного сбоя. Если в системе есть две сетевые карты, смотрящие в одну и ту же сеть, то администратор может объединить их, так что приложения увидят только один интерфейс, но реально будут использоваться обе сетевые карты.
Есть множество способов настройки агрегации интерфейсов. Некоторые из них, такие как 802.3ad LACP mode, требуют поддержки и дополнительной конфигурации со стороны сетевого коммутатора. Для уточнения отдельных опций, пожалуйста, обратитесь к /usr/src/linux/Documentation/networking/bonding.txt.
Сперва, очистите конфигурацию для требуемых интерфейсов:
config_eth0="null" config_eth1="null" config_eth2="null"
Далее, настройте агрегацию (bonding) между сетевыми интерфейсами:
slaves_bond0="eth0 eth1 eth2" config_bond0="192.168.100.4/24" # выберите необходимый режим и дополнительные параметры конфигурации mode_bond0="balance-alb"
Удалите сервисы net.eth* с уровня запуска, создайте net.bond0 и добавьте его на необходимый уровень запуска.
Bridging (поддержка 802.1d)
Сетевой мост (bridging) используется для объединения сетей вместе. Например, может быть система, которая подключается к интернету через ADSL модем, а также у нее есть беспроводная сетевая карта, которая может предоставляет доступ в интернет другим компьютерам через ADSL. Можно создать сетевой мост, чтобы соединить оба интерфейса вместе.
# конфигурация моста - "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-адреса сетевых интерфейсов можно с помощью файла конфигурации сети.
# для изменения 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"
Туннелирование
Для туннелирования не нужно устанавливать дополнительное программное обеспечение, так как обработчик интерфейса сможет сделать это сам.
# для 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 в /etc/conf.d/net так:
vlans_eth0="1 2"
Далее, настройте каждый 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 примерно так:
vlan1_name="vlan1" vlan1_ingress="2:6 3:5" eth0_vlan1_egress="1:2"
Для настройки некоторых вариантов VLAN, ознакомьтесь с документацией переменных имен.