Страница 1 из 1

dhclient и 2 локалки.

Добавлено: 2010-02-10 16:07:27
hedgehog
здравствуйте. возникла проблема в плане "подружить дхсп клиент с двумя провайдерами". я подключен к двум локалкам:
isp1 через интерфейс vr0 (статика)
isp2 через интерфейс nfe0 (dhcp)

OS - FreeBSD 8.0

проблема заключается в том, что ACL у dhcp isp2 базируется на времени получения адреса, т.е. статически вбить настройки для него я не могу. маршруты, приходящие по дхсп, также не устраивают, т.к. конфликтуют с маршрутами isp1. dhclient-script модифицировать вроде как не по-джедайски, через supersede routers в dhclient.conf удалось добавить только дефолт. в rc.conf присутствует строка:

Код: Выделить всё

ifconfig_nfe0="DHCP"
после чего маршруты добавляются статикой. но они добавляются в то время, когда интерфейс еще не получил адрес, в результате - network unreachable. присвоить интерфейсу адрес и маршруты до запуска дхсп клиента же ни к чему не приводит: при запуске dhclient отваливаются все маршруты на указанном интерфейсе (в данном случае - nfe0). сам роутинг в моем понимании выглядит так:

10.0.0.0/16 ходит через isp1
10.0.0.0/8 - через isp2, т.к. адреса здесь используют второй октет (10.x.x.x), кроме впн серверов, находящихся в подсети:
10.0.0.0/27 - впн-серверы провайдера isp2

если после получения адреса я все это дело впишу ручками, все работает и ходит кудой надо, дхсп клиент висит в процессах и периодически пинает сервер, не трогая маршрутов:

Код: Выделить всё

Routing tables

Internet:
Destination        Gateway            Flags    Refs      Use  Netif Expire
10.0.0.0/27        isp2-gateway       UGS         2   283397   nfe0 =>
10.0.0.0/16        isp1-gateway       UGS         0        0    vr0 =>
10.0.0.0/8         isp2-gateway        UGS         1     2644   nfe0
собственно, идея в том, чтобы все это дело прописывалось автоматом при запуске dhclient

Re: dhclient и 2 локалки.

Добавлено: 2010-02-10 17:21:22
hedgehog
мде, убил кучу времени на поиск решения, отписался на форум, а потом нашел инфо про скрипт dhclient-enter-hooks , упоминания которого в мануалах dhclient и dhclient.conf нет вообще...

сделал так, чуть-чуть откусив код от dhclient-script:

Код: Выделить всё

$ cat /etc/dhclient-enter-hooks
#!/bin/sh
add_new_routes() {
        for router in $new_routers; do
                if [ "$interface" = "nfe0" ]; then

                        if [ "$new_ip_address" = "$router" ]; then
                                route add default -iface $router >/dev/null 2>&1
                        else
                                route add -net 10.0.0.0/8 $router >/dev/null 2>&1
                                route add -net 10.0.0.0/27 $router >/dev/null 2>&1
                        fi
                fi
                # 2nd and subsequent default routers error out, so explicitly
                # stop processing the list after the first one.
                break
        done
}
в итоге при запуске dhclient я получаю нужные мне маршруты, если используется на интерфейсе nfe0, и могу пользоваться обеими локалками. плюс ко всему не появляется приезжающий от провайдера дефолтный маршрут, который мне только мешал бы. правда, выглядит все это как грабля :)