понедельник, 11 ноября 2013 г.

Cisco: DHCP static bindings

Поиск по ключевым словам, вынесенным в заголовок, дает массу результатов. Каждый суслик-агрономиндус и каждый новоиспеченный CCNA считает своим долгом родить в своем блоге  полуграмотную статью о том, как сделать статический биндинг на Cisco. Более-менее внятная информация есть только на англоязычных форумах Cisco, и то там один-два толковых советчика. Остальные просто создают шум.

Результаты удручающие. Помимо очевидных разночтений, эти писульки либо не отличаются точностью и полнотой, либо представляют собой откровенный копипаст другого такого же неграмотного суслика э-э-э-э..... "специалиста".

Позорно, джентльмены. Беретесь объяснять - так будьте так добры, объясняйте внятно.

Я хочу попытаться исправить кривизну всей этой писанины, из которой полезное пришлось извлекать как золотоискателю.

Часть 1. Делаем статическую привязку одиночных хостов.


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

Порядок действий следующий.

1. Надо определить MAC-адрес целевого устройства командой show ip dhcp binding IP-адрес
2. Зачистить существующую привязку командой clear ip dhcp binding IP-адрес
3. Выполнить последовательность команд:

conf


ip dhcp pool host_pool1
host 192.168.100.44 255.255.255.0
client-identifier 0100.1d09.3f28.a3
end


write


Данный адрес не требуется исключать из пула DHCP, поскольку статический биндинг автоматически исключает явно привязанные адреса из пула соответствующей сети. Идентификатор клиента представляет собой не что иное, как его мак-адрес, определенный на шаге 1. IP-адрес привязки можно задать совершенно иной (по существу, любой из пула) и, после обновления адреса на устройстве будет выдан заданный вами адрес (и впредь будет выдаваться, lease time для адресов, заданных подобным образом - Infinite).

Часть 2. Статическая привязка любого количества хостов из файла.


Привязка большего количества хостов из файла немного более сложная процедура. Прежде всего вам понадобится TFTP-сервер на клиенте и навыки загрузки файлов на Cisco. Во-вторых, потребуется некоторое представление о файловой системе самого устройства.

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

1. Следует идентифицировать все устройства, которые вы желаете статически привязать к определенным адресам способом, описанным в 1 части. Сохраните mac-адреса.
2. Определите, какие именно адреса вы хотите зарезервировать за данными устройствами и тоже запишите их.
3. Проверьте, чтобы данные адреса не были исключены из выдачи DHCP-сервером командами ip dhcp excluded-address
4. Создайте файл static-bindings следующей структуры:

*time* Nov 4 2013 06:29 PM
*version* 2
!IP address Type Hardware address Lease expiration
192.168.100.44 /24 id 0100.1d09.3f28.a3 Infinite
192.168.100.119 /24 id 0100.19d1.3f50.22 Infinite
192.168.100.120 /24 id 0100.e04d.9708.19 Infinite
*end*


Строки, выделенные * - ключевые поля. Время - это время, когда вы создали файл. Версия - номер версии базы привязки. В принципе, можно задавать любое, главное, что при повторных загрузках файла она не уменьшалась. Строка с ! - комментарий, описывающий структуру файла.
Важно - маска сети, в которой находятся адреса, должна быть отделена от адреса пробелом.  И это должна быть именно маска сети, а не хоста (т.е. /32 не задавайте - адреса не будут выдаваться). Формат окончания строк (DOS/UNIX) не принципиален.
5. Загрузите файл на циску по TFTP. Для этого запустите на своем клиенте TFTP-сервер, положите созданный файл привязок в его корень и выполните команду на Cisco:

copy tftp://ip-address-вашего-клиента/static-bindings flash0:/


Файл будет загружен в корневой раздел файловой системы (у меня на 2911 это flash0:/). Чисто технически вы можете предварительно создать там поддиректорию и затолкать файл в нее. Но у меня там не навалено файлов и я положил файл привязки прямо в корень.
6. Сбросьте все ранее созданные биндинги командой clear ip dhcp binding *.
7. Выполните последовательность команд:

conf

ip dhcp pool static-pool
origin file flash0://static-bindings
default-router 192.168.100.1
dns-server 208.67.220.220 208.67.222.222

end

write


В принципе, default-router и dns-сервер можно и не указывать - они будут взяты из данных пула сети, в котором находились данные адреса. Но так более правильно с точки зрения логики.

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

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