Нашел на просторах интернета забавную статейку, проверил работает:
DHCP Classless Route, зачем он нужен?
Процесс гугления привёл меня на страницу документации Mikrotika. Всё ясно — нам поможет DHCP Classless Route. Настройка относительно легка, но вот из-за этой относительности убил на настройку пол дня. При этом возникали проблемы с сетевым доступом у хостов сети — у Windows машин пропадал маршрут по умолчанию.
Ещё одна сложность настройки Mikrotik заключается в том, что нужно вводить маршрут в шестнадцатеричном (либо в двоичном) виде, что меня слегка сбило с толку. Да и в документации некоторые нюансы не указаны. Данная опция рассмотрена в базовом варианте. А дальше как хотите )). Пришлось немного углубиться в подробности настройки.
Для того что бы у вас маршрут получили все хосты, независимо от семейства операционной системы нужно настроить 2 опции : 121 и 249. Если бы все разработчики следовали бы RFC, то возможно жизнь системных администраторов была бы гораздо преснее и менее интересной.Опция 121
Опция 121, как и все остальные DHCP опции, описана в rfc3442. Этот документ диктует следующие правила и требования к 121 параметру:
- минимальная длина 5 байт.
- можно вписать один или более маршрутов
- каждый из маршрутов должен содержать Адрес сети назначения и IP адрес шлюза.
Согласно этого же документа схема маршрута будет выглядеть так:
Code Len Destination 1 Router 1
+-----+---+----+-----+----+----+----+----+----+
| 121 | n | d1 |… | dN | r1 | r2 | r3 | r4 |
+-----+---+----+-----+----+----+----+----+----+
Destination 2 Router 2
+----+-----+----+----+----+----+----+
| d1 |… | dN | r1 | r2 | r3 | r4 |
+----+-----+----+----+----+----+----+
Для того что бы правильно составить маршрут нужно перевести адрес сети назначения, маску подсети и адрес шлюза в шестнадцатеричный формат. Желающие "пострадать", повысить личный скилл могут переводить в двоичный формат.
Пример 1.
Составим строку маршрута для сети 10.0.0.0/24 через маршрутизатор 192.168.0.2 LEN(маска подсети назначения) = 24 =0x18
DESTINATION = 10.0.0.0 = 0A 00 00
ROUTER = 192.168.0.2 = c0 a8 00 02
Итоговая строчка: 0x180A0000c0a80002
добавляем маршрут в микротик:через winbox:
через консоль:
/ip dhcp-server option
add code=121 name=opt_121_10 value=0x180A0000c0a80002
set 0 dhcp-option=opt_121_10
Пример 2.
Составим строку маршрута для сети 10.0.0.0/8 через маршрутизатор 192.168.0.2
LEN (маска подсети назначения) = 8 = 0x08
DESTINATION = 10.0.0.0 = 0A
ROUTER = 192.168.0.2 = c0 a8 00 02
Итоговая строчка: 0x080Ac0a80002Пример 3.
Составим строку маршрута для сети 10.0.0.0/8
Очень легко можем нарваться на внезапное отключение клиентов из-за одного маленького нюанса
LEN (маска подсети назначения) = 29 = 0x19
DESTINATION = AC100400
ROUTER = 192.168.0.2 = AC10040001
Итоговая строчка: 0x19AC100400AC10040001
Картинки ко 2 им 3 примерам не прикладываю, т.к. на самом маршрутизаторе настраивать идентично примеру 1.
Если вы некорректно укажете адрес подсети. Ошибку сделать очень легко. Что бы избежать этого нужно вспомнить теорию и применить её на практике.
Давайте вспомним. Есть адрес и маска подсети. Адрес делят на две части — сетевую и хостовую. Маска подсети указывает сколько первых бит адреса относится к сетевой части. Соответственно, оставшаяся часть адреса, указывает на хостовую.
Если нам нужен маршруте к сети с маской 24 бита, то нам нужны первые 3 октета адреса сети назначения (Пример 1)
Если нам нужен маршруте к сети с маской 8 бит, то нам нужен, всего лишь, 1-й октет адреса сети назначения (Пример 2)
Если нам нужен маршруте к сети с маской 25 бит, то тут нужно будет указывать все октеты (Пример 3)Опция 249
На страничке wikipedia с описанием dhcp есть ссылка на общепринятые DHCP опции. 249 опция находится в диапазоне для частного использования.
Я не знаю почему товарищи мелгкомягкие придерживаются взглядов товарища Ленина, но им они следуют достаточно фанатично. Несмотря на наличие RFC3442 майкрософт решил на своих клиентах маршрут получать опцией 249.
На микротике данная опция настраивается подобно 121-й опции
0x[маска подсети адреса назначения][адрес назначения][адрес шлюза]Если возникнут проблемы с настройкой Windows машин, то попробуйте воспользоваться советом ниже:
0x[маска подсети адреса назначения][адрес назначения][адрес шлюза]00[адрес шлюза]
Добавьте к строчке 00 и адрес маршрутизатора ещё раз.
Почему это работает я не понял. Путём эмпирических изысканий было найдено предоставленное решение.
В последствии у меня заработала опция и без этого костыля.Несколько маршрутов одной строкой
0x080Ac0a8000218AC100Bc0a80002
К сожалению в документации на сайте Mikrotik нет примера как правильно настраивать несколько маршрутов. На помощь нам приходит RFC3442 в котором есть замечательная схема составления нескольких маршрутов которая приведена выше.
Добавляем к первому маршруту второй маршрут без 0x
Пример:
два маршрута 10.0.0.0/8 и 172.16.4.0/24 через шлюз 192.168.0.2 одной строкой будут выглядеть так:жирным выделил маски подсетей
Надеюсь данная статья будет кому-то полезной.
Если вчитаться в RFC3442:
DHCP server administrators [...] should specify the default router(s) both in the Router option and in the Classless Static Routes option.
Использование опций 121 и 249 убивают маршрут по умолчанию. То есть к обоим строчкам лучше в конце дописать 00c0a80001 (0.0.0.0/0 via 192.168.0.1).