Согласно 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;
|