Вопрос или проблема
У меня есть оборудование, которому я хотел бы назначить конкретный IP-адрес, когда DHCP-серверы недоступны.
Я настроил следующий статический лизинг в /etc/dhcp/dhclient.conf:
timeout 30;
lease {
interface "eth0";
fixed-address 192.168.1.254;
option subnet-mask 255.255.255.0;
option routers 127.0.0.1;
expire never;
}
Это работает, но eth0 получит этот IP только тогда, когда файлы dhclient.eth0.leases и dhclient.leases в /var/lib/dhcp/ будут пустыми.
Если у вас нет уважительной причины мне противоречить, я бы предпочел, чтобы статический лизинг из dhclient.conf назначался, когда DHCP-сервер не отвечает, вместо использования старых лизингов. Это упростит процесс устранения неполадок и позволит каким-то образом получить доступ к оборудованию, которое доступно только через SSH и не имеет дисплея для вывода текущего IP.
Я прочитал руководство dhclient и множество результатов поиска в Google, но не нашел встроенного способа или каких-либо предложений, как это сделать.
Решения, о которых я подумал:
1-Убрать содержимое dhclient.leases и установить права так, чтобы его нельзя было изменить
2-Связать dhclient.leases с /dev/null и установить права так, чтобы его нельзя было изменить
3-Точно так же, как в пункте 1, но вместо настройки статического лизинга в dhclient.conf, вручную добавить его в dhclient.leases перед установкой прав.
Также есть AVAHI, главная цель которого – назначить IP-адрес, когда все остальное подводит.
AVAHI должен выдавать непрактичный адрес 169.254.x.x.
RFC 5735 определяет 169.254.0.0/16 как «связевой локальный» блок, как описано в RFC3927. Это диапазон адресов, который должен использоваться для автонастройки хостов, например, когда сервер DHCP не может быть найден.
Я создал ‘/etc/sysconfig/network-scripts/ifcfg-eth0:0’:
DEVICE=eth0:0
BOOTPROTO=none
ONBOOT=yes
NETWORK=192.168.222.0
NETMASK=255.255.255.0
IPADDR=192.168.222.22
USERCTL=no
Это просто привязывает второй статический IP к сетевому интерфейсу, используя псевдоним. Это не совсем то, что я хотел, но будет работать, пока я не разберусь с конфигурацией dhclient.conf.
В качестве альтернативы, вы можете подключить вторую сетевую карту для этой статической цели.
Ответ или решение
Когда DHCP-сервер не отвечает, чтобы заставить dhclient использовать статическую аренду из dhclient.conf вместо предыдущих DHCP-аренд, вам необходимо внести небольшие изменения в конфигурацию dhclient.conf
и применить некоторые обходные пути, которые помогут избежать использования старых аренды. Вот несколько шагов, которые вы можете предпринять:
-
Измените конфигурацию
dhclient.conf
:Убедитесь, что ваш файл
/etc/dhcp/dhclient.conf
настроен на использование статической аренды. Проверьте, чтобы в нем были указаны параметрыtimeout
иretry
, а также статическая аренда была правильно описана. Например:timeout 5; retry 5; lease { interface "eth0"; fixed-address 192.168.1.254; option subnet-mask 255.255.255.0; option routers 127.0.0.1; expire never; }
В данном примере мы уменьшили время ожидания до 5 секунд и установили количество попыток до 5. Это позволит
dhclient
быстро переходить к использованию статической конфигурации. -
Очистка предыдущих аренд:
Чтобы гарантировать, что старые аренды не будут использованы, вы можете вручную очистить файлы аренды либо перед запуском dhclient, либо в автоматическом режиме:
sudo rm /var/lib/dhcp/dhclient.leases
Вы можете добавить скрипт (например, в
/etc/network/if-up.d/
) для автоматической очистки файла аренды всякий раз, когда сетевой интерфейс активируется. -
Настройка прав на файлы аренды:
После удаления файлов аренды вы можете изменить права доступа к
/var/lib/dhcp/dhclient.leases
, чтобы предотвратить его модификацию:sudo chattr +i /var/lib/dhcp/dhclient.leases
Команда
chattr +i
делает файл «неизменяемым», что позволяет избежать случайного перезаписывания файла аренды. -
Настройка независимого статического IP:
В качестве альтернативы вы можете рассмотреть возможность добавления статического IP-адреса через конфигурацию сети, например в файле
/etc/sysconfig/network-scripts/ifcfg-eth0
:DEVICE=eth0 BOOTPROTO=static ONBOOT=yes IPADDR=192.168.1.254 NETMASK=255.255.255.0
Это позволяет сетевому интерфейсу получать статический IP-адрес независимо от dhclient и DHCP-сервера.
-
Исключите DHCP (опционально):
Если вам не требуется динамическое назначение IP-адресов с помощью DHCP, рассмотрите возможность полностью отключить DHCP, чтобы интерфейс всегда использовал статическую конфигурацию. Это можно сделать также с помощью вышеупомянутого метода.
-
Использование Avahi:
Как вы упомянули, Avahi может предоставить вам альтернативный вариант для получения локального адреса 169.254.x.x в случае, если DHCP не доступен. Однако Имейте в виду, что этот адрес будет недоступен за пределами текущего канала сети.
Эти шаги помогут вам гарантировать, что ваш интерфейс eth0
будет использовать статическую аренду из dhclient.conf
, когда DHCP-сервер недоступен.