static routes pushed through DHCP

Запись создана 15 сентября, 2010

Моя домашняя сеть находится в 192.168.1.0/24, а голос вынесен в подсеть 192.168.0.0/24.
доступ «в мир» роутится через 192.168.1.1 а в голос через 192.168.1.111 (да вот захотелось мне так).
Домашние машины получают ip адреса из подсети 192.168.1.0/24, а айпифоны из подсети 192.168.0.0/24

соответственно по дефолту машины не могут получить доступа к фойсовым аппаратам (ATA и IP фоны), прописывать на каждой машине статик роуты, я считаю моветоном. К счастью, не я один так считаю и есть rfc3442 позволяющий с DHCP сервера передавать клиентам статичные маршруты.

итак настроим dhcp сервер давать статик роут на сеть 192.168.0.0/24 через 192.168.1.111
[cc lang=»ini»]
option ms-classless-static-routes code 249 = array of unsigned integer 8;
option rfc3442-classless-static-routes code 121 = array of unsigned integer 8;

option ms-classless-static-routes 24, 192,168,0, 192, 168, 1, 111;
option rfc3442-classless-static-routes 24, 192,168,0, 192, 168, 1, 111;
[/cc]

Так как Microsoft компания новатор, срать ей хотелось на RFC. По этому в приведенном выше конфиге присутствуют ms-classless строки. Если у вас в сети нет windows машин, то можно их не уазывать.

На сервере делаем service dhcpd restart, а на клиенте /etc/init.d/networking restart и на клиенте получим:
[cc lang=»bash»]
shakirov@work:~$ route -n
Destination Gateway Genmask Flags Metric Ref Use Iface
192.168.1.0 0.0.0.0 255.255.255.0 U 1 0 0 eth0
192.168.0.0 192.168.1.111 255.255.255.0 UG 0 0 0 eth0
169.254.0.0 0.0.0.0 255.255.0.0 U 1000 0 0 eth0
0.0.0.0 192.168.1.1 0.0.0.0 UG 100 0 0 eth0
[/cc]

справедливо это для Ubuntu на клиенте, говорят что в других дистрибутивах нужно в /etc/dhcp3/dhclient.conf добавить:
[cc lang=»bash»]option rfc3442-classless-static-routes code 121 = array of unsigned integer 8;[/cc]

И в том же файле в поле request добавить параметр rfc3442-classless-static-routes; выглядеть в итоге должно так:
[cc lang=»ini»]
option rfc3442-classless-static-routes code 121 = array of unsigned integer 8;

send host-name ««;
request subnet-mask, broadcast-address, time-offset, routers,
domain-name, domain-name-servers, domain-search, host-name,
netbios-name-servers, netbios-scope, interface-mtu,
rfc3442-classless-static-routes, ntp-servers;
[/cc]

И еще, если нет, то надо создать файл /etc/dhcp3/dhclient-exit-hooks.d/rfc3442-classless-routes
[cc lang=»bash»]
RUN=»yes»

if [ «$RUN» = «yes» ]; then
if [ «$new_rfc3442_classless_static_routes» != «» ]; then
if [ «$reason» = «BOUND» ] || [ «$reason» = «REBOOT» ]; 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 [ "$net_length" == "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 [/cc] Ну и конечно сделать его исполняемым. кстати, если нужно передать несколько статичных маршрутов клиентам, то перечислять их надо через запятую, примерно вот так: [cc lang="ini"] option ms-classless-static-routes 24, 192,168,0, 192,168,1,111, 16, 172,16, 10,16,40,100; option rfc3442-classless-static-routes 24, 192,168,0, 192,168,1,111, 16, 172,16, 10,16,40,100; [/cc] И на последок, если используете OpenWRT и сервер dnsmasq, то вам приголится мануал http://www.debian-administration.org/articles/471

» Запись из раздела networking, Несортированное | 5 комментариев

Комментарии



5 комментариев to “static routes pushed through DHCP”

  1. X-FuckT0R on 24 декабря, 2010 10:04

    Хм… Почему у Вас все заголовки тем исключительно на английском языке? :)

  2. anonimous on 17 марта, 2011 21:24

    Спасибо! Очень внятно, вопросо не возникло :)

  3. Артур Шакиров on 17 марта, 2011 21:28

    наверное по тому что «гуглю» в основном на английском. вобщем что «искалось» и на английском и на русском.

  4. r00t on 7 апреля, 2012 20:25

    А прописать нужный маршрут на VoIP в машрутизаторе 192.168.1.1 — религия не позволила ?
    Или линуксоиды не ищут лёгких путей?

  5. Артур Шакиров on 8 апреля, 2012 7:14

    да, религия не позволяет мне добавлять еще один «хоп» когда можно отдать клиенту нужный маршрут.




Ответить