Статьи Галерея Форум Чат Файлы HowTo Ссылки Поиск

FAQ DHCP routes

Материал из Linux.by Wiki Pages.
Перейти к: навигация, поиск

Настройка статических маршрутов через DHCP в Windows и Linux

Часто хочется раздавать статические маршруты через DHCP. Что ж, протокол позволяет, некоторые клиенты умеют или их можно научить. Делаем. Для начала читаем RFC3442.

Пусть у нас есть сервер dhcp3 от ISC.

Добавляем в его конфигурационный файл опции

# MS routes: adds extras to supplement routers option
option ms-classless-static-routes code 249 = array of unsigned integer 8;
# RFC3442 routes: overrides routers option
option rfc3442-classless-static-routes code 121 = array of unsigned integer 8;
...
option ms-classless-static-routes 16, 172,16, 10,16,40,100;
option rfc3442-classless-static-routes 16, 172,16, 10,16,40,100;

Первая --- для M$ Windows (поддерживается Windows XP/2003 и выше), вторая --- в соответствии со стандартом. По своей сути опции одинаковы.

Приведённый пример соответствует маршруту на 172.16.0.0/16 через 10.16.40.100. Формат простой: <длина сетевой части адреса, бит>, <байт сетевого адреса>,[ ...], <4 байта адреса маршрутизатора>

В одной опции могут задаваться несколько маршрутов. Например, для такой таблицы маршрутов (для работы с "Айчыной")

217.21.51.32    10.16.40.100    255.255.255.255 UGH   0      0        0 eth0
217.21.51.1     10.16.40.100    255.255.255.255 UGH   0      0        0 eth0
217.21.51.64    10.16.40.100    255.255.255.224 UG    0      0        0 eth0
213.184.232.32  10.16.40.100    255.255.255.224 UG    0      0        0 eth0
172.16.0.0      10.16.40.100    255.255.0.0     UG    0      0        0 eth0

опции будут выглядеть как

option ms-classless-static-routes 16, 172,16, 10,16,40,100, 32, 217,21,51,1, 10,16,40,100, 32, 217,21,51,32, 10,16,40,100, 27, 217,21,51,64, 10,16,40,100, 27, 213,184,232,32, 10,16,40,100;
option rfc3442-classless-static-routes 16, 172,16, 10,16,40,100, 32, 217,21,51,1, 10,16,40,100, 32, 217,21,51,32, 10,16,40,100, 27, 217,21,51,64, 10,16,40,100, 27, 213,184,232,32, 10,16,40,100;


С сервером разобрались. Теперь клиенты.

Для Windows XP/2003 ничего делать не надо.

Чтобы научить dhcp3-client (большинство дистрибутивов GNU/Linux) понимать эти настройки, в конфигурационный файл /etc/dhcp3/dhclient.conf пропишем следующее:

$ cat /etc/dhcp3/dhclient.conf
option rfc3442-classless-static-routes code 121 = array of unsigned integer 8;
#
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;

И напишем скрипт для установки маршрутов при конфигурировании сети. В Debian для этого достаточно положить в /etc/dhcp3/dhclient-exit-hooks.d файл следующего содержания:

$ cat rfc3442-classless-routes 
RUN="yes"


if [ "$RUN" = "yes" ]; then

        if [ x"$new_rfc3442_classless_static_routes" != x"" ]; then

                if [ x"$reason" == x"BOUND" ]; then
                        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

                fi
        fi
fi

Примечание: отсутствует обработка маршрута по умолчанию (последовательность 0, 10, 16, 40, 100 для маршрутизатора 10.16.40.100). Хотя если route позволяет задать его как route add -net 0.0.0.0/0 gw 10.16.40.100, то будет работать.

Личные инструменты

Powered by MediaWiki
GNU Free Documentation License 1.2

Rambler's Top100
Новости | Статьи | Галерея | Форум | Чат | Файлы | HowTo | Ссылки | Поиск | О нас | Главная
Материалы портала распространяются под GNU GPL. При использовании любых материалов портала ссылка на Linux.by обязательна.
[ Техподдержка ] [ Hosted by DataHata | MyCloud.by ] [ Powered by phpBB® Forum Software © phpBB Group ]