Mikrotik DHCP Routes options 121 and 249: различия между версиями

Материал из noname.com.ua
Перейти к навигацииПерейти к поиску
Строка 46: Строка 46:
 
<BR>
 
<BR>
 
Тут конечно мало что понятно - попробую привести пример
 
Тут конечно мало что понятно - попробую привести пример
* маршрут 10.20.0.0/16 через шлюз 1.0.0.1
+
* маршрут <code>10.20.0.0/16</code> через шлюз <code>1.0.0.1</code>
 
* Маски и адреса подобраны такими намеренно - что бы показать когда нули отбрасываются а когда нет
 
* Маски и адреса подобраны такими намеренно - что бы показать когда нули отбрасываются а когда нет
   
   
* Маска dec(16) => 0x10 - маска будет 10, причем в маске все знаки - значащие, для маски /8 значение будет 0x08 а не 0x8
+
* Маска dec(16) => <code>0x10</code> - маска будет <code>10</code>, причем в маске все знаки - значащие, для маски /8 значение будет <code>0x08</code> а не <code>0x8</code>
* Адрес сети 10.20.0.0
+
* Адрес сети <code>10.20.0.0</code>
 
** последние 2 октета тут не значащие (они относятся к адресу хоста а не адресу сети, и это опредеяется по маске, и они отбрасываются
 
** последние 2 октета тут не значащие (они относятся к адресу хоста а не адресу сети, и это опредеяется по маске, и они отбрасываются
** dec(10) => 0x0A - так же как для маски, на каждый октет отводится строго два разряда
+
** dec(10) => <code>0x0A</code> - так же как для маски, на каждый октет отводится строго два разряда
** dec(20) => 0x14 - тут вопрос разрядности не возникает
+
** dec(20) => <code>0x14</code> - тут вопрос разрядности не возникает
 
** итоговое значение которое нужно записать в опцию <code>0a 14</code>
 
** итоговое значение которое нужно записать в опцию <code>0a 14</code>
* Шлюз 1.0.0.1 преобразовывается по аналогии с адресом сети, итоговое значение 1 => 0x01 0 => 0x00 0 => 0x00 1 =>0x01 Итого - 01000001
+
* Шлюз <code>1.0.0.1</code> преобразовывается по аналогии с адресом сети, итоговое значение 1 => <code>0x01</code> 0 => <code>0x00</code> 0 => <code>0x00</code> 1 => <code>0x01</code> Итого - <code>01000001</code>

Версия 16:18, 16 августа 2024

Mikrotik, DHCP Classless Route

TL;DR

Микротик умеет выдавать маршруты по dhcp хотя конфигуриться это через жопу

Зачем это может быть нужно

Ебучий корпоративный впн разворачивает в себя дефолт, и все хосты в домашней сети кроме L2-connected становятся недоступны. Настройки ВПНа на серверной стороне мне не доступны (и не факт что это убожество умеет нужные фичи)
Соответвенно есть 2 решения и оба они гребаные костыли:

  • прописывать маршруты локально каждый раз при поднятии ВПНа (скриптом например)
  • выдавать маршруты с dhcp (они будут работать так как за счет более узкой маски будут предпочтительнее чем default)

Как это настроить на микротике

Эта задача разделяется на 2 части

  • Сформировать правильно значение опций
  • Прописать на микротике

Option 121 и 249

Для устройств с разной реализацией DHCP клиента нужны 2 разные опции (винда/все остальные) но так как формат одинаковый то сложности тут немного

Формат опций 121 и 249

Опция 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 |
+----+-----+----+----+----+----+----+

Цитата:

DHCP server administrators [...] should specify the default router(s) both in the Router option and in the Classless Static Routes option.

На человеческом это значит что нужно кроме всех маршрутов в опциях выдавать еще и дефолт
Тут конечно мало что понятно - попробую привести пример

  • маршрут 10.20.0.0/16 через шлюз 1.0.0.1
  • Маски и адреса подобраны такими намеренно - что бы показать когда нули отбрасываются а когда нет


  • Маска dec(16) => 0x10 - маска будет 10, причем в маске все знаки - значащие, для маски /8 значение будет 0x08 а не 0x8
  • Адрес сети 10.20.0.0
    • последние 2 октета тут не значащие (они относятся к адресу хоста а не адресу сети, и это опредеяется по маске, и они отбрасываются
    • dec(10) => 0x0A - так же как для маски, на каждый октет отводится строго два разряда
    • dec(20) => 0x14 - тут вопрос разрядности не возникает
    • итоговое значение которое нужно записать в опцию 0a 14
  • Шлюз 1.0.0.1 преобразовывается по аналогии с адресом сети, итоговое значение 1 => 0x01 0 => 0x00 0 => 0x00 1 => 0x01 Итого - 01000001