WVDIAL és command line

Sziasztok!

Sajnos az elmúlt napokat gúglizással töltöttem, eredmény nélkül...az általam felvetett kérdésre nem találtam még választ. Mivel már korábban is remek hasznos tanácsot kaptam itt, ezért hozzátok fordulok.

A KÉRDÉS:

Adott egy gép, amin nincsen se monitor, se billentyűzet. Csücsül egy polcon, és egyetlen célfeladat elvégzésére kellene beállítani:

1.) automatikusan betárcsáz egy modemre a WVDIAL parancs segítségével
2.) sikeres betárcsázás esetén továbblép és egy meghatározott módon felépít egy routing táblát, különféle szabályokkal
3.) vonalszakadás esetén ismétel

A fenti lépéseket automatikusan, boot után kellene elvégezni. Vagyis ha a gép tápot kap = elindul = automatikusan elvégzi a lépéseket.

A fenti lépések már szépen mennek külön, egyenként. Felismeri a modemet, minden stimmel, minden szuper. Egyetlen egy gondom van csak. Ha írok erre egy script-et, akkor a vwdial a "elveszi" az ablakot magának egészen addig, amíg a kapcsolat él, vagyis hiába van a script végén a route parancsok hada...nem hajtódnak végre, mert a wvdial "fogja" az ablakot. A további parancsok kizárólag a wvdial manuális (ctrl+C) megszakítása után futnak le.

Tudom, hogy valami apróságon csúszom el, de nem jöttem rá, hogy min!

ui:

A rendszer 8.1.0-s Debian.

Plíz help!

Hozzászólások

wvdial (...) | while read CMD; do if [[ $CMD == CONNECT* ]]; then echo most csatlakozott fi; done

A vonalszakadásra meg csinálhatsz egy ugyanilyen if-then-fi szerkezetet, más feltétellel. A CONNECT*-ban a csillag azt jelenti, hogy a "CONNECT" szöveggel kell kezdődnie a sornak.

Subshellben futtasd a wvdial-t, a subshell-t meg háttérben, így tovább fog menni a programod.

(
    wvdial ...
    ...
) &
itt fut tovább, miközben a wvdial, s az őt futtató subshell nem tért vissza

A ... csak azt jelenti, oda írd, amit szeretnél. A gömbölyded zárójelek közti rész önálló shellben fut, a végén az & jel háttérbe teszi, s a fő shell nem várja meg a subshell futásának befejeztét. Így lehet több szálon futtatni programokat egyszerre shellben.

tr '[:lower:]' '[:upper:]' <<<locsemege
LOCSEMEGE

Van olyan, hogy fg jobspec, csak kellene tudni a hivatkozást, melyik job. Nehezen tudom elképzelni az értelmét, meg azt, mi történne ilyenkor. Mit szeretnél csinálni? Miért lenne erre szükséged? Valahol a későbbiekben várakoznál a wvdial-ra? Én azt szoktam, hogy megkeresem a pid-jét, és várok, amíg kilép.

PRG='wvdial'
while pgrep -u "$USER" -x "$PRG" >/dev/null; do
    sleep 1
done

tr '[:lower:]' '[:upper:]' <<<locsemege
LOCSEMEGE

wvdial-t soha nem hasznaltam, de ha jol latom, csak egy frontend a pppd-hez. Ha igy van, akkor a pppd ip-up szkriptjeben tudod beallitani a route-okat (/etc/ppp/ip-up, ez Debianban az /etc/ppp/ip-up.d alatti szkripteket inditja). A szkriptben a frissen felepult kapcsolat parameterei is elerhetoek a PPP_IFACE, PPP_TTY, PPP_SPEED, PPP_LOCAL, PPP_REMOTE, PPP_IPPARAM valtozokban.

Valóban. Próbáltam már belenézni, de jelen tudásom mellett egyszerűbbnek tűnt a manuális átirkálás a route add és route del parancsokkal :)

A ppp-ben az ip-up scriptekre eddig nem találtam nekem való leírást. Ha erről valaki tudna adni egy kis leírást és meg tudnám spórolni a manuális állítgatást, az nagy help lenne :)

Igazából erre szeretnék valami scriptet írni:

- a gép boot után automatikusan ellenőrzi, hogy van-e netkapcsolat a hálózattal
- ha van, akkor megpingel egy IP-t (másik eszköz) a hálózaton
- ha visszajön a ping, akkor továbblép és betárcsáz a (már említett wvdial-os) modemre
- a betárcsázás sikeressége után megpingeli a modemet és a modem által felépített ppp kapcsolat IP-jét
(a modem magától osztja az IP-t önmagának és a ppp kapcsolatnak, amit a gép "lát". Ezek fixek).
- ha ezek is visszajöttek, akkor beállítja az IP forwardot és a statikus route táblákat (betárcsázós modem és ethernet közt)
- ha mindez rendben van, akkor jelzi a felhasználónak, hogy a rendszer kész

Ezek közül ami eddig megy:

- manuális wvdial tárcsázás
- manuális ip forward
- manuális route beállítás

egyszerűbbnek tűnt a manuális átirkálás a route add és route del parancsokkal

Itt is pont ezt kell csinalni :-)

A kulonbseg annyi, hogy az

/etc/ppp/ip-up

szkriptet csak akkor hivja meg a pppd, ha mar felepult az IP kapcsolat. Igy nem kell amiatt aggodni, hogy hamarabb akarod beallitani a route-okat, mint ahogy a kapcsolat letrejon (es meg a tuloldal IP cimet sem neked kell kitalalni).

Pelda szkript (

/etc/ppp/ip-up.d/setup-routes

):

#! /bin/sh

ip route add 192.168.0.0/16 via "$PPP_REMOTE" dev "$PPP_IFACE"
ip route add 172.16.0.0/12 via "$PPP_REMOTE" dev "$PPP_IFACE"

Egyszerre szerkesztettuk a hozzaszolasokat... :-)

1. a gép boot után automatikusan ellenőrzi, hogy van-e netkapcsolat a hálózattal
2. ha van, akkor megpingel egy IP-t (másik eszköz) a hálózaton
3. ha visszajön a ping, akkor továbblép és betárcsáz a (már említett wvdial-os) modemre
4. a betárcsázás sikeressége után megpingeli a modemet és a modem által felépített ppp kapcsolat IP-jét
(a modem magától osztja az IP-t önmagának és a ppp kapcsolatnak, amit a gép "lát". Ezek fixek).
5. ha ezek is visszajöttek, akkor beállítja az IP forwardot és a statikus route táblákat (betárcsázós modem és ethernet közt)
6. ha mindez rendben van, akkor jelzi a felhasználónak, hogy a rendszer kész

1. folosleges, ha a 2. lepesben visszajon a ping, akkor van halozat. Amugy miert van szukseg erre?

3. (feltetelezem, hogy percdijas a kapcsolat)
A pppd-nek van egy

demand

modja, amikoris csak akkor hozza letre a kapcsolatot, amikor forgalom is van rajta (a tavoli gep IP cime fix kell legyen). Ilyenkor nagyon hasznos meg az

idle

opcio, ami a forgalom megszunese utan le tudja loni a linket.

5. IP forward mehet boot-kor, nem zavar senkit, a route-okat pedig a kapcsolat letrejottekor az ip-up szkript fogja beallitani

6. hangjelzes?

Nos teljesen jogosak a kérdéseid, ezek alapján:

1. Talán én bonyolítottam túl. Jogos. Összevonható, elhagyható pont.

3. Valóban nem ingyen wifiről van szó, de ez egyfajta "védelem is", vagyis itt jelezhetne a gép (hangjelzéssel akár), hogy hiba van és nem lép tovább mert nincsen hálózat se, akkor minek hívogasson ki a modemen.

5. ip fwd v4 boot-kor ok tulajdonképpen, route pedig ip-up indulás után akár. Jogos.

6. igen, hangjelzés

:)

ez egyfajta "védelem is", vagyis itt jelezhetne a gép (hangjelzéssel akár), hogy hiba van és nem lép tovább mert nincsen hálózat se, akkor minek hívogasson ki a modemen

A

demand

mod miatt a pppd csak akkor fog tarcsazni, amikor adatforgalom akar kimenni a tavoli gep IP cime fele. Amig nincs halozat, emiatt nem kell kulonosebben aggodni :-)

(ezzel egyutt ilyenkor el lehet inditani egy szirenazast, hogy tudd, hogy nincs halozat)

6. igen, hangjelzés

A

beep

pont erre valo (bar soha nem hasznaltam).

Az a lenyege, hogy a pppd indulaskor letrehozza a ppp eszkozt, felkonfiguralja a helyi es tavoli IP-ket, beallitja a route-okat. Az eszkoz pontosan ugy nez ki, mintha mukodne, pedig a pppd meg nem is tarcsazott. Mivel a kernel szempontjabol "van internet" (a default gateway a ppp eszkozon keresztul elerheto), a kernel siman kikuldi a ppp eszkozre az esetleges halozati forgalmat. Amint a pppd latja, hogy van kimeno forgalom, inditja a tarcsazast (persze lesz egy jopar masodperces kesleltetes a legelso csomagnal, amig a modem magahoz ter).

Lasd meg: http://www.tldp.org/LDP/nag2/x7297.html