вторник, 14 апреля 2009 г.

Автоматическое получение маршрутизации от DHCP сервера option 249

Речь пойдёт об опции 249 dhcp server, так-как мой провайдер оринетируясь на Windows пользователей, применил это не самое правильное решение для раздачи маршрутов в городской локальной Сети.

Подробности можно посмотреть тут: RFC-3442

ВНИМАНИЕ!!! Операционные системы Windows 95/98 и Windows 2000 не поддерживают данную опцию. Для этих операционных систем необходимо добавлять статические маршруты вручную.

Для клиентов, использующих операционные системы Linux и BSD эта возможность доступна после установки и небольшой модификации конфигурационных файлов DHCP клиентов dhcp-client или dhcp3-client.

Установите DHCP клиент dhcp3-client или dhcp-client.
Создайте в каталоге /etc/dhcp3/dhclient-exit-hooks.d (/etc/dhcp/dhclient-exit-hooks.d для клиента dhcp-client)
файл rfc3442-classless-static-routes следующего содержания:


 if [ x"$new_rfc3442_classless_static_routes" != x"" ]; then
case $reason in BOUND|RENEW|REBIND|REBOOT)
rfc_routes=($new_rfc3442_classless_static_routes)
for(( i=0; i < ${#rfc_routes[@]}; )); do
net_length=${rfc_routes[$i]}
((i++))

net_address=(0 0 0 0)
for(( j=0; j < $[$net_length / 8 + \
($net_length % 8 ? 1 : 0)]; j++, i++)); do
net_address[$j]=${rfc_routes[$i]}
done

gateway=(0 0 0 0)
for (( j=0; j < 4; j++, i++ )); do
gateway[$j]=${rfc_routes[$i]}
done

old_IFS="$IFS"
IFS='.'

if [ x"$net_length" == x"32" ]; then
/sbin/route add -host "${net_address[*]}" gw "${gateway[*]}"
else
/sbin/route add -net "${net_address[*]}/$net_length" gw "${gateway[*]}"
fi
IFS="$old_IFS"
done
esac
fi


В конфигурационный файл /etc/dhcp3/dhclient.conf (/etc/dhcp/dhclient.conf для клиента dhcp-client)
внесите изменения:



option rfc3442-classless-static-routes code 249 = array of unsigned integer 8;#Добавляем описание новой опции dhcp сервера
#
request subnet-mask, broadcast-address, time-offset, routers,
domain-name, domain-name-servers, host-name,
netbios-name-servers, netbios-scope, interface-mtu,
rfc3442-classless-static-routes;#Добавляем запрос статических бесклассовых маршрутов
- Обратите внимания, что запрашиваемые данные могут отличаться от Ваших. Главное добавить:


option rfc3442-classless-static-routes code 249 = array of unsigned integer 8;
rfc3442-classless-static-routes;
-- Это основное.

Перезапустите сервис networking. Для ubuntu мне хватило
sudo dhclient eth0

Убедитесь, что маршруты появились:

route


Всё. За единственной проблемой, лично мне осталось придумать как динамически модифицировать таблицу NAT в iptables в зависимости от маршрутов которые я получил. Я думаю, что это не вызывет больших трудностей, хотя как знать. В общем буду модифицировать под себя: файл /etc/dhcp/dhclient-exit-hooks.d/rfc3442-classless-static-routes --- Планирую выложить сюда и мой модифицированный скрипт.

Моя статья представляет из себя смесь следующих статей, с небольшими моими добавлениями: http://archlinux.org.ru/forum/viewtopic.php?f=8&t=723 http://forum.dobroe.ru/index.php?showtopic=34115 Ссылки прямые, работоспособные на момент публикации статьи.

1 комментарий:

Unknown комментирует...

Скажите пожалуйста почему ваш заголовк называется " Автоматическое получение маршрутизации от DHCP сервера option 249" когда как 249 опция называется Microsoft Classless Static Route Option, противоречие получается...