UNPKG

arch-wiki-md-repo

Version:

All arch-wiki articles in markdown format, updated every two days.

255 lines (160 loc) 24.2 kB
Ссылки по теме * [Настройка сети](/index.php/%D0%9D%D0%B0%D1%81%D1%82%D1%80%D0%BE%D0%B9%D0%BA%D0%B0_%D1%81%D0%B5%D1%82%D0%B8 "Настройка сети") * [Настройка беспроводной сети](/index.php/%D0%9D%D0%B0%D1%81%D1%82%D1%80%D0%BE%D0%B9%D0%BA%D0%B0_%D0%B1%D0%B5%D1%81%D0%BF%D1%80%D0%BE%D0%B2%D0%BE%D0%B4%D0%BD%D0%BE%D0%B9_%D1%81%D0%B5%D1%82%D0%B8 "Настройка беспроводной сети") * [dhcpd (Русский)](/index.php/Dhcpd_(%D0%A0%D1%83%D1%81%D1%81%D0%BA%D0%B8%D0%B9) "Dhcpd (Русский)") *dhcpcd* — свободная реализация клиента DHCP и DHCPv6\. На данный момент является наиболее развитым DHCP-клиентом с открытым исходным кодом. Полный список возможностей вы можете найти на [домашней странице проекта](http://roy.marples.name/projects/dhcpcd/). **Примечание:** Не путайте *dhcpcd* — DHCP-клиент и [dhcpd](/index.php/Dhcpd_(%D0%A0%D1%83%D1%81%D1%81%D0%BA%D0%B8%D0%B9) "Dhcpd (Русский)"), который является **DHCP-сервером**. ## Contents * [1 Установка](#.D0.A3.D1.81.D1.82.D0.B0.D0.BD.D0.BE.D0.B2.D0.BA.D0.B0) * [2 Запуск](#.D0.97.D0.B0.D0.BF.D1.83.D1.81.D0.BA) * [3 Настройка](#.D0.9D.D0.B0.D1.81.D1.82.D1.80.D0.BE.D0.B9.D0.BA.D0.B0) * [3.1 Статические маршруты](#.D0.A1.D1.82.D0.B0.D1.82.D0.B8.D1.87.D0.B5.D1.81.D0.BA.D0.B8.D0.B5_.D0.BC.D0.B0.D1.80.D1.88.D1.80.D1.83.D1.82.D1.8B) * [3.2 Идентификатор клиента](#.D0.98.D0.B4.D0.B5.D0.BD.D1.82.D0.B8.D1.84.D0.B8.D0.BA.D0.B0.D1.82.D0.BE.D1.80_.D0.BA.D0.BB.D0.B8.D0.B5.D0.BD.D1.82.D0.B0) * [3.3 Ускорение DHCP отключением ARP-сканирования](#.D0.A3.D1.81.D0.BA.D0.BE.D1.80.D0.B5.D0.BD.D0.B8.D0.B5_DHCP_.D0.BE.D1.82.D0.BA.D0.BB.D1.8E.D1.87.D0.B5.D0.BD.D0.B8.D0.B5.D0.BC_ARP-.D1.81.D0.BA.D0.B0.D0.BD.D0.B8.D1.80.D0.BE.D0.B2.D0.B0.D0.BD.D0.B8.D1.8F) * [3.4 Запасной статический профиль](#.D0.97.D0.B0.D0.BF.D0.B0.D1.81.D0.BD.D0.BE.D0.B9_.D1.81.D1.82.D0.B0.D1.82.D0.B8.D1.87.D0.B5.D1.81.D0.BA.D0.B8.D0.B9_.D0.BF.D1.80.D0.BE.D1.84.D0.B8.D0.BB.D1.8C) * [4 Хуки](#.D0.A5.D1.83.D0.BA.D0.B8) * [4.1 10-wpa_supplicant](#10-wpa_supplicant) * [5 Советы и рекомендации](#.D0.A1.D0.BE.D0.B2.D0.B5.D1.82.D1.8B_.D0.B8_.D1.80.D0.B5.D0.BA.D0.BE.D0.BC.D0.B5.D0.BD.D0.B4.D0.B0.D1.86.D0.B8.D0.B8) * [5.1 Освобождение арендованного IP-адреса](#.D0.9E.D1.81.D0.B2.D0.BE.D0.B1.D0.BE.D0.B6.D0.B4.D0.B5.D0.BD.D0.B8.D0.B5_.D0.B0.D1.80.D0.B5.D0.BD.D0.B4.D0.BE.D0.B2.D0.B0.D0.BD.D0.BD.D0.BE.D0.B3.D0.BE_IP-.D0.B0.D0.B4.D1.80.D0.B5.D1.81.D0.B0) * [6 Решение проблем](#.D0.A0.D0.B5.D1.88.D0.B5.D0.BD.D0.B8.D0.B5_.D0.BF.D1.80.D0.BE.D0.B1.D0.BB.D0.B5.D0.BC) * [6.1 Client ID](#Client_ID) * [6.2 Освобождение аренды IP-адреса](#.D0.9E.D1.81.D0.B2.D0.BE.D0.B1.D0.BE.D0.B6.D0.B4.D0.B5.D0.BD.D0.B8.D0.B5_.D0.B0.D1.80.D0.B5.D0.BD.D0.B4.D1.8B_IP-.D0.B0.D0.B4.D1.80.D0.B5.D1.81.D0.B0) * [6.3 Не удается подключиться к маршрутизатору](#.D0.9D.D0.B5_.D1.83.D0.B4.D0.B0.D0.B5.D1.82.D1.81.D1.8F_.D0.BF.D0.BE.D0.B4.D0.BA.D0.BB.D1.8E.D1.87.D0.B8.D1.82.D1.8C.D1.81.D1.8F_.D0.BA_.D0.BC.D0.B0.D1.80.D1.88.D1.80.D1.83.D1.82.D0.B8.D0.B7.D0.B0.D1.82.D0.BE.D1.80.D1.83) * [6.4 dhcpcd.service конфликтует с udev при старте системы](#dhcpcd.service_.D0.BA.D0.BE.D0.BD.D1.84.D0.BB.D0.B8.D0.BA.D1.82.D1.83.D0.B5.D1.82_.D1.81_udev_.D0.BF.D1.80.D0.B8_.D1.81.D1.82.D0.B0.D1.80.D1.82.D0.B5_.D1.81.D0.B8.D1.81.D1.82.D0.B5.D0.BC.D1.8B) * [6.5 Время ожидания](#.D0.92.D1.80.D0.B5.D0.BC.D1.8F_.D0.BE.D0.B6.D0.B8.D0.B4.D0.B0.D0.BD.D0.B8.D1.8F) * [7 Смотрите также](#.D0.A1.D0.BC.D0.BE.D1.82.D1.80.D0.B8.D1.82.D0.B5_.D1.82.D0.B0.D0.BA.D0.B6.D0.B5) ## Установка [Установите](/index.php/Pacman_(%D0%A0%D1%83%D1%81%D1%81%D0%BA%D0%B8%D0%B9)#.D0.A3.D1.81.D1.82.D0.B0.D0.BD.D0.BE.D0.B2.D0.BA.D0.B0_.D0.BE.D0.BF.D1.80.D0.B5.D0.B4.D0.B5.D0.BB.D0.B5.D0.BD.D0.BD.D1.8B.D1.85_.D0.BF.D0.B0.D0.BA.D0.B5.D1.82.D0.BE.D0.B2 "Pacman (Русский)") пакет [dhcpcd](https://www.archlinux.org/packages/?name=dhcpcd), доступный в [официальных репозиториях](/index.php/%D0%9E%D1%84%D0%B8%D1%86%D0%B8%D0%B0%D0%BB%D1%8C%D0%BD%D1%8B%D1%85_%D1%80%D0%B5%D0%BF%D0%BE%D0%B7%D0%B8%D1%82%D0%BE%D1%80%D0%B8%D1%8F%D1%85 "Официальных репозиториях"). Он является частью группы [base](https://www.archlinux.org/groups/x86_64/base/), поэтому, скорее всего он уже установлен в вашей системе. Также с пакетом [dhcpcd-ui](https://aur.archlinux.org/packages/dhcpcd-ui/) (доступен в [AUR](/index.php/AUR_(%D0%A0%D1%83%D1%81%D1%81%D0%BA%D0%B8%D0%B9) "AUR (Русский)")) вы можете установить графическую оболочку [GTK+](/index.php/GTK%2B "GTK+") для демона *dhcpcd* (и, опционально, для [wpa_supplicant](/index.php/WPA_supplicant_(%D0%A0%D1%83%D1%81%D1%81%D0%BA%D0%B8%D0%B9) "WPA supplicant (Русский)")). Он предоставляет диалоговую панель для настройки и позволяет вводить данные для подключения к беспроводным сетям. [dhcpcd-ui-patched](https://aur.archlinux.org/packages/dhcpcd-ui-patched/) - патченная версия пакета [dhcpcd-ui](https://aur.archlinux.org/packages/dhcpcd-ui/). Она использует AppIndicator вместо GtkStatusIcon и компилируется с gtk3, благодаря чему имеет четкую иконку в трее при использовании с [KDE](/index.php/KDE "KDE"). ## Запуск Вместе с *dhcpcd* предоставляются два юнит-файла [systemd](/index.php/Systemd_(%D0%A0%D1%83%D1%81%D1%81%D0%BA%D0%B8%D0%B9) "Systemd (Русский)"), каждый из которых может быть использован для управления демоном: * служба `dhcpcd.service` запускает клиент для всех сетевых интерфейсов. * служба `dhcpcd@.service` может использоваться для запуска клиента на отдельном сетевом интерфейсе, например: `dhcpcd@*eth0*.service`. Чтобы запустить *dhcpcd* вручную, просто наберите: `# dhcpcd *eth0*` ``` dhcpcd: version 5.1.1 starting dhcpcd: *eth0*: broadcasting for a lease ... dhcpcd: *eth0*: leased 192.168.1.70 for 86400 seconds ``` **Совет:** Если вы выбрали `dhcpcd.service` и он не запускается, смотрите раздел [#dhcpcd.service конфликтует с udev при старте системы](#dhcpcd.service_.D0.BA.D0.BE.D0.BD.D1.84.D0.BB.D0.B8.D0.BA.D1.82.D1.83.D0.B5.D1.82_.D1.81_udev_.D0.BF.D1.80.D0.B8_.D1.81.D1.82.D0.B0.D1.80.D1.82.D0.B5_.D1.81.D0.B8.D1.81.D1.82.D0.B5.D0.BC.D1.8B). ## Настройка Основная часть настроек выполняется в файле `/etc/dhcpcd.conf`. Некоторые наиболее используемые опции описаны далее. Подробнее о структуре файла и его содержании смотрите в [dhcpcd.conf(5)](https://jlk.fjfi.cvut.cz/arch/manpages/man/dhcpcd.conf.5). ### Статические маршруты Если вы хотите, чтобы при подключении добавлялись статические маршруты, создайте новый хук-скрипт в `/usr/lib/dhcpcd/dhcpcd-hooks` и напишите в нем команды для добавления маршрутов. Например, чтобы добавить маршрут в подсети `10.11.12.0/24` через шлюз `192.168.192.5`: `/usr/lib/dhcpcd/dhcpcd-hooks/40-vpnroute` ``` ip route add 10.11.12.0/24 via 192.168.192.5 ``` Префикс `40` использован для того, чтобы данный скрипт отрабатывал после уже имеющихся хук-скриптов. ### Идентификатор клиента Сервер DHCP может однозначно идентифицировать клиента посредством различных параметров: * имя хоста (в частности то имя, которое отправляет клиент), * MAC-адрес сетевого адаптера клиента через который проходит соединение, * Identity Association ID (IAID), * DHCP Unique Identifier (DUID). Подробнее смотрите в [RFC 3315](https://tools.ietf.org/html/rfc3315#section-4.2). В зависимости от настроек DHCP-сервера, какие-то из этих параметров могут быть обязательными, а другие — опциональными. **Примечание:** Стандартной конфигурации *dhcpcd* в большинстве случаев будет достаточно. Указанные параметры определяются автоматически и ручная настройка обычно требуется только при возникновении проблем. Если при использовании стандартных настроек не удается получить IP, для настройки вы можете использовать следующие опции в `dhcpcd.conf`: * `hostname` — отправляет имя хоста (берется из `/etc/hostname`). * `clientid` — отправляет MAC-адрес интерфейса в качестве идентификатора. * `iaid *имя_интерфейса*` — извлекает IAID для интерфейса, указанного в опции `interface *имя_интерфейса*`. Обе эти опции должны присутствовать одновременно, дополнительно смотрите [это обсуждение](https://bbs.archlinux.org/viewtopic.php?pid=1388376#p1388376). * `duid` — указывает *dhcpcd* использовать из DUID и IAID в качестве идентификатора. Значение DUID устанавливается в `/etc/dhcpcd.duid`. Для эффективной работы DHCP важно, чтобы это значение было уникальным для конкретной системы, и устанавливалось одинаковым на все сетевые интерфейсы. В свою очередь, IAID представляет собой уникальный идентификатор для каждого сетевого интерфейса в отдельности (смотрите подробнее в [RFC 4361](http://tools.ietf.org/html/rfc4361#section-6.1)). При использовании [Dynamic DNS](https://en.wikipedia.org/wiki/Dynamic_DNS "wikipedia:Dynamic DNS") особенно необходимо удостовериться в уникальности этих идентификаторов. Если в сети находятся два DNS-клиента с одинаковыми DUID, они будут конфликтовать, поочередно отнимая друг у друга аренду DNS-записи. Это может произойти, например, в случае, если была сделана копия виртуальной машины с другими именем хоста и MAC-адресом адаптера, но DUID в настройках остался прежним. ### Ускорение DHCP отключением ARP-сканирования *dhcpcd*, следуя рекомендациям стандарта DHCP ([RFC2131](http://www.ietf.org/rfc/rfc2131.txt), раздел 2.2), проверяет при помощи запросов ARP, что присвоенный IP-адрес не используется каким-нибудь другим устройством в сети. Как правило, для небольших домашних сетей в этом нет необходимости, поэтому вы можете ускорить соединение *dhcpcd* примерно на 5 секунд, добавив в `/etc/dhcpcd.conf` строку: ``` noarp ``` Того же эффекта можно достичь, запуская *dhcpcd* с опцией `--noarp`. ### Запасной статический профиль Вы можете настроить статические параметры IP в *dhcpcd*, которые будут использоваться в качестве резервных, если не удалось получить аренду от сервера. Это полезно для автономных устройств, к которым обычно есть доступ только по сети (например, [Raspberry Pi](/index.php/Raspberry_Pi "Raspberry Pi")) для того, чтобы не потерять возможность с ними соединиться. В следующем примере создается профиль `static_eth0` с IP `192.168.1.1` и адресом шлюза и DNS `192.168.1.23`, который устанавливается как запасной для `eth0`: `/etc/dhcpcd.conf` ``` # define static profile profile static_eth0 static ip_address=192.168.1.1 static routers=192.168.1.23 static domain_name_servers=192.168.1.23 # fallback to static profile on eth0 interface eth0 fallback static_eth0 ``` Возможны также более сложные варианты настройки, например, совмещение с опцией `arping`. Подробнее смотрите в `dhcpcd.conf(5)`. ## Хуки *dhcpcd* запускает все скрипты в каталоге `/usr/lib/dhcpcd/dhcpcd-hooks/` в последовательности, определенной стандартным порядком сортировки. Более подробно смотрите в `dhcpcd(5)` и `dhcpcd-run-hooks(8)`. **Примечание:** * Каждый скрипт можно отключить при помощи опции `nohook` в `dhcpcd.conf`. * Опция `env` позволяет установить переменные окружения для **всех** хуков. Например, вы можете заставить хук `30-hostname` всегда устанавливать имя хоста, указав `env force_hostname=YES`. ### 10-wpa_supplicant **Примечание:** Начиная с версии dhcpcd-6.10.0-1 поведение демона по умолчанию изменено: теперь хук 10-wpa_supplicant не запускается по умолчанию! Подробнее: [[1]](https://bbs.archlinux.org/viewtopic.php?id=207416), [[2]](https://gentoo.org/support/news-items/2016-01-08-some-dhcpcd-hooks-are-now-examples.html) Хук `10-wpa_supplicant` автоматически запускает [WPA supplicant](/index.php/WPA_supplicant "WPA supplicant") для беспроводных интерфейсов. Это происходит только если: * процесс *wpa_supplicant* еще не запущен на данном интерфейсе * существует файл настроек *wpa_supplicant*. *dhcpcd* проверяет следующие пути: ``` /etc/wpa_supplicant/wpa_supplicant-"$interface".conf /etc/wpa_supplicant/wpa_supplicant.conf /etc/wpa_supplicant-"$interface".conf /etc/wpa_supplicant.conf ``` в указанном порядке. Вы можете указать свой список путей, используя опцию `env wpa_supplicant_conf=*путь*` в `/etc/dhcpcd.conf`. **Примечание:** Хук использует первый файл настроек, который ему удастся найти, и не будет принимать во внимание остальные. Имейте это в виду, если у вас несколько файлов настроек *wpa_supplicant*. Если вы самостоятельно подключаетесь к беспроводным сетям с помощью *wpa_supplicant*, этот хук может приводить к нежелательным попыткам подключения. Например, если вы остановили *wpa_supplicant*, он может вновь включить сетевой интерфейс. Также, если вы используете [netctl-auto](/index.php/Netctl_(%D0%A0%D1%83%D1%81%D1%81%D0%BA%D0%B8%D0%B9)#.D0.90.D0.B2.D1.82.D0.BE.D0.BC.D0.B0.D1.82.D0.B8.D1.87.D0.B5.D1.81.D0.BA.D0.BE.D0.B5_.D0.BF.D0.B5.D1.80.D0.B5.D0.BA.D0.BB.D1.8E.D1.87.D0.B5.D0.BD.D0.B8.D0.B5_.D0.BF.D1.80.D0.BE.D1.84.D0.B8.D0.BB.D0.B5.D0.B9 "Netctl (Русский)"), *wpa_supplicant* будет запускаться автоматически с использованием файла настроек `/run/network/wpa_supplicant_"$interface".conf`, поэтому запуск из хука будет излишним и приведет лишь к появлению ошибок в логе при чтении стандартного файла `/etc/wpa_supplicant/wpa_supplicant.conf`, который содержит лишь примеры и может не являться корректным с точки зрения программы. Чтобы выключить хук, добавьте `nohook wpa_supplicant` в `dhcpcd.conf`. ## Советы и рекомендации ### Освобождение арендованного IP-адреса Файл аренды `/var/lib/dhcpcd/dhcpcd-*имя_интерфейса*.lease` (где `*имя_интерфейса*` — имя сетевого интерфейса, для которого имеется назначенный в аренду IP-адрес) содержит последний ответ на запрос аренды, полученный от DHCP-сервера. Он используется для того, чтобы сохранить адрес и срок аренды (атрибут `mtime`). По истечении срока IP-адрес из файла запрашивается снова у DHCP-сервера, и, если адрес свободен, он снова присваивается сетевому интерфейсу клиента. Если вы не хотите, чтобы использовался тот же IP-адрес, просто удалите этот файл и перезапустите *dhcpcd*. ## Решение проблем ### Client ID Если у вас сеть с DHCPv4, которая фильтрует Client ID, основанные на MAC-адресах, вам скорее всего нужно изменить строку `/etc/dhcpcd.conf` ``` # Use the same DUID + IAID as set in DHCPv6 for DHCPv4 Client ID as per RFC4361. duid ``` на `/etc/dhcpcd.conf` ``` # Use the hardware address of the interface for the Client ID (DHCPv4). clientid ``` иначе вы не сможете получать аренду от DHCP, если он не может правильно прочесть ваш Client ID [DHCPv6](https://en.wikipedia.org/wiki/DHCPv6 "wikipedia:DHCPv6"). Подробнее смотрите в [RFC 4361](http://tools.ietf.org/html/rfc4361). ### Освобождение аренды IP-адреса Иногда происходит нежелательное присвоение IP-адреса. Например, когда два маршрутизатора соединены вместе через VPN-канал, и второй маршрутизатор через этот канал присваивает IP клиенту. Чтобы это исправить, освободите IP-адрес, выполнив: ``` # dhcpcd -k ``` Теперь попробуйте снова: ``` # dhcpcd ``` Вероятно, желаемого результата не удастся добиться с первого раза. ### Не удается подключиться к маршрутизатору С некоторыми маршрутизаторами может возникать проблема, когда к ним не удается подключиться при помощи *dhcpcd*. Для того, чтобы это исправить, закомментируйте или удалите строку ``` require dhcp_server_identifier ``` в файле настроек `/etc/dhcpcd.conf`. Обратите внимание, что это может вызвать новые проблемы, если в вашей сети находятся несколько DHCP-серверов; смотрите [эту страницу](http://technet.microsoft.com/en-us/library/cc977442.aspx) для получения дополнительной информации. ### dhcpcd.service конфликтует с udev при старте системы `dhcpcd.service` может быть [Systemd (Русский)#включен](/index.php/Systemd_(%D0%A0%D1%83%D1%81%D1%81%D0%BA%D0%B8%D0%B9)#.D0.B2.D0.BA.D0.BB.D1.8E.D1.87.D0.B5.D0.BD "Systemd (Русский)") без указания сетевого интерфейса. Однако, это может создать т. н. *состояние гонки* (конфликт) с *systemd-udevd* в момент загрузки системы, когда *systemd-udevd* пытается назначить интерфейсу постоянное имя: ``` error changing net interface name wlan0 to wlp4s0: Device or resource busy ``` Чтобы избежать этого, запускайте *dhcpcd* для каждого конкретного сетевого интерфейса отдельно, как описано в разделе [#Запуск](#.D0.97.D0.B0.D0.BF.D1.83.D1.81.D0.BA). ### Время ожидания Если *dhcpcd* работает на одном сетевом интерфейсе и ему не удается получить аренду в течение 30 секунд (например, если сервер еще не готов), процесс просто выведет сообщение об ошибке и завершится. Чтобы заставить *dhcpcd* ожидать бесконечно, добавьте опцию `timeout` со значением `0`: `/etc/systemd/system/dhcpcd@.service.d/timeout.conf` ``` [Service] ExecStart= ExecStart=/usr/bin/dhcpcd -w -q **-t 0** %I ``` Не забудьте [перезагрузить конфигурацию systemd](/index.php/Systemd_(%D0%A0%D1%83%D1%81%D1%81%D0%BA%D0%B8%D0%B9)#.D0.A0.D0.B5.D0.B4.D0.B0.D0.BA.D1.82.D0.B8.D1.80.D0.BE.D0.B2.D0.B0.D0.BD.D0.B8.D0.B5_.D0.BF.D1.80.D0.B5.D0.B4.D0.BE.D1.81.D1.82.D0.B0.D0.B2.D0.BB.D0.B5.D0.BD.D0.BD.D1.8B.D1.85_.D0.BF.D0.B0.D0.BA.D0.B5.D1.82.D0.B0.D0.BC.D0.B8_.D1.84.D0.B0.D0.B9.D0.BB.D0.BE.D0.B2_.D1.8E.D0.BD.D0.B8.D1.82.D0.BE.D0.B2 "Systemd (Русский)"). ## Смотрите также * [dhcpcd(8)](http://roy.marples.name/man/html8/dhcpcd.html) * [dhcpcd.conf(5)](http://roy.marples.name/man/html5/dhcpcd.conf.html)