В Gentoo предусмотрены гибкие сетевые средства: здесь рассказывается о выборе различных клиентов DHCP, настройке объединения, образования мостов, виртуальных сетей (VLAN) и т.п. 8 2011-10-23
Сетевые модули

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

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

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

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

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

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

ifconfig установлен по умолчанию (пакет net-tools является частью системного профиля). iproute2 это более мощный и гибкий пакет, но по умолчанию он не включен.

# emerge 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"

# также можно указать широковещательный адрес
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.

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

dhclientnet-misc/dhcp Сделан ISC, теми же людьми, кто делает BIND DNS. Гибок в настройке. Настройка чрезмерно сложна, программа довольно «распухшая», не может получать данные о серверах NTP с DHCP, по умолчанию не отправляет имя узла. dhcpcdnet-misc/dhcpcd Давно в Gentoo по умолчанию, не зависит от внешних утилит, активно разрабатывается Gentoo. Может быть временами медленным, не становится демоном при неограниченном сроке аренды адреса. pumpnet-misc/pump Компактный, не зависит от внешних утилит. Более не поддерживается разработчиком, ненадежен, особенно по модему, не может получать данные о серверых NIS по DHCP.
Модуль DHCP Пакет Плюсы Минусы

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

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

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

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

config_eth0="dhcp"
dhcpcd_eth0="-t 10" # прекращение после 10 секунд
dhcp_eth0="release nodns nontp nonis" # только получать адрес
По умолчанию, dhcpcd и pump передают текущее узла на сервер DHCP, поэтому его больше не требуется указывать.
ADSL с PPPoE/PPPoA

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

# emerge net-dialup/ppp

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

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

Проверьте, что вы установили rc_depend_strict в "YES", в файле /etc/rc.conf.

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

config_eth0=null (Укажите ваш интерфейс ethernet)
config_ppp0="ppp"
link_ppp0="eth0" (Укажите ваш интерфейс ethernet)
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_need_ppp0="net.eth0"

Вы также можете установить свой пароль в /etc/ppp/pap-secrets.

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

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

Пожалуйста, внимательно прочитайте раздел по ADSL и PPP в файле /usr/share/doc/openrc-0.8.3-r1/net.example.bz2. В нем содержатся гораздо более детальные объяснения всех настроек, которые, скорее всего, понадобятся в вашем конкретном случае. Конечно, замените 0.8.3 на номер версии OpenRC, которая установлена на вашей системе.
APIPA (автоматическая частная IP-адресация)

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

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

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

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

# использование только APIPA
config_eth0="apipa"
Объединение интерфейсов

Для объединения интерфесов установите net-misc/ifenslave.

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

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

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

# указание зависимости от eth0, eth1 и eth2, так как им может требоваться
# дополнительная настройка
rc_need_bond0="net.eth0 net.eth1 net.eth2"
Образование моста (поддержка 802.1d)

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

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

# настройка моста: подробности в "man brctl"
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, так как им может требоваться
# дополнительная настройка
rc_need_bond0="net.eth0 net.eth1"
Для использования некоторых вариантов моста вам может потребоваться обращение к документации по именам переменных.
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"
Виртуальные сети (поддержка 802.1q)

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

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

# указание номеров 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 вам может потребоваться обращение к документации по именам переменных.