Показаны сообщения с ярлыком DHCP option 249 route linux ubuntu. Показать все сообщения
Показаны сообщения с ярлыком DHCP option 249 route linux ubuntu. Показать все сообщения

вторник, 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 Ссылки прямые, работоспособные на момент публикации статьи.