Я думаю, что вы столкнулись с тем, что я считаю серьезной ошибкой сервера isc-dhcp. Эта программа записывает адрес Ethernet каждого устройства, которое он когда-либо видел, и IP-адрес, который он назначил ему. Но он никогда не использует эту информацию, чтобы поддерживать одинаковые устройства на стабильных IP-адресах. Вместо этого он предполагает, что недостаточно IP-адресов, и преимущественно использует их повторно.
Единственный способ обойти это - заставить свой DHCP-сервер всегда назначать определенный IP-адрес каждому имеющемуся устройству. Таким образом, вы получаете лучшее из обоих миров ... всем назначается IP с dhcp, но этот IP никогда не меняется.
OTOH, если вы действительно хотите, чтобы IP-адрес был назначен определенному MAC-адресу, лучше всего обходиться без посторонней помощи, это сканировать подсеть. Если вы попытаетесь пропинговать каждый (локальный) IP-адрес, ваша таблица arp -a
будет включать все MAC-адреса и назначенные им IP-адреса. Есть даже специальная команда для этого arp-scan --localnet
которая забывает выполнять PING. ПРИМЕЧАНИЕ: это работает, даже если они игнорируют пакеты PING, потому что они не могут игнорировать запросы ARP, которые отправляются первыми.
С помощью извне вы можете выполнить поиск на DHCP-сервере, например, этот DHCP-клиент позволяет запрашивать любой MAC-адрес. Конечно, это будет выделять и побочный эффект.
Вот пример использования arp-scan.
set -e
grep -v 'mac.local #DYN' /etc/hosts > /etc/hosts.new
arp-scan --localnet -qg |
grep ':..:..:..:..:' |
sed -e 's/:/_/g' -e 's/$/.mac.local #DYN/' >> /etc/hosts.new
[ -s /etc/hosts.new ] && {
cmp -s /etc/hosts.new /etc/hosts ||
mv /etc/hosts.new /etc/hosts
}
Очевидно, это работает только для машин в одной подсети. Имя изменится, если будет заменена карта Ethernet или машина будет клонирована на новое оборудование. MAC-адреса можно изменить вручную с помощью команды ifconfig
для таких задач, как «Клонирование MAC-адресов», которые могут требоваться модемами DSL или связыванием интерфейса или аналогичным образом.