Проблемы с назначение default gateway



  • Добрый день.

    Столкнулся с некоторыми проблемами - прошу совета знатоков.

    Суть: есть машина с pfsense 2.0-RELEASE (i386) built on Tue Sep 13 17:28:43 EDT 2011 .
    К ней подключено :
                               WAN (PPPoE)
                               WAN2 (PPPoE)
                               LAN.

    Система сама обязательно первый WAN ставит как default gateway (DG). Я могу сделать DG WAN2, но так, что-бы ни один из WAN'ов не был DG система сделать не даёт.

    Сделана следующая настройка: разрешено переключение DG.

    Теперь о проблеме.
    Если pfSense запустился и к нему не был подключен ни один канал WAN, то в Routes строчки default (DG) естественно нет. Пока нормально.

    Если теперь подключить тот WAN канал, который указан как DG, то всё гуд - в Routes появляется соответствующая строчка. Тоже нормально.

    НО! Если после запуска с двумя отрубленными каналами, сначала подкинуть "не тот" канал (WAN2 - тот который не указан как DG), то система ругается следующим образом:

    php: : The command '/sbin/route change -inet default dynamic' returned exit code '68', the output was 'route: bad address: dynamic'

    Что это? Я где-то туплю, или так действительно быть не должно?

    ЗЫ Зачем оно мне надо? Устанавливаем pfsense в конторе, где на ночь вырубают свет. Специально завели два канала - для надежности. Так что-бы если один из них не поднялся, то всё равно всё работало. Но пока как-то не очень выходит.

    ЗЫ2 Отмечу, что если машина запустилась и поднялся канал, указанный как DG, дальнейшие выдергивания-вставляния интерфейсов к такой ошибке не приводят. **ТОЕСТЬ описанное мной происходит ТОЛЬКО до первого удачного прописывания DG в роуты.  **







  • На первой картинке вкладка Groups - там и делай Failover из двух каналов. И назначай его в firewall rules.



  • Естественно, что такая настройка сделана, и тем, кому разрешено ходить через нат, настроен соответствующий гейтвей в рулях.

    Но есть и те, кто должен ходить через Squid. Squid с MultiWAN настроен по мануалу http://forum.pfsense.org/index.php/topic,34810.0.html
    Как и написанов в том мануале, Squid всегда шлёт пакеты через default gateway. И на нём их можно отловить и перенаправить куда надо. А через что он их шлёт, когда DG вообще не прописан в routes? Вот и вся загвоздка…

    Я могу ошибаться, но мне думается, что описанная мною ошибка НЕ ДОЛЖНА появлятся и это есть глюк :) Который не хило было-бы поправить...






  • В Gateways присутствует Wan(default) - через него и шлет.



  • @dvserg:

    В Gateways присутствует Wan(default) - через него и шлет.

    Давайте ещё раз: если в роутах прописывается DG (например как вы и указали, по приложенным мною скринам - это должен быть WAN), то таки да - шлёт через него.
    Я же говорю о той ситуации, когда DG вообще не прописывается в роутах. Например по причине того, что канал лежал на момент включения pfsense. В таком случае squid у меня пакеты через wan не шлёт.

    А затем происходит следующее:

    @Vadimi4:

    НО! Если после запуска с двумя отрубленными каналами, сначала подкинуть "не тот" канал (WAN2 - тот который не указан как DG), то система ругается следующим образом:

    php: : The command '/sbin/route change -inet default dynamic' returned exit code '68', the output was 'route: bad address: dynamic'

    То-есть в скрипте назначения DG есть какой-то косяк, который проявляется в описанных мною условиях.



  • Есть такая мысль: когда поднимается WAN2 система понимает, что надо-бы назначить его default gateway, но судя по этой строке :

    php: : The command '/sbin/route change -inet default dynamic' returned exit code '68', the output was 'route: bad address: dynamic'

    в качестве ip почему-то берется не gateway для WAN2, а gateway для WAN, которого пока ещё нет (dynamic). И соответственно вылетает с ошибкой и DG не назначается.

    Отсюда вопрос - где посмотреть этот самый скрипт назначения DG? Может его можно будет ручками поковырять…



  • Ручками нет.
    Скрипты в /etc/ppp перезаписываются
    Что у Вас при описанной выше ситуации в ppp.linkip, ppp.conf ?

    Мне кажется попытка добавить дефолтный роутинг терпит крах та как неизвестен IP адрес дефолтного интерфейса. Он у Вас динамический.

    Кстати вот под тему пост по настройке squid multiwan http://forum.pfsense.org/index.php/topic,37083.0.html



  • Значится так: после поднятия WAN2 в /tmp появляются 4-е файла:

    pppoe0_ip

    назначенный мне ip

    pppoe0_router

    195.5.5.186

    pppoe0up

    пустой файл

    pppoe4_defaultgw

    пустой файл

    Естессно, что DG не назначается в routes - выдает ошибку:

    php: : The command '/sbin/route change -inet default dynamic' returned exit code '68', the output was 'route: bad address: dynamic'

    Пытаюсь раскопать, кто создает эти файлы - нашел /usr/local/spin/ppp-linkup :

    ppp-linkup

    #!/bin/sh

    let the configuration system know that the ip has changed.

    /bin/echo $4 > /tmp/$1_router
    /bin/echo $3 > /tmp/$1_ip
    /usr/bin/touch /tmp/$1up

    ALLOWOVERRIDE=/usr/bin/grep dnsallowoverride /conf/config.xml | /usr/bin/wc -l
    if [ $ALLOWOVERRIDE -gt 0 ]; then

    write nameservers to file

    if [ $6 = "dns1" ]; then
    echo $7 > /var/etc/nameserver_$1
    /sbin/route delete $7
    /sbin/route add $7 $4
    fi

    if [ $8 = "dns2" ]; then
    echo $9 >> /var/etc/nameserver_$1
    /sbin/route delete $9
    /sbin/route add $9 $4
    fi
    /usr/local/sbin/pfSctl -c 'service reload dns'
    /bin/sleep 1
    fi

    /usr/local/sbin/pfSctl -c "interface newip $1"
    exit 0

    Как видим, пишутся 3-и файлика. Но я так и не могу понять, кто пишет четвертый файл pppoe4_defaultgw ?
    Ковыряю дальше.

    2 dvserg

    В ppp.conf вообще не нашел ничего интересного:

    #################################################################

    PPP  Sample Configuration File

    Originally written by Toshiharu OHNO

    Simplified 5/14/1999 by wself@cdrom.com

    See /usr/share/examples/ppp/ for some examples

    $FreeBSD: src/etc/ppp/ppp.conf,v 1.11.2.2.2.1 2010/06/14 02:09:06 kensmith Exp $

    #################################################################

    default:
    set log Phase Chat LCP IPCP CCP tun command
    ident user-ppp VERSION

    Ensure that "device" references the correct serial port

    for your modem. (cuau0 = COM1, cuau1 = COM2)

    set device /dev/cuau1

    set speed 115200
    set dial "ABORT BUSY ABORT NO\sCARRIER TIMEOUT 5
              "" AT OK-AT-OK ATE1Q0 OK \dATDT\T TIMEOUT 40 CONNECT"
    set timeout 180 # 3 minute idle timer (the default)
    enable dns # request DNS info (for resolv.conf)

    papchap:

    edit the next three lines and replace the items in caps with

    the values which have been assigned by your ISP.

    set phone PHONE_NUM
    set authname USERNAME
    set authkey PASSWORD

    set ifaddr 10.0.0.1/0 10.0.0.2/0 255.255.255.0 0.0.0.0
    add default HISADDR # Add a (sticky) default route

    Какие будут мысли?

    Действительно получается, что несмотря на разрешение менять default gateway, скрипт упорно прописывает в качестве DG gateway для неподнятого интерфейса wan, который у меня динамический и соответственно не существует в этот момент. И на радостях вылетает с ошибкой.

    Хотя в это время уже существует нормальный gateway для интерфейса wan2, который можно было бы с успехом использовать в качестве DG.

    Как можно сообщить разработчикам об этой "особенности" ? :)



  • Вот тут интересное
    http://forum.lissyara.su/viewtopic.php?f=4&t=16851&start=0
    Может перед добавлением маршрута стоит устроить какую-нить проверку.



  • Кому интересно, решил данный вопрос следующим костылём - в скрипте ppp-linkup (срабатывает при поднятии PPP канала)  добавил кусок, проверяющий есть ли в данный момент default gateway, и если его нет, то назначает его равным гейтвею поднятого PPP.

    #!/bin/sh

    let the configuration system know that the ip has changed.

    /bin/echo $4 > /tmp/$1_router
    /bin/echo $3 > /tmp/$1_ip
    /usr/bin/touch /tmp/$1up

    ALLOWOVERRIDE=/usr/bin/grep dnsallowoverride /conf/config.xml | /usr/bin/wc -l
    if [ $ALLOWOVERRIDE -gt 0 ]; then

    write nameservers to file

    if [ $6 = "dns1" ]; then
    echo $7 > /var/etc/nameserver_$1
    /sbin/route delete $7
    /sbin/route add $7 $4
    fi

    if [ $8 = "dns2" ]; then
    echo $9 >> /var/etc/nameserver_$1
    /sbin/route delete $9
    /sbin/route add $9 $4
    fi
    /usr/local/sbin/pfSctl -c 'service reload dns'
    /bin/sleep 1
    fi

    ### Cheking is there default gateway
    if netstat -nr | grep default > /dev/null;
    then logger Default gateway is already present;
    else /sbin/route add default $4;
        logger $1 link changed to UP. Setting $4 as default gateway;
    fi
    ###

    /usr/local/sbin/pfSctl -c "interface newip $1"
    exit 0

    Решение - не идеал - в systemlog всё равно падает ошибка, о которой я писал раньше. Зато работает.

    Кроме того, отписался в английской ветке - может чего скажут умного…


Log in to reply