(Протокол динамической конфигурации ...
... маршруты по
.< ... параметры от
сервера.< ... print "
option 121 (249 ...
Решил оживить ЖЖ техническими постами)
У нас в организации используется PPTP VPN для доступа в интернет, после подключения к которому более тысячи машин получают дефолтный маршрут от впн сервера. Так вот чтобы пользователи могли нормально работать и с локальными ресурсами необходимо вручную прописывать маршруты, причем маршруты зависят от подсети т.к. шлюз везде свой.
Решить проблему можно следующими способами:
- на этапах установки и настройки прописывать маршруты вручную.
- написать логон скрипт и запустить его на доменных машинах.
- раздать маршруты по DHCP.
Мы всегда пользовались 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";
}
Included:Halil Altintop, Hazard, Dzagoev, Boateng, CavaniDownload:
mēbeles dzīvojamā istabā ,mēbeles dzīves,mēbeles dzīvojamā istabā ,mēbeles dzīvojamā istabā,moduļu m ...
mēbeles dzīvojamā istabā ,mēbeles dzīves,mēbeles dzīvojamā istabā ,mēbeles dzīvojamā istabā,moduļu mēbeles dzīvojamām telpām ,moduļu mēbeles dzīvojamā istabā ,Par dzīvojamās istabas mēbeles ,fotogalerija,dzīvo mēbeles ,mēbeles dzīvojamā istabā ,Mēbeles viesistabai kabinets, mēbeles dzīvojamām telpām ,mēbeles dzīvojamā istabā ,par dzīvojamā istabas mēbeles katalogā,Stūra … Continue reading
→
...
Интернет наполнен огромным количеством документации для веб-разработчиков. Но, к сожалению, использование большей части документации довольно неудобное. Для примера, возьмем Mozilla Developer Network (MDN). Сайт Mozilla Developer Network предлагает большой объем документации по CSS, JavaScript, HTML, SVG и т.д., но навигация по нему утомительна — нет никакого глобального меню и поиск не столь удобный.
Это привело разработчика Рафаэль Гарсия создать instaCSS — быстрый способ просматривать документацию CSS от MDN. Благодаря хорошей функции поиска и чистому, простому дизайну с хорошим глобальным меню instaCSS стал хитом по мнению читателей Hacker News. В связи с большим спросом, Гарсия перевел проект на более широкий домен DocHub.io и расширил поиск по CSS, HTML, JavaScript и DOM.
Читать дальше →