dhcpcd (Русский)

dhcpcd — DHCP- и DHCPv6-клиент. В настоящий момент является наиболее полнофункциональным DHCP-клиентом с открытым исходным кодом. Подробнее о возможностях см. домашнюю страницу проекта.

Примечание: DHCP-клиент dhcpcd (DHCP client daemon), разработанный Роем Марплесом (Roy Marples), не следует путать с DHCP-сервером dhcpd (DHCP (server) daemon) производства Internet Systems Consortium.

Состояние перевода: На этой странице представлен перевод статьи dhcpcd. Дата последней синхронизации: 10 июля 2021. Вы можете помочь синхронизировать перевод, если в английской версии произошли изменения.

Установка

Установите пакет dhcpcd.

dhcpcd-uiAURGTK-интерфейс для dhcpcd; в качестве альтернативы можно использовать wpa_supplicant. Среди возможностей — диалог настройки и выбор кодовой фразы для беспроводной сети.

dhcpcd-ui-patchedAUR — улучшенная версия dhcpcd-uiAUR. AppIndicator вместо GtkStatusIcon, поддержка gtk3, иконка трея для KDE.

Запуск

Запустите/включите службу . Этот демон работает одновременно для всех сетевых интерфейсов.

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

Рекомендуется использовать юниты-шаблоны; подробнее см. #dhcpcd и сетевые интерфейсы systemd. В результате запуска любой из служб интерфейсу присваивается динамический IP-адрес. Привязка статического адреса рассмотрена в разделе #Статический профиль.

Настройка

Основной файл настроек — . Некоторые полезные опции описаны ниже, подробнее см. .

Статические маршруты

Если необходимо создать статический маршрут на клиентской машине, добавьте его в файл /etc/dhcpcd.exit-hook. Ниже приведён пример хук-скрипта, который добавляет маршрут к VPN-подсети 10.11.12.0/24 через шлюз на адресе :

В этом файле можно указать несколько машрутов одновременно.

Идентификатор DHCP-клиента

Сервер опознаёт DHCP-клиент по одному из следующих идентификаторов:

  1. Имя хоста.
  2. MAC-адрес сетевого интерфейса, с которого устанавливается соединение.
  3. Identity Association ID (IAID), который представляет из себя некую абстракцию для удобства работы с различными настройками и/или интерфейсами в пределах конкретного хоста.
  4. DHCP Unique Identifier (DUID).

Более подробное описание можно найти в RFC 3315.

В зависимости от настроек DHCP-сервера те или иные параметры являются (не)обязательными в запросе на аренду адреса.

Если dhcpcd с настройками по умолчанию не получает IP-адрес, то можно использовать следующие опции в файле :

  • — отправить серверу имя хоста, указанное в файле .
  • — отправить серверу MAC-адрес хоста.
  • — вычислить IAID и отправить серверу. Опция указывается в блоке соответствующего интерфейса (начинается с interface интерфейс, см. ). Применяется редко, чаще используется следующая вариант.
  • duid — отправить серверу комбинацию DUID и IAID.

Значение DUID задаётся в файле . Чтобы DHCP-аренда завершилась успешно, DUID должен быть уникален в пределах системы и применяться ко всем интерфейсам, в то время как IAID задаётся для каждого сетевого интерфейса по отдельности (см. RFC 4361).

Отдельно необходимо упомянуть о сетях с динамическим DNS — убедитесь, что все три идентификатора являются уникальными. Если DNS-сервер получит два одинаковых DUID (например, в виртуальной машине уникальны имя хоста и MAC, но DUID такой же, как и у основной системы), то второй запрос удалит предыдущий из соответствующей DNS-записи.

Статический профиль

Смысл параметров объясняется в статье Настройка сети. Чаще всего используются: название сетевого интерфейса, IP-адрес хоста, а также адреса сервера имён и маршрутизатора/шлюза.

Настройки статического профиля хранятся в файле :

Возможны и более сложные конфигурации, например, с параметром . Подробнее см. .

Резервный профиль

