Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Общий по Linux (http://forum.oszone.net/forumdisplay.php?f=9)
-   -   как поднять VPN over VPN со скрипта? (http://forum.oszone.net/showthread.php?t=168339)

pva 24-02-2010 00:49 1354355

как поднять VPN over VPN со скрипта?
 
Проблема в том, что pptp не возвращается, пока не закроется сессия. Пытался так:
Код:

# pptp АДРЕС defaultroute noauth user ПОЛЬЗОВАТЕЛЬ password ПАРОЛЬ 2>&1
Using interface ppp0
Connect: ppp0 <--> /dev/pts/6
CHAP authentication succeeded
CHAP authentication succeeded
not replacing default route to wlan0 [192.168.0.1]
local  IP address ТАКОЙ-ТО
remote IP address СЯКОЙ-ТО
Script ?? finished (pid 17811), status = 0x0
Script /etc/ppp/ip-up finished (pid 17817), status = 0x0
^CTerminating on signal 2
Connect time 0.3 minutes.
Sent 0 bytes, received 0 bytes.
Terminating on signal 15
Script /etc/ppp/ip-down finished (pid 18029), status = 0x0
Connection terminated.
Modem hangup

думал типа так должно сработать:
Код:

# pptp АДРЕС defaultroute noauth user ПОЛЬЗОВАТЕЛЬ password ПАРОЛЬ 2>&1 | grep if-up\ finished | pptp ...
пробую:
# pptp АДРЕС defaultroute noauth user ПОЛЬЗОВАТЕЛЬ password ПАРОЛЬ | grep if-up\ finished
# pptp АДРЕС defaultroute noauth user ПОЛЬЗОВАТЕЛЬ password ПАРОЛЬ 2>&1 | grep if-up\ finished

На экране пусто, а сессия поднялась
тупо pptp ... & sleep 10 && pptp ... делать не хочется, потому что он не следит за результатом подключения

pva 25-02-2010 01:03 1355288

уточняем вопрос: как с командной строки выполнить команду, если во входном потоке присутствует регулярное выражение?
awk не катит, потому что надо сделать вложенный вызов:
pptp ... | если_есть state\ =\ 0x0 route ... && (pptp ... | если_есть state\ =\ 0x0 route ... && echo "ready")
вспомогательный скрипт рассматриваю как последний вариант (если в строчку не получится), а, или можно в скрипте типа функцию вызвать?

pva 26-02-2010 00:43 1356120

в общем что-то более-менее похожее на то, что хотелось, всё-таки получается у меня только с помощью awk:
Код:

pptp АДРЕС1 noauth user ПОЛЬЗОВАТЕЛЬ1 password ПАРОЛЬ1 | awk '
/Using\ interface/{ppdev=$3}
/local\ \ IP address/{ppaddr=$4}
/remote\ IP address/{ppraddr=$4}
/ip-up\ finished\ .+\ status\ =\ 0x0/{sub("\.[0-9]+$", "\.0", ppaddr);print("route add -net " ppaddr " netmask 255.255.255.0 dev " ppdev СЮДА_ВСТАВИТЬ_КОМАНДУ)|"bash"}
/ip-down\ finished/{print("route del -net " ppraddr " netmask 255.255.255.255")|"bash"}'

СЮДА_ВСТАВИТЬ_КОМАНДУ такую:

&& pptp АДРЕС2 noauth user ПОЛЬЗОВАТЕЛЬ2 password ПАРОЛЬ2 require-mppe | awk '
/Using\ interface/{ppdev=$3} /local\ \ IP address/{ppaddr=$4}
/remote\ IP address/{ppraddr=$4}
/ip-up\ finished\ .+\ status\ =\ 0x0/{sub("\.[0-9]+$", "\.0", ppaddr);print("route add -net " ppaddr " netmask 255.255.255.0 dev " ppdev)|"bash"}
/ip-down\ finished/{print("route del -net " ppraddr " netmask 255.255.255.255")|"bash"}' &

если не считать СЮДА_ВСТАВИТЬ_КОМАНДУ, то программа для awk абсолютно одинаковая, вызов pptp отличается именем, паролем, адресом и если в имени есть '\\', то добавляется require-mppe.

Три вопроса:
1) Можно как-то это причесать? чтобы, например, получился умный скрипт nested_pptp, который вызывается типа так:
Код:

(echo АДРЕС1 ИМЯ1 ПАРОЛЬ1 && echo АДРЕС2 ИМЯ2 ПАРОЛЬ2) | nested_pptp
2) Будет ли работать VPN через VPN, если вконце строчки СЮДА_ВСТАВИТЬ_КОМАНДУ убрать & ? Или там чёнить самозаблокируется?

3) можно ли сделать проще/умнее (ip-up и ip-down трогать не хочется, т.к. не для любого соединения теоретически надо подсеть прописывать)


Время: 23:41.

Время: 23:41.
© OSzone.net 2001-