(РЕШЕНО)Отваливаются маршруты на VPN клиенто&



  • Столкнулся с интересной проблемой и почти решил ее. :-)

    Настраиваю vpn концентратор на pfSense, к нему подключаются по pptp отдельные клиенты и другие роутеры (в основном железные draytek vigor)
    В центре 192.168.0.0/24 отдельные клиенты получают адрес в той-же сетке с ними все ОК.
    Удаленные сети тоже получают фиксированный адрес в той-же сети 192.168.0.x, плюс имеют свою подсеть 192.168.x.0/24 роутинг настраивается вручную (в веб интерфейсе Static routes) приблизительно так:
    route add 192.168.x.0/24 192.168.0.x
    route add 192.168.y.0/24 192.168.0.y
    и т.д.

    Все работает прекрасно до тех пор, пока vpn соединение не обрывается.
    Из-за этого маршрут на эту сеть прибивается из таблицы маршрутизации (в веб интерфейсе остается), после поднятия vpn сессии обратно маршрут не восстанавливается! Если зайти в редактирование статических маршрутов и нажать Save && Apply - все восстанавливается и дальше работает.
    Странное поведение, как для статического маршрута.
    pfSense у меня там старый 1.2.3 (работает - не трожь) ну я решил что это глюк и даже обновил до 2.0.2, как-же я удивился когда в этой версии оно заработало точно так-же!

    Начал рыть форум, и нашел два не полных подхода к решению, вот скомбинировал:
    http://forum.pfsense.org/index.php/topic,23843.0.html
    Вот тут подтверждается такая проблема, и приводится прекрасный скрипт:

    #!/usr/local/bin/php -f
    require_once("util.inc");
    require_once("system.inc");
    system_routing_configure();
    ?>
    

    который эмулирует нажатие кнопок Save && Apply в веб интерфейсе, только его предлагают всунуть в крон.
    А вот тут:
    http://forum.pfsense.org/index.php/topic,18026.0.html
    описывается та-же проблема, и немного не такой универсальный скрипт предлагают вставить сюда
    /usr/local/sbin/vpn-linkup

    Я скомбинировал эти решения и оно заработало!
    Но не полностью. :-( Точнее не везде.
    Вышеприведенный первый скрипт, судя по комментариям предназначен для pfsense 2.0 (для более старого не обязательно инклюдить util.inc) Но в 2.0.2 не хватает и этих двух инклюдов, ориентируясь на ошибки я добавил еще два:

    require_once("gwlb.inc");
    require_once("interfaces.inc");
    

    Ошибки исчезли, скрипт выполняется (через /usr/local/sbin/vpn-linkup тоже), но его выполнение не приводит к результату, подозреваю, что в 2.0.2 появились в Static Routes другие элементы управления и этот скрипт не вызывает Save && Apply

    Пришлось откатиться на pfsense 1.2.3 - пока работает, но все-же хочу обновиться.
    Кто разбирается во внутренностях веб интерфейса, помогите написать правильный скрипт для передергивания статических маршрутов для актуальной версии pfsense!



  • Я продолжил изыскания в 2.0.2 и подобрал необходимую либу.
    Итого окончательный скрипт выгдит так:

    #!/usr/local/bin/php -f
    require_once("auth.inc");
    require_once("interfaces.inc");
    require_once("gwlb.inc");
    require_once("system.inc");
    system_routing_configure();
    ?>
    

    Сохраняем его где угодно (думаю, концептуально правильным местом будет /usr/local/etc/rc.d/) называем файл, скажем route_upd
    Назначаем ему права для исполнения:
    chmod 755 /usr/local/etc/rc.d/route_upd

    Редактируем файл  /usr/local/sbin/vpn-linkup
    добавляя в его конец строчку:

    /usr/local/etc/rc.d/route_upd
    

    Все. При установлении новой VPN сессии всегда будут обновляться статически маршруты до состояния заданного в настройках.

    Может в FAQ? Хотя более правильным было бы такое поведение исправить в самом pfSense.



  • Для более новых версий, в частности 2.2.6 нужно добавить еще один инклюд:

    require_once("pfsense-utils.inc");
    


  • Спасибо.
    Побольше бы нам на форуме таких людей.



  • Добрый день.
    pfSense 2.4.5 проблема так и осталась, но данное решение не подходит в силу изменений кода страницы отображение маршрутов, к сожалению в php не силен, а в cron добавлять скрипт пингования и поднятия маршрута не хотелось по причине совсем уж костыльности данного способа.
    по этому в /usr/local/sbin/vpn-linkup был добавлен линк на скрипт sh

    #!/bin/sh
    if ping -c 4 192.168.2.1 >> /dev/null
    then
    echo 'route 2.0 working'
    else
    route add -net 192.168.2.0/24 192.168.30.2
    fi
    if ping -c 4 192.168.5.1 >> /dev/null
    then
    echo 'route 5.0 working'
    exit 0
    else
    route add -net 192.168.5.0/24 192.168.30.5
    fi
    
    

    В итоге скрипт при добавлении нового соединения l2tp пингует ip шлюза в сети и если путь не поднялся добавляет его. Ну и так далее. Надеюсь будет полезно. Буду признателен если есть мысль как автоматизировать полностью скрипт чтобы он не зависел от статических ip либо брал их из pfsense



  • @codriver said in (РЕШЕНО)Отваливаются маршруты на VPN клиенто&:

    l2tp

    Здр

    Не знаю , поможет ли Вам это
    Там же mpd используется для l2tp ? Если да , то есть вот такая настройка у mpd

    set iface up-script script
    set iface down-script script
    Mpd can optionally run a user program every time one of network protocols (IPCP/IPv6CP) at the interface is brought up or down. The up-script is called like this:
    
    script interface proto local-ip remote-ip authname [ dns1 server-ip ] [ dns2 server-ip ] peer-address
    If up-script exit status is not 0, mpd will kill respective protocol.
    
    The down-script is called like this
    script interface proto local-ip remote-ip authname peer-address
    

    Те можно выполнять некие действия при поднятии/падении интерфейса
    вот параметры , которые передаются при вызове скрипта

    $0 - script name

    $1 - if name (ng0...)

    $2 - proto

    $3 - local-ip

    $4 - remote-ip

    $5 - authname

    $6 - [ dns1 server-ip ]

    $7 - [ dns2 server-ip ]

    $8 - peer-address


Log in to reply