Подробности можно посмотреть тут: 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 комментарий:
Скажите пожалуйста почему ваш заголовк называется " Автоматическое получение маршрутизации от DHCP сервера option 249" когда как 249 опция называется Microsoft Classless Static Route Option, противоречие получается...
Отправить комментарий