Помимо статического профиля можно создать также запасной профиль на случай, если запрос DHCP-аренды завершится неудачно. Это особенно полезно для headless-систем, когда статический профиль выступает в качестве профиля "режима восстановления", чтобы гарантировать доступ к машине в любой ситуации.

В примере ниже сначала настраивается профиль для адреса , с шлюзом и сервером имён ; затем профиль объявляется резервным для интерфейса .

Хуки

dhcpcd исполняет сценарии из каталога в лексическом порядке. Подробнее см. и dhcpcd-run-hooks(8).

Примечание:
  • Сценарий можно отключить параметром nohook.
  • Параметр env позволяет задать переменную окружения для всех хуков одновременно. Например, чтобы hostname-хук всегда устанавливал имя хоста, добавьте строку env force_hostname=YES.

10-wpa_supplicant

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

# ln -s /usr/share/dhcpcd/hooks/10-wpa_supplicant /usr/lib/dhcpcd/dhcpcd-hooks/

Хук автоматически запускает wpa_supplicant для беспроводного интерфейса, если:

  • отсутствует процесс wpa_supplicant, который уже слушает данный интерфейс.
  • существует файл настроек для wpa_supplicant. По умолчанию dhcpcd проверяет следующие файлы в указанном порядке:
/etc/wpa_supplicant/wpa_supplicant-интерфейс.conf
/etc/wpa_supplicant/wpa_supplicant.conf
/etc/wpa_supplicant-интерфейс.conf
/etc/wpa_supplicant.conf

Можно также добавить свой файл настроек параметром в файле .

Если вы предпочитаете управлять беспроводными соединениями непосредственно через wpa_supplicant, хук может создавать нежелательные помехи в работе. Например, если вы остановите wpa_supplicant, хук может снова включить интерфейс. Кроме того, при использовании netctl-auto, wpa_supplicant запускается автоматически с настройками из файла , поэтому запускать его ещё раз хуком не нужно — во время загрузки это может привести к ошибкам при парсинге файла , который содержит стандартные настройки по умолчанию.

Чтобы отключить хук, удалите созданную ранее символическую ссылку или добавьте строку в файл .

Советы и рекомендации

Отключение ARP-зондирования для ускорения DHCP

В dhcpcd реализованы рекомендации из стандарта DHCP (RFC 2131) о проверке факта выдачи IP-адреса посредством ARP. В домашних сетях эта возможность по сути бесполезна, поэтому можно сэкономить 5 секунд для каждого соединения, добавив следующую строку в :

noarp

Того же можно добиться опцией при запуске dhcpcd. ARP-зондирование будет отключено и соединения в DHCP-сетях станут создаваться быстрее.

Удаление DHCP-аренды

Файл содержит текущую аренду, выданную интерфейсу DHCP-сервером. В случае беспроводного интерфейса файл будет называться /var/lib/dhcpcd/интерфейс-ssid.lease, где — название беспроводной сети. Время предоставления аренды определяется по параметру файла mtime (время последнего изменения). Информация о последней аренде нужна, чтобы заправшивать один и тот же IP-адрес при каждой аренде — при условии, конечно, что он не был выдан другой машине на момент запроса. Если такое поведение DHCP-клиента вам не нужно, просто удалите данный файл.

Если после удаления файла DHCP-сервер продолжает выдавать тот же IP-адрес, причина может быть в том, что он настроен опознавать клиентские машины по идентификатору DUID (см. #Идентификатор DHCP-клиента). Чтобы это проверить, остановите dhcpcd и удалите/переименуйте файл . dhcpcd сгенерирует новый при следующем запуске.

Имейте в виду, что DUID — постоянный идентификатор машины, он не меняется при перезагрузках и даже в случае смены сетевых интерфейсов. Если при переносе системы на другой компьютер скопировать файл , то DHCP-сервер опознает машину как предыдущую.

Разные IP-адреса на машине с несколькими ОС

Если на вашей машине помимо Arch установлена OS X или Windows и вы хотите, чтобы IP-адреса в этих операционных системах были разные, то необходимо в каждой ОС задать отдельный DUID.

В Windows (после XP) DUID хранится в ключе реестра

\HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip6\Parameters\Dhcpv6DUID 

В OS X он доступен непосредственно в .

Если вы используете DHCP-сервер dnsmasq, разные DUID можно настроить правилами в настройках.

/etc/resolv.conf

Если работает resolvconf, то вся DNS-информация будет пересылаться ему. В противном случае dhcpcd внесёт некоторые изменения в файл .

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

nohook resolv.conf

В качестве альтернативы можно создать файл со списком необходимых DNS-серверов. dhcpcd вставит этот файл в начало .

Также можно настроить dhcpcd на постоянное использование одних и тех же DNS-серверов. Добавьте следующую строку в , заменив списком разделённых пробелами адресов:

static domain_name_servers=ip_адреса_dns_серверов

Например, DNS-сервера Google:

static domain_name_servers=8.8.8.8 8.8.4.4

Решение проблем

Client ID

Если вы работаете в DHCPv4-сети с фильтрацией Client ID по MAC-адресам, возможно, придётся изменить строку

/etc/dhcpcd.conf
# Связка DUID + IAID (DHCPv6) по RFC4361. 
duid

на

В противном случае вы не получите аренду, поскольку сервер не распознает DHCPv6-идентификатор. Подробнее см. RFC 4361.

Отказ от IP-адреса

В некоторых ситуациях, например, когда два маршрутизатора соединены через VPN, могут возникнуть проблемы при неправильном присвоении IP-адреса. В этом случае необходимо сначала отказаться от IP-адреса

# dhcpcd -k

после чего запросить новый:

# dhcpcd

Возможно, эти две команды придётся повторить несколько раз.

Проблемы с нестандартными маршрутизаторами

Некоторые (нестандартные) маршрутизаторы не смогут устанавливать соединения, если не закомментирована строка

require dhcp_server_identifier

в файле . Если в сети несколько DHCP-серверов (что встречается редко), то указанная проблема не проявляется; подробнее см. здесь.

dhcpcd и сетевые интерфейсы systemd

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

error changing net interface name wlan0 to wlp4s0: Device or resource busy" 

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

Кроме того, можно использовать параметры и в файле , чтобы запретить dhcpcd выполнять привязку к интерфейсам, имена которых установлены ядром, а не udev:

denyinterfaces wlan* eth*

Отмена тайм-аута

Если dhcpcd был запущен для отдельного интерфейса и не получил аренду в течение 30 секунд после запуска (например, сервер не работает или кабель не воткнут), он завершится с ошибкой.

Чтобы dhcpcd ожидал бесконечно при каждом запуске, отредактируйте юнит, установив параметр в значение :

/etc/systemd/system/dhcpcd@.service.d/timeout.conf
[Service]
ExecStart=
ExecStart=/usr/bin/dhcpcd -w -q '''-t 0''' %I

Чтобы dhcpcd ожидал аренду вообще всегда, настройте перезапуск юнита после завершения работы:

Известные проблемы

Медленная загрузка из-за dhcpcd@.service

По умолчанию служба ожидает выдачи IP-адреса перед переходом в фоновый режим (флаг команды dhcpcd). Если юнит включён, то загрузка системы может затянуться из-за ожидания IP-адреса. Чтобы это исправить, создайте drop-in файл юнита следующего содержания:

/etc/systemd/system/dhcpcd@.service.d/no-wait.conf
[Service]
ExecStart=
ExecStart=/usr/bin/dhcpcd -b -q %I

См. также .

Смотрите также

gollark: Ugh, go project yourself onto arbitrary hyperplanes, pyrobot.
gollark: I think you're confusing a bunch of things right now. Or possibly just two things, many worlds and extra spatial dimensions.
gollark: "We"?
gollark: ???
gollark: Things which extend into those instead of just having a constant fixed position in said new spatial dimension are also not going to somehow stop being subject to time, unless the laws of physics privilege it somehow, which would be really weird.
This article is issued from Archlinux. The text is licensed under Creative Commons - Attribution - Sharealike. Additional terms may apply for the media files.