Windows dhcp бесклассовые статические маршруты

Настройка выдачи статических маршрутов по DHCP (DHCP Classless Route, Option 249, Option 121)

Одна из первых статей, написанных про настройку Микротик RouterOS
Статья и настройки обновлены для актуальных версих MikroTik RouterOS 6.xx и выше

Настройка выдачи статических маршрутов по DHCP для клиентов Windows (DHCP Classless Route, Option 249)

Дано: клиент, получающий адрес посредством DHCP, подключение к Интернет — посредством VPN (ip-адрес клиента 172.12.0.18, ip-адрес сервера(шлюз) 172.12.0.1; ряд ресурсов интернета должны быть доступны без поднятия vpn-соединения.

Ситуация: Клиент получает, допустим, адрес 192.168.130.18/24, шлюз 192.168.130.254, днс 192.168.130.254 — всё это достаточно легко настраивается через winbox и вопросов возникнуть не должно. Есть сайт http://maxigame.by/ (81.25.32.44) — который провайдер сделал доступным по локальной сети без поднятия vpn-подключения. Пока не поднято vpn-соединение — всё чудесно — доступ к сайту происходит через шлюз по умолчанию 192.168.130.254, но стоит поднять vpn-соединение — адрес шлюза по-умолчанию сменится на 172.12.0.1 — и сайт будет уже доступен не через локальную сеть, а через Интернет. Соответствено — списываются денежки.

Решение 1 (простое, правильное, трудновнедряемое): Каждый клиент прописывает у себя статический маршрут к данному сайту. Ужас провайдера и страшный сон техподдержки, особенно если подсетей не одна, и не две, а сайтов гораздо больше.

Решение 2 (сложнее, правильное, легковнедряемое): Внимательнее расмотрим настройку DHCP Network

Нас интересует DHCP Options.

Немного теории — для передачи статических маршрутов в DHCP сервере микротика используется опция с кодом 249 (для клиентов под управлением Windows). Синтаксис строки для данной опции (все значения в 16-ричной системе HEX) :

Наш конкретный пример:

Все последующие маршруты дописываются без пробелов справа по тем же правилам. Теперь о настройке. Переходим на закладку Options, нажимаем «плюс» — появится окно «New DHCP Option» Настраиваем поля:

Name (название опции): Opt_249_net130 название может быть любым, я использовал конструкцию из Opt[ion]_[249]_net[адрес подсети]130
Code: 249 Value: 0x205119202СC0A882FE

На закладке Networks, в настройке DHCP Network — выбираем для DHCP Option нашу опцию Opt_249_net130

Результат: Теперь при получении адреса от DHCP-сервера в таблице маршрутов клиента появится маршрут к maxigame.by (81.25.32.44), и доступ к данному сайту всегда будет через указанный вами шлюз вне зависимости от того, поднято vpn-соединение или нет.

Пример 2: условия те же, но добавим еще сеть 10.9.0.0/16 через шлюз 192.168.130.254

Итоговая конструкция:

Читайте также:  Linux установка пакетов через терминал

Именно так — без пробелов. Для понимания две конструкции рядом 1-ая и 2-ая:

Настройка выдачи статических маршрутов по DHCP для всех остальных (DHCP Classless Route, Option 121)

Предыдущая часть статьи предназначена для клиентов работающих на Windows. Для всех остальных мы используем для передачи статических маршрутов в DHCP сервере MikroTik опцию с кодом 121. Настройки аналогичны как и для Option 249, за одним исключением — в итоговую конструкцию для Option 121 необходимо еще добавить шлюз по-умолчанию 00C0A882FE (0.0.0.0/0 — шлюз 192.168.130.254):

Name (название опции): Opt_121_net130
Code: 121 Value: 0x205119202СC0A882FE00C0A882FE

Итоговая конструкция:

Создание группы (Option Sets) из нескольких DHCP Option

Т.к. нам неизвестно, какие клиенты у нас будут подключаться и получать адреса от нашего DHCP-сервера MikroTik — нам необходимо передавать оба параметра DHCP Options нашим клиентам — и Opt_249_net130 и Opt_121_net130. В этом нам поможет Option Sets:
Переходим на закладку Option Sets, нажимаем «плюс» — появится окно «DHCP Option Set» Настраиваем поля:
Name (название группы опций): set_net130
Options Выбираем из списка последовательно ранее созданные нами опции — Opt_249_net130 и Opt_121_net130

На закладке Networks, в настройке DHCP Network — выбираем для DHCP Option Set нашу группу опций set_net130

Windows dhcp бесклассовые статические маршруты

PS
Объясню, зачем это нужно. При передачи мультикастом iptv все вобщем то замечательно, до тех пор, пока клиент не поднимает pppoe (или любое другое VPN соединение). При этом у него прописывается шлюзом по умолчанию для мультикаста другой ip-шник, который выдается по ppp-соединению, причем с лучшей метрикой. iptv работать перестает. Как это выглядит:
224.0.0.0 240.0.0.0 192.168.1.201 192.168.1.201 192.168.1.201 20
224.0.0.0 240.0.0.0 91.192.97.1 91.192.97.1 91.192.97.1 1

Если бы удалось передать маршрут:
239.1.1.0 255.255.255.0 192.168.1.201 192.168.1.201 192.168.1.201 1

то проблема бы была решена.
Но как в конфиге-то это прописать?

1.2 , VecH ( ok ), 01:45, 11/08/2009 [ответить] [﹢﹢﹢] [ · · · ] + / –
Маршруты в десятичном заданы и читабельны
Для чего тут скрипт на perl-е ?

Да, и маршрутов можно передавать несколько:
MASK, NETWORK, GATEWAY, MASK, NET, GATEWAY, . ;

2.5 , Аноним ( — ), 08:54, 11/08/2009 [^] [^^] [^^^] [ответить] + / –
А это читабельно будет?
> ($s1, $s2, $s3, $s4) = split(/\./, $router);
> push(@bytes, sprintf(‘%02x’, $s1));
> .
> return join(‘:’, @bytes);

Строка вида 0a:00:00:01 для 10.0.0.1 еще понимается, а для более запущенных случаев? 🙂

3.8 , VecH ( ok ), 15:24, 11/08/2009 [^] [^^] [^^^] [ответить] + / –
Я имею ввиду вот это:
> option rfc3442-classless-static-routes 16, 172,16, 10,16,40,100;
> где
> 16 (маска)
> 172.16.0.0 (сеть)
> 10.16.40.100 (шлюз)

Где тут используется шестнадцатеричный формат который выдает перл?
помню когда сталкивался с этим, перловый скрипт предназначался совсем для другого метода решения проблемы

Он тут не к месте, поправьте меня если неправ

4.11 , коекто ( ? ), 22:38, 11/08/2009 [^] [^^] [^^^] [ответить] + / –
>[оверквотинг удален]
>> где
>> 16 (маска)
>> 172.16.0.0 (сеть)
>> 10.16.40.100 (шлюз)
>
>Где тут используется шестнадцатеричный формат который выдает перл?
>помню когда сталкивался с этим, перловый скрипт предназначался совсем для другого метода
>решения проблемы
>
>Он тут не к месте, поправьте меня если неправ

Определение новых опций допустимо только в последних версиях dhcpd

у кого более старые
option ortion-249 10:AC:10:0A:10:28:64

5.12 , VecH ( ok ), 22:51, 11/08/2009 [^] [^^] [^^^] [ответить] + / –
>Определение новых опций допустимо только в последних версиях dhcpd
>
>у кого более старые
>option ortion-249 10:AC:10:0A:10:28:64

Так об этом даже упоминания нет а скрипт есть ))

1.3 , VecH ( ok ), 01:45, 11/08/2009 [ответить] [﹢﹢﹢] [ · · · ] + / –
И еще вопрос
как передавать статические марщруты клиентам подключающимся по VPN и получаемые адреса с сервера
  • 2.4 , madvamp ( ? ), 07:11, 11/08/2009 [^] [^^] [^^^] [ответить]
  • + / –
    Вроде смотрел такого сделать вроде бы нельзя (по крайней мере на Windows), хотя если в радиусе видел атрибут framed-route (вроде бы он за это отвечает), но виндовые клиенты не понимают и все 🙁
  • 2.6 , Уноним ( ? ), 09:48, 11/08/2009 [^] [^^] [^^^] [ответить]
  • + / –
    если использовать openvpn, то там можно указать push-route
  • 2.7 , Славон ( ? ), 09:57, 11/08/2009 [^] [^^] [^^^] [ответить]
  • + / –
    Если в винде создавать ВПН через админскую фигню (честно не помню как называется, но иконка у ней в виде баранки разноцветной) то там можно указать адрес веб сервера от куда будут забираться роуты после соединения.
  • 3.9 , VecH ( ok ), 15:25, 11/08/2009 [^] [^^] [^^^] [ответить]
  • + / –
    >Если в винде создавать ВПН через админскую фигню (честно не помню как
    >называется, но иконка у ней в виде баранки разноцветной) то там
    >можно указать адрес веб сервера от куда будут забираться роуты после
    >соединения.

    Искал, не нашел

  • 4.10 , Alexander ( ?? ), 17:34, 11/08/2009 [^] [^^] [^^^] [ответить]
  • + / –
    тулза называется CMAK (Connection Manager Administration Kit). умеет создавать бандл коннекции со статик роутами внутри.
  • 2.13 , freedom ( ? ), 17:35, 13/08/2009 [^] [^^] [^^^] [ответить]
  • + / –
    такое работает через dhcp inform, его умеет делать сам клиент MS.
    Но нужна поддержка со стороны VPN сервера, он должен быть dhcp-relay для проброса пакета на dhcp-server.
  • 3.14 , freedom ( ? ), 17:36, 13/08/2009 [^] [^^] [^^^] [ответить]
  • + / –
    > такое работает через dhcp inform, его умеет делать сам клиент MS.
    >
    >Но нужна поддержка со стороны VPN сервера, он должен быть dhcp-relay для
    >проброса пакета на dhcp-server.

    http://itdoc.com.ua/2009/02/razreshenie-dhcp-retranslyatora-dlya-vpn-klientov

    4.15 , VecH ( ok ), 17:39, 13/08/2009 [^] [^^] [^^^] [ответить] + / –
    Ну это под офтопиком, не подходит
    1.16 , pavlinux ( ok ), 11:49, 26/08/2009 [ответить] [﹢﹢﹢] [ · · · ] + / –
    И в . дцатый раз спрошу —
    Есть блейд серваки, 256 штук, все МАC одинаковые, кроме последних байт — 00:01:02:03:04:xx

    Как объяснить DHCP серверу, что только этим МАКам
    разрешена PXE загрузка и адреса из сети 192.168.20.0/15!

    2.17, pavel_simple ( ok ), 12:14, 26/08/2009 [^] [^^] [^^^] [ответить] + / –
    >И в . дцатый раз спрошу —
    >Есть блейд серваки, 256 штук, все МАC одинаковые, кроме последних байт —
    >00:01:02:03:04:xx
    >
    >Как объяснить DHCP серверу, что только этим МАКам
    >разрешена PXE загрузка и адреса из сети 192.168.20.0/15!

    man 5 dhcp-eval
    в части

    substring (data-expr, offset, length)

    и в класс его , а там уже и параметры PXE/BOOTP выставить или вообще отдельный пул.

    готовое решение отсутствует.

    3.18, pavel_simple ( ok ), 12:15, 26/08/2009 [^] [^^] [^^^] [ответить] + / –
    >[оверквотинг удален]
    >
    >man 5 dhcp-eval
    >в части
    >
    > substring (data-expr, offset, length)
    >
    >и в класс его , а там уже и параметры PXE/BOOTP выставить
    >или вообще отдельный пул.
    >
    >готовое решение отсутствует.

    а ещё у бдейдов должен быть свой vendor-string

    3.19, pavlinux ( ok ), 14:16, 26/08/2009 [^] [^^] [^^^] [ответить] + / –
    >[оверквотинг удален]
    >>разрешена PXE загрузка и адреса из сети 192.168.20.0/15!
    >
    >интересно.
    >
    >man 5 dhcp-eval в части
    >
    > substring (data-expr, offset, length)
    >
    >и в класс его , а там уже и параметры PXE/BOOTP выставить
    >или вообще отдельный пул.

    class «allocation-class-1» <
    match pick-first-value(option dhcp-client-identifier, hardware);
    >
    subclass «allocation-class-1» 1:0:10:f3:0b:0c:22;
    subclass «allocation-class-1» 1:0:10:f3:0b:0c:24;
    subclass «allocation-class-1» 1:0:10:f3:0b:0c:36;
    subclass «allocation-class-1» 1:0:10:f3:0b:0c:39;
    subclass «allocation-class-1» 1:0:10:f3:0b:0c:9f;
    subclass «allocation-class-1» 1:0:10:f3:0b:0c:ba;
    . итд

    subnet 192.168.20.0 netmask 255.255.254.0 <

    pool <
    allow members of «allocation-class-1»;
    range dynamic-bootp 192.168.20.128 192.168.21.254;
    option routers 192.168.20.1;
    option broadcast-address 192.168.21.255;
    next-server 192.168.20.1;
    filename «pxelinux.0»;
    >

    У меня уже 8-ая партия по 8-10 блейд-корзин, и каждый раз переписывать sub-class_ы достало.

    class «allocation-class-1» <
    match pick-first-value(option dhcp-client-identifier, hardware);
    >

    class «allocation-class-1» <
    match if option dhcp-vendor-identifier = «nxcm»; # (Nexcom)

    # match if dhcp-vendor-identifier = «nxcm»;
    # match option dhcp-vendor-identifier = «nxcm»;
    # match dhcp-vendor-identifier = «nxcm»;
    >

    Кстати, как и где отловить dhcp-vendor-identifier, tcpdump поможет?

    А шаманские строки vendor-class-identifier и vendor-encapsulated-options
    вообще не ясно с какой планеты

    3.20, pavlinux ( ok ), 14:37, 26/08/2009 [^] [^^] [^^^] [ответить] + / –
    >[оверквотинг удален]
    >
    >man 5 dhcp-eval
    >в части
    >
    > substring (data-expr, offset, length)
    >
    >и в класс его , а там уже и параметры PXE/BOOTP выставить
    >или вообще отдельный пул.
    >
    >готовое решение отсутствует.

    Кстати про substring

    class «allocation-class-1» <
    match pick-first-value(option dhcp-client-identifier,
    substring (hardware, 0, 4));
    >

    Читайте также:  Panasonic kx mb283 драйвер windows 10
    Оцените статью