OpenVPN - script inditasa a kapcsolat felepitese utan

A feladat: automatizalva (cron) VPN kapcsolatot epiteni, VPN-en keresztul tesztelni egy webes szolgaltatast, ha az vegzett, lebontani a VPN-t, es ennyi.

A normal munkamenet a route-up direktiva segitsegevel a kovetkezo LENNE:

- init script elinditja az openvpn kapcsolatot, route-up-ban megadva azt a script-et, ami a halozati parancsot vegrehajtana VPN-en keresztul
- a halozati script lefut, a vegen killall openvpn-nel (igen, ez a hivatalos modja, ami mar eleve jelzi a szinvonalat) leallitja a kapcsolatot
- a futas visszakerul az init-hez, ami bekeben terminal

Az openvpn normal futas eseten hozzaadja a route-okat, majd kiboki, hogy

Thu Jul 17 17:44:11 2014 Initialization Sequence Completed

es ezen pont utan mukodik a dolog. A problema ott van, hogy a route-up-ban megadott script ez elott kerul meghivasra, ami tortenetesen pontosan az az idopillanat, amikor baromira nem megy semmi halozati forgalom. Igy a halozati script nyilvan var a vegtelensegig, es megdoglott az egesz.

Kapcsolodo szalak:

https://bbs.archlinux.org/viewtopic.php?id=178896
https://groups.google.com/forum/#!msg/openvpn-users/MV4O563P7BE/8zLThpd…
http://stackoverflow.com/questions/21001220/bash-sequence-wait-for-outp…

Tenyleg nem letezik erre ertelmes megoldas? Nem, a

exec 3< <(sudo openvpn --config FILE)
sed '/Initialization Sequence Completed$/q' <&3 ; cat <&3 &
# VPN initialization is now complete and running in the background

meg az initd-vel korbetaknyolas nem szamit annak :(

u.i.: Probaltam az #openvpn-en is korbekerdezni, de az elso valasz az volt, hogy RTFM, a masodik meg az, hogy halozati kapcsolat nelkul nem lehet VPN-ezni. Mikor annyit valaszoltam, hogy "no shit", bannoltak (rofl), ugyhogy veluk is csak tobben vagyunk.

Hozzászólások

Az openvpn több scriptet is képes futtatni. Csak néhány ezek közül: up, route-up, ip-change (trükkös módon akkor is meghívódik, amikor az IP-t megkapod - legalábbis leírás szerint) - ezek közül egyik se jó? (Ok, logikusan a route-up kéne neked, de egy próbát esetleg a többi is megérhet...)

A script gondolom biztos elindul, tehát a script-security-level opció megfelelő beállításával engedélyezed a scriptek futását.

Nagyon gonosz dolog lenne, ha a script úgy indulna, hogy "sleep 3"?

Illetve ha ez ennyire bizonytalan, akkor ciklusban ping, megparaméterezve, hogy egy csomagot küldjön, egy másodpercig várja a választ. Ha az exit status nem nulla, akkor számláló növekszik. Ha a számláló < 10, akkor vissza a ping-hez, egyébként kilépés - majd az exit statustól függően vagy irány a script vége, killall openvpn (van olyan, hogy a kapcsolat nem lesz teljesen jó), egyébként meg indulhat az érdemi munka. Vagy ez már taknyolás?

Azt nem értem, hogy az init hogy jön ide? A leírás alapján simán cron-ból kéne futni adott időnként - nem?

Security level be van allitva, igen. Ha halozatot nem hasznalo parancsokat teszek a route-up scriptbe, az szepen lefut, tehat tuti megy.

A sleep viszont nem segit, mivel ha a vegtelensegig varsz, akkor sem lep tovabb az OpenVPN, marpedig amig nem lep tovabb, addig nem epul fel rendesen a kapcsolat :(

Maskepp mondva, a kapcsolat csak akkor epul fel, amikor mar visszatert a route-up-ban megadott script, igy kvazi semmi haszna az egesz opcionak, mivel pont az lenne a lenyeg, hogy a felepult kapcsolatot hasznalja a script.

A mukodokepes sorrend az lenne, hogy

- route add
- init sequence completed
- route-up script

Ehelyett jelenleg igy megy:

- route add
- route-up script
- init sequence completed

Sot, igazabol a completed-ig mar el se jut, mivel a script-bol allitom le az openvpn processzt.

Mar beallitottam azt is, hogy ping 5 (5 masodpercenkent ping-eljen), semmi valtozas.

Az init kicsit felreertheto, a sajat inicializalo script-rol van szo, ami magat az openvpn-t is elinditja.