The OpenNET Project / Index page

[ новости/++ | форум | wiki | теги ]

Статические маршруты через isc-dhcpd
Согласно RFC 3442 через dhcp можно отдавать таблицу маршрутизации.
Изначально эта опция не поддерживается isc-dhcpd, но опцию можно добавить.

Пример:
  option classless-route code 121 = string;
  option classless-route 18:c0:a8:ea:c0:a8:00:05;

пример получения кода, взято с 
http://rfc3442svc.sourceforge.net/isc-dhcpd-configuration.html

#!/usr/bin/perl

use strict;

# Usage:
#   make_classless_option({ "subnet/mask" => "router", "subnet/mask" => "router", ... });
#     subnet   the subnet address, 4 dot-separated numbers
#     mask     the subnet mask length (e.g. /24 corresponds to 255.255.255.0,
/8 corresponds to 255.0.0.0)
#     router   the router address, 4 dot-separated numbers
sub make_classless_option
{
    my $routes = shift;
    my ($s1, $s2, $s3, $s4, $len, @bytes, $net, $mask, $destination, $router);

    $len = 2;
    @bytes = ();
    foreach $destination(keys %{$routes}) {
        ($net, $mask) = split('/', $destination);
        $router = $routes->{$destination};
        ($s1, $s2, $s3, $s4) = split(/\./, $net);
        push(@bytes, sprintf('%02x', $mask));
        push(@bytes, sprintf('%02x', $s1));
        push(@bytes, sprintf('%02x', $s2)) if($mask > 8);
        push(@bytes, sprintf('%02x', $s3)) if($mask > 16);
        push(@bytes, sprintf('%02x', $s4)) if($mask > 24);
        ($s1, $s2, $s3, $s4) = split(/\./, $router);
        push(@bytes, sprintf('%02x', $s1));
        push(@bytes, sprintf('%02x', $s2));
        push(@bytes, sprintf('%02x', $s3));
        push(@bytes, sprintf('%02x', $s4));
    }

    return join(':', @bytes);
}

# Sample usage

print make_classless_option({
        "172.16.0.0/12" => "10.0.0.1",
        "10.0.0.0/8" => "10.0.0.1",
        "0.0.0.0/0" => "192.168.0.1",
        "192.168.234.0/24" => "192.168.0.5"
        });

На данный момент данную опцию поддерживает малое количество клиентов, например windows XP, 
только по непонятным причинам использует код 249, т.е. в конфигурации сервера
надо будет использовать

   option classless-route code 249 = string;
 
17.04.2004 , Автор: Артем Бохан
Ключи: dhcp, route / Лицензия: CC-BY
Раздел:    Корень / Администратору / Сетевая подсистема, маршрутизация / Туннелинг, VPN, VLAN

Обсуждение [ Линейный режим | Показать все | RSS ]
 
  • 1.1, aZ, 14:39, 28/07/2005 [ответить] [смотреть все]
  • +/
    Хочу ещё подсказать, что первую строчку типа option classless-route code 249 = string; надо вписывать в начале dhcpd.conf, а вторую в самом subnet. Пример:

    option classless-route code 249 = string;

    subnet ... {
    option sql-identification-token 17:23:19:a6:42:ea:99:7c:22;
    ...
    }

    :)

     
  • 1.2, anonym, 20:40, 14/11/2005 [ответить] [смотреть все]
  • +/
    http://thep.blogspot.com/2005_09_01_thep_archive.html
     
  • 1.3, Aleon, 05:56, 03/02/2006 [ответить] [смотреть все]
  • +/
    То же самое, но более кратко...

    #!/usr/local/bin/perl -w

    use strict;
    while (<>) {
    /(\d+)\.(\d+)\.(\d+)\.(\d+)\/(\d+)\s(\d+)\.(\d+)\.(\d+)\.(\d+)/ or next;
    printf("%02x:%02x:"."%02x:"x($5/8.125), $5, $1,$2,$3,$4 );     # Don't ask me how it works;-)
    printf("%02x:%02x:%02x:%02x".(!eof && ":"), $6,$7,$8,$9 );
    }
    print "\n";


    Скрипту в качестве параметра скармливается файл вида:
    #subnet         gateway
    10.0.0.0/8      192.168.0.1
    172.16.0.0/12   192.168.0.1
    192.168.0.0/16  192.168.0.1

     
  • 1.4, butcher, 06:57, 19/06/2006 [ответить] [смотреть все]
  • +/
    Патч для фришного dhclient'а:
    http://butcher.heavennet.ru/patches/other/dhclient/
     
  • 1.5, butcher, 21:05, 20/08/2006 [ответить] [смотреть все]
  • +/
    Кстати, этот скрипт неверно работает для маршрута по-умолчанию.
    Для него он должен выдавать минимально возможный по размеру ответ - 5 байт: 00:c0:a8:00:01.
     
  • 1.6, Jek, 02:52, 01/11/2006 [ответить] [смотреть все]  
  • +/
    http://linux.by/wiki/index.php/FAQ_DHCP_routes

    Только с маршрутом по умолчанию не разбирался.

     
  • 1.7, izglioib, 16:02, 31/07/2008 [ответить] [смотреть все]  
  • +/
    Нигде не нашол варианта для PHP, написал свой function gen_routes networks, g... весь текст скрыт [показать]
     
  • 1.8, CYBORG, 19:07, 01/10/2009 [ответить] [смотреть все]  
  • +/
    Господа. Появилась проблема с радачай более 32 маршрутов через isc-dhcp 249 опцией.

    Как только их количество превышает 32 - клиент не получает ни одного! Даже правильнее сказать сервер ему не отдает ни одного!

    Скажите че можно сделать что работало

     
     
  • 2.9, Mirawinger, 16:25, 26/05/2010 [^] [ответить] [смотреть все]  
  • +/
    >Господа. Появилась проблема с радачай более 32 маршрутов через isc-dhcp 249 опцией.
    >
    >
    >Как только их количество превышает 32 - клиент не получает ни одного!
    >Даже правильнее сказать сервер ему не отдает ни одного!
    >
    >Скажите че можно сделать что работало

    скорее всего вам ненужно отдавать такое количество маршрутов
    попробуйте использовать безклассовую адресацию

    например такая запись 192.168.0.0/16  192.168.0.1
    заменит 255 записей вида 192.168.xxx.0/24  192.168.0.1

     
     
  • 3.10, Fduch, 10:15, 23/08/2010 [^] [ответить] [смотреть все]  
  • +/
    >[оверквотинг удален]
    >>Как только их количество превышает 32 - клиент не получает ни одного!
    >>Даже правильнее сказать сервер ему не отдает ни одного!
    >>
    >>Скажите че можно сделать что работало
    >
    >скорее всего вам ненужно отдавать такое количество маршрутов
    >попробуйте использовать безклассовую адресацию
    >
    >например такая запись 192.168.0.0/16  192.168.0.1
    >заменит 255 записей вида 192.168.xxx.0/24  192.168.0.1

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

     
  • 1.11, vlavish, 00:25, 21/11/2012 [ответить] [смотреть все]  
  • +/
    У меня скрипт не заработал пока не заменил:
    ($net, $mask) = split('/', $destination);
    на
    ($net, $mask) = split(/\//, $destination);
     

    Ваш комментарий
    Имя:         
    E-Mail:      
    Заголовок:
    Текст:



      Закладки на сайте
      Проследить за страницей
    Created 1996-2017 by Maxim Chirkov  
    ДобавитьРекламаВебмастеруГИД  
    Hosting by Ihor