(РЕШЕНО)Отваливаются маршруты на 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 ? Если да , то есть вот такая настройка у mpdset 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