The OpenNET Project / Index page

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

Статические маршруты через 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 (ok), 06:57, 19/06/2006 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Патч для фришного dhclient'а:
    http://butcher.heavennet.ru/patches/other/dhclient/
     
  • 1.5, butcher (ok), 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, $gw)
    {

      $gw = str_replace ( '.' , ',' , $gw );
      $route_string = '';

      foreach ($networks as $net)
      {
        $pos =  strpos ( $net['net'] , '.0' );
    //    echo $net['net']."\t-\t".($pos);
        $net_c = substr ( $net['net'] , 0 , $pos);
    //    echo "\t".$net_c."/".$net['mask']."\n";
        $net_c =  str_replace ( '.' , ',' , $net_c );
        $route_string .= $net['mask'].','.$net_c.','.$gw.',';

      }

      $route_string =  rtrim ( $route_string  , " ," );

    //  echo $route_string;
    //  exit;

      return $route_string;
    }

    // сети
    $networks = array(
    array ('net' => '10.1.0.0','mask' => '16'),
    array ('net' => '10.2.0.0','mask' => '16'),
    array ('net' => '10.3.0.0','mask' => '16'),
    array ('net' => '10.4.0.0','mask' => '16'),
    );
    // гейт
    $gw = '10.1.1.1';

    echo  gen_routes($networks,$gw);

    // конец кода

    Работает с указанием dhcpd.conf
    option ms-classless-static-routes code 249 = array of unsigned integer 8;

    и в обьявлении subnet
    option ms-classless-static-routes 16, 172,16, 10,16,40,100;

    Спасибо автору http://www.linux.by/wiki/index.php/FAQ_DHCP_routes

    З.Ы. маршрут по умолчанию не проверял

     
  • 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 (ok), 00:25, 21/11/2012 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    У меня скрипт не заработал пока не заменил:
    ($net, $mask) = split('/', $destination);
    на
    ($net, $mask) = split(/\//, $destination);
     

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




    Партнёры:
    PostgresPro
    Inferno Solutions
    Hosting by Hoster.ru
    Хостинг:

    Закладки на сайте
    Проследить за страницей
    Created 1996-2024 by Maxim Chirkov
    Добавить, Поддержать, Вебмастеру