Какой рейтинг вас больше интересует?
|
Раздача маршрутов по DHCP2012-03-27 17:49:37 (читать в оригинале)Решил оживить ЖЖ техническими постами) У нас в организации используется PPTP VPN для доступа в интернет, после подключения к которому более тысячи машин получают дефолтный маршрут от впн сервера. Так вот чтобы пользователи могли нормально работать и с локальными ресурсами необходимо вручную прописывать маршруты, причем маршруты зависят от подсети т.к. шлюз везде свой. Решить проблему можно следующими способами:
Мы всегда пользовались 1 способом, но из-за того, что инфраструктура просто огромная гибкость этого метода оставляет желать лучшего. http://www.ietf.org/proceedings/52/I-D/draft-ietf-dhc-csr-06.txt К сожалению таким образом не удалось наладить раздачу маршрутов до двух /24 (одной /23) и одной /8 сетей...клиенты отказались принимать такие параметры от DHCP сервера. Позже было вычитанно что параметр 249 можно передать в виде hex. Пример: route 172.172.0.0/21 168.168.168.168 пишем hex: N байта: 1 2 3 4 5 6 7 8 hex: 15 AC AC 00 A8 A8 A8 A8 описание: байт 1 - hex маски (21dec -> 15 hex) байты с 2 по 4 - наша сеть байты с 5 по 8 - шлюз Обращаю внимание, что в RFC четко прописаноб сколько октетов сети нужно брать в зависимости от битовой маски! в итоге в конфиге будет выглядеть так ! ip dhcp pool POOL .... option 249 hex 15ACAC00A8A8A8A8 .... ! Что отлично заработало. Ну и немного позже был найден удобный скриптик для расчетов: #!/usr/bin/perl -w use strict; sub option_121 { my $gw = shift; my $out_str = ''; my ($subnet, $mask, $b0, $b1, $b2, $b3); foreach my $cidr (@_) { ($subnet, $mask) = split('/', $cidr); ($b0, $b1, $b2, $b3) = split(/\./, $subnet); $out_str .= sprintf('%02x', $mask); $out_str .= sprintf('%02x', $b0); $out_str .= sprintf('%02x', $b1) if($mask > 8); $out_str .= sprintf('%02x', $b2) if($mask > 16); $out_str .= sprintf('%02x', $b3) if($mask > 24); $out_str .= sprintf('%02x%02x%02x%02x', split(/\./, $gw)); } return $out_str; } if(@ARGV < 2) { print "Usage: $0 gw_ip subnet1/mask1 subnet2/mask2 ... subnetN/maskN\n"; } elsif($ARGV[0] =~ /^\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}$/) { print "DHCP option 121 (249) hex string: ".option_121(@ARGV)."\n"; } else { print "Invalid gateway IP address: '$ARGV[0]'\n"; }
|
Категория «Поэты»
Взлеты Топ 5
Падения Топ 5
Популярные за сутки
|
Загрузка...
взяты из открытых общедоступных источников и являются собственностью их авторов.