On 26.07.2013 23:46, Alexander Bolshakov wrote:
> 26 июля 2013 г., 19:41 пользователь Alexander Bolshakov <[email protected] 
> <mailto:[email protected]>> написал:
> 
>     Добрый день сообществу!
> 
>     Перерыл гугл, но ответа на вопрос так и не нашёл. :(
>     Есть у меня контора, ходит в интернет через mpd, для какой-то 
> министерской (?) отчетности пользователи поднимают pppoe канал на 
> министерский хост, подключаются к базе и принимают задания/отправляют отчёты. 
> Время идёт, конторка растёт (в плане количества сотрудников), задания от 
> министерства растут... Я не смог преодолеть когда-то ограничения NAT-а на 
> более чем одну GRE-сессию. Попытался поднять pppoe на том же mpd, всё, вроде, 
> хорошо получилось, но второй mpd-линк при перезапуске часто висит в пассивном 
> состоянии. В последнее время народ весьма активно работает в этой базе из 
> разных кабинетов. Каждый вновь подключающийся "срубает" предыдущего (если кто 
> был подключен). :( Недовольство растёт.
> 
>     Если подключаться к консоли mpd и руками поднимать второй линк - всё 
> проходит чудесно. Дело, я понимаю, в том, что при старте второго линка, 
> первый ещё не поднят/не сконфигурирован. А вот как указать mpd задержку на 
> несколько секунд перед поднятием второго линка - найти нигде не могу. Если не 
> трудно - ткните носом в нужное место в документации. Спасибо!
> 
> Блин, забыл конфиг:

>   create link static L1 pppoe

>   create link static L2 pptp
>   set link action bundle B2
>   set auth authname "user5"
>   set auth password "xxxxxx"
>   set link max-redial 0
>   set link redial-delay 30
>   set link mtu 1492
> #  set link mtu 1460
>   set link keep-alive 10 35
>   set pptp peer vpn.mfgt.gov.ua <http://vpn.mfgt.gov.ua>
>   set pptp disable windowing
>   open

Второй линк, использующий протокол GRE, это pptp, разумеется, а не PPPoE.
Есть несколько способов решить задачу. Простейший это выкинуть из конфига
команду set link redial-delay 30 и тогда mpd повторит попытку подключить
pptp не через полминуты, а через секунду после неудачной первой. Таким образом,
вся процедура займет пару секунд, а не полминуты.

Полностью корректный способ это убрать команду open из конфигурации второго 
линка
и написать скрипт ip-up, запуск которого вставить в линк L1 и который будет
подключаться к mpd по telnet и командовать open в контексте линка L2.
Тогда первая попытка подключить pptp будет выполняться в тот момент,
когда PPPoE уже полностью работает.

Скрипт на перле может выглядить так. Требует модуль p5-Net-Telnet из портов.

#!/usr/bin/perl -w
use strict;
use Net::Telnet;
my $host='localhost'; 
my $port='5005';
my $user='admin';
my $pass='xxx';
my $t = new Net::Telnet (Timeout => 2, Port => $port,
                         Binmode => '\015\012', Prompt => '/\[\]/');
$t->open("$host");
$t->login($user, $pass);
$t->print("link L2");
$t->print("open");
$t->print("exit");
$t->close;
exit(0);

Или можно написать скрипт на expect, если больше нравится.
Прикрепление его в качестве скрипта ip-up линку L1 оставляем
как домашнее задание :-)

Ответить