Belépés

Támogatóink



HSDPA-WLAN átjáró régi laptopból

Lacó küldte be:

Ahogy a mobil internet egyre gyorsabb és olcsóbb lesz, egyre inkább megéri otthon is mobil internetet használni. A következő cikkben azt mutatom be, hogy hogyan lehet egy régi laptopot úgy felkonfigurálni, hogy egy PCMCIA HSDPA kártyán át csatlakozzon az internetre és azt a belső WLAN hálózat felé megossza.

Az általam megvalósított megoldásban a laptop kliensként csatlakozott egy már meglévő WLAN access pointhoz, de egy megfelelő WLAN kártyával és némi további konfigurálással (~10 sor) maga a laptop is képes access pointként működni és így akár menet közben egy autóbuszon is tudunk vele nagy sebességű WLAN hotspotot kialakítani.

A folyamatos fogyasztás csökkentése érdekében (és azért mert a régi laptopomban egy nagyon hangos winchester van), egy LiveCD-s megoldást alakítottam ki, ami CD-ről boot-ol be, beolvassa az aktuális konfigurációt a merevlemezről, majd lekapcsolja a winchestert és némán, a memóriából fut tovább. Ha becsukjuk a laptopot, akkor a kijelző is kikapcsol és az egész rendszer mindössze néhány wattot fogyaszt.

A rendszer elkészítéséhez a következő lépésekre volt szükség:

  • Live CD előkészítése, hogy a winchesteren tárolt kiegészítő konfigurációs fájlokat is futtassa induláskor
  • HSDPA kártya konfigurálása
  • WLAN kártya konfigurálása
  • Tűzfal konfigurálása
  • Web böngésző konfigurálása, ez az internet kapcsolat vezérléséhez kell
  • DHCP konfigurálás, az adja a címeket a klienseknek
  • DNS szerver konfigurálása, ez segít az internetes névfeloldásban
  • Nem használt szolgáltatások leállítása, winchester leállítása


  • A saját rendszeremhez használt konfigurációs fájlok innen letölthetők, a bizalmas információkat átírtam benne (pld. belső MAC címek, WEP kulcs stb.), de amúgy is mindenkinek át kell ezeket néznie, hogy a saját rendszerében jól működjenek.

    A következő fejezetekben végigmegyünk az egyes lépéseken, hogy részleteiben lássuk, mit és hogyan kell beállítani.

    Live CD előkészítése

    Több sikertelen kísérlet után végül a SLAX LiveCD-t (www.slax.org) választottam ki kiindulási alapként, mert ebben a Linux disztribúcióban működik a PCMCIA alrendszer, a WLAN kártyát magától felismerte és nagyon jók a testreszabási lehetőségei.

    A rendszerhez az 5.1.8.1-es szerver verzióból indultam ki.

    A testreszabást többféleképpen is meg lehet oldani, de nekem azt tűnt célravezetőnek, hogy a rendszer beindulás után nézze végig az összes megtalált meghajtót (winchesterek és flash meghajtók) és az elsőről, ahol talál a gyökérben slax könyvtárat és abban init parancsfájlt, azt futtassa le. Ennek az az előnye, hogy a CD újraírása nélkül lehet módosítani a rendszert, bármilyen médián lehetnek a konfigurációs fájlok.

    Az /etc/rc.d/rc.local fájl átírása tűnt a megfelelő megoldásnak, ezt a rendszer az összes egyéb inicializáló script után hajtja végre.

    A fájlba egyetlen parancs került, ez végignézi az összes automatikusan felismert és felcsatolt meghajtót és elindítja a /slax/init-et:

    `ls -1 /mnt/*/slax/init 2>/dev/null | head -n 1`

    Ahhoz, hogy az /etc/rc.d/rc.local fájl indulás után belekerüljön a rendszerbe, a live CD rootcopy könyvtárába kell, a teljes elérési úttal együtt bemásolni és így készíteni el a LiveCD-t.

    Sajnos nem elég egy egyszerű ISO editort használni, hanem a Slax dokumentációban leírt (http://www.slax.org/doc_customize.php#modifyiso) módszert használni. Ez abból áll, hogy fel kell másolni az egész eredeti CD tartalmat a winchesterre, ott bemásolni a rootcopy könyvtárba a szükséges fájlt, majd Windows alatt kiadni a make_iso.bat new-slax.iso parancsot illetve Linux alatt a ./make_iso.sh /tmp/new-slax.iso parancsot, ami elkészíti a már égethető ISO fájlt. Ezt égessük (praktikusan egy újraírható) CD-re és máris bootolhatjuk a laptopot, a további lépéseket már fogjuk végrehajtani.

    HSDPA kártya konfigurálása

    Ebben az esetben egy Sierra Wireless AirCard AC850-ös típusú PCMCIA kártyát kellett illeszteni, ehhez némi keresgélés után meglett a megfelelő leírás: (http://mycusthelp.com/sierrawireless/supportkbitem.asp?sSessionID=&Inc=4703&sFilA=FAQ%20Category&sFilB=Products&sFilC=&KEY=860)

    A lényeg, hogy a /etc/pcmcia/config fájl végére be kell másolni a következő sorokat:

    card "Sierra Wireless AC850 3G Network Adapter R1" manfid 0x0192, 0x0710 cis "cis/SW_8xx_SER.dat" bind "serial_cs"

    a /etc/pcmcia/cis könyvtárba pedig be kell másolni az oldalról letölthető SW_8xx_SER.dat fájlocskát, majd újraindítani a PCMCIA alrendszert. Ezután ha bedugjuk a kártyát, azt a rendszer felismeri és soros portként installálja a rendszerbe. A bedugás után a dmesg paranccsal tudjuk megnézni, hogy sikeres volt-e a művelet, és hogy melyik soros portot kapta meg a kártya.

    A részletek az a850init fájlban találhatóak.

    A kártya előkészítésén kívül itt készülünk fel a ppp kapcsolat létrehozására is, amihez bemásoljuk a pon, poff és plog scripteket, néhány egyéb a kapcsolat indítását és leállítását támogató scriptet és ami a legfontosabb, a ppp/peers könytárból az a850 és a850chat fájlokat. Az a850 tartalmazza a ppp paramétereket, ebben a soros vonal nevét kell testre szabnunk, az a850chat pedig tartalmazza a kapcsolat felépítéséhez szükséges parancsokat, ebben, ha nem Pannon előfizetést használunk, akkor a +CGDCONT parancsot tartalmazó sorban be kell állítanunk a szolgáltató által biztosított GPRS APN-t.

    Kitekintés

    A Sierra Wireless kártya itthon nem túl elterjedt, de az itthon kapható kártyákról és USB modemekről is találunk megfelelő instrukciókat az interneten. Az Option PCMCIA kártyák legtöbbször automatikusan USB soros vonalként kerülnek felismerésre Az USB modemek, vagy mobiltelefonok USB csatlakozóval szintúgy. Ha esetleg a rendszer azt írja, hogy az USB eszközünket egyik driver sem kérte, akkor érdemes megpróbálni a modprobe usbserial vendor=0xf3d product=0x0112 típusú parancsot, ahol a vendor és product id az adott eszköz azonosítója (általában a dmesg parancs kiírja).

    Ugyan a HSDPA megoldás a leggyorsabb, de még egy sima 3G-s telefon a maga 384/64 kbps sebességével is elég jól használható, kezdetnek egy ilyet is érdemes kipróbálni.

    WLAN kártya konfigurálás

    A Slax magától felismerte az Atheros chipsetes SMC WCBT-G típusú WLAN kártyát, így csak a WLAN hálózat adatait és az IP címet kellett megadni (wlaninit):

    hostname vadmalac domainname laco.hu iwconfig ath0 essid LacoNet3 key s:awepjelszo ifconfig ath0 up 192.168.0.12 netmask 255.255.255.0

    Sajnos a belső hálózaton van néhány olyan eszköz, ami nem támogatja a WPA titkosítást, így kénytelen vagyok a WEP-et használni.

    A kártya a MADWifi drivert használja, amit access point üzemmódba is át lehet állítani, erről itt lehet bővebben olvasni: (http://madwifi.org/wiki/UserDocs/AccessPointInterface)

    Tűzfal konfigurálás

    Tűzfalnak a linux beépített tűzfalát használjuk, amit az iptables paranccsal lehet konfigurálni. Elvileg összerakhatnánk kézzel is a saját parancsainkat, de a http://easyfwgen.morizot.net/ webcímen elérhető szolgáltatással, néhány gombnyomással generálhatunk magunknak egy megfelelő scriptet. Én szeretem a kimenő forgalmakat is ellenőrizni és csak azokat a gépeket kiengedni az internetre, amelyikeknek erre szüksége van, így kicsit testre kellett szabni a scriptet. A következő változásokat végeztem el:

    Beállítottam a DROP policy-t az OUTGOING láncra Létrehoztam egy all_outgoing nevű láncot, ami ellenőrzi a kimenő udp és tcp forgalmakat Létrehoztam egy allow_browsing láncot, ahol azokat a gépeket engedem ki, akik böngészhetnek az interneten. Az ftp, http és shttp portokat engedélyeztem nekik. Létrehoztam egy allow_vpn láncot, ahova azokat a gépeket raktam be, amikkel a munkahelyi hálózatra VPN klienssel szoktam bejelentkezni. A script elején definiáltam a gépek MAC címét (ethernet kártya azonosítóját), ez alapján az all_outgoing láncban MAC cím alapján az allow_browsing vagy allow vpn láncokba továbbítom az engedélyezett gépeket

    A tűzfal scriptet mindenkinek magának kell átnéznie és testre szabnia, mert igen kritikus része a rendszernek, ha azonban nincsenek speciális igények a fenti címen generált script egyből használható.

    WEB szerver beállítása

    A Web szerver konfigurálása nem volt egy nehéz feladat, mivel a SLAX Live CD tartalmazza az Apache web szervert PHP támogatással. Első lépésben beállítottam az Apache konfigurációs fájlban, hogy csak a belső LAN-on figyeljen a szerver, beírtam, hogy én vagyok az adminisztrátor és mi a szerver neve, majd újraindítottam a szervert, hogy az új beállítások érvényre jussanak. Hogy változatosabb legyen a dolog, itt nem a teljes szerkesztett fájlt másoltam vissza az /etc könyvtárba hanem a sed parancsal a meglévő fájlban cseréltem ki a megfelelő értékeket:

    #reconfigure apache to tun only on the internal network #set to listen only on the internal port /usr/bin/sed -e 's/^Listen.*80/Listen 192.168.0.12:80/' /etc/apache/httpd.conf >/etc/apache/httpd1.conf #set your administrative name /usr/bin/sed -e 's/^ServerAdmin.*/ServerAdmin laco@laco.hu/' /etc/apache/httpd1.conf >/etc/apache/httpd.conf #set your server name echo 'ServerName vadmalac.laco.hu:80' >> /etc/apache/httpd.conf #restart the server for the new values to take effect /etc/rc.d/rc.httpd stop /etc/rc.d/rc.httpd start

    A következő lépésben átmásoltam azt a php oldalt, ami ki-be kapcsolgatja az internetet.

    A program működése a következő:

    A /proc mappából ellenőrzi, hogy van-e ppp0 hálózati interface. Ha van, az azt jelenti, hogy már csatlakozva vagyunk.

    A pidof pppd parancssal lekérdezi, hogy fut-e a ppp démon, így el tudja dönteni, hogy már próbálunk-e kapcsolatot létrehozni (ha van pidof de még nincs ppp0 az azt jelenti, hogy a pppd már fut és próbálja a kapcsolatot felépíteni) Ezek állapotától függően megjeleníti a státuszt és egy be vagy kikapcsoló gombot. A kikapcsolás esetén meghívja a sudo poff-a parancsot. Bekapcsolás esetén meghívja a sudo pon a850 parancsot.

    A weboldal kicsit el van bonyolítva, mert egy olyan verziót használtam korábban, ami egy szöveges fájlból kapta a státusz információt és JavaScript kód segítségével jeleztem ki a státuszt, php-vel ezt sokkal egyszerűbben le lehetne programozni, de mivel így is működik, erre még nem került sor.

    Utolsó lépés a web szerver beállításainál a poff és pon paracsok futtathatóságát megteremteni a web szerver által használt nobody user számára, ezt a sudo parancs megfelelő konfigurálásával lehetett elérni. (Ennek a részleteit a wwwinit fájlban lehet megnézni)

    DNS beállítása

    A DNS alakítja át egymásba a webes neveket ( pld. www.origo.hu) és címeket (195.228.240.145). A Slax disztribúcióban benne van a bind program, ami ezt kezelni, csak megfelelően fel kell konfigurálni. Egy olyan konfigurációt raktam össze, aminél: A tűzfal gépünk DNS szerverként is működik, azaz a belső gépeknek ő adja a DNS információt Kiszolgálja a belső domaint (laco.hu) azaz a belső gépekre is lehet a nevükkel hivatkozni Nem használja a szolgáltató DNS szolgáltatását, hanem közvetlenül a gyökér kiszolgálókhoz fordul (jobb lenne, ha a szolgáltatót használná, de ez most így sikerült) Maga a tűzfal gép is a saját DNS szolgáltatását használja a loopback interfészen keresztül.

    Az ezekhez szükséges konfigurációs fájlok az /bind könyvtárban vannak. A named.conf felsorolja a zónákat, amit kiszolgál, az egyes zónák definíciója pedig a db kezdető fájlokban. Amire figyelni kell, hogy oda vissza meg kell határozni a konverziót, tehán nem elég a db.laco.hu-ban megadni, hogy a vadmalac a 192.168.0.12-es címen érhető el, hanem azt is meg kell adni a db.192-es fájlban, hogy a 12-es címhez a vadmalac tartozik. Végül a resolv.conf adja meg, hogy maga a tűzfal hogyan végezze el a feloldást, ide az került, hogy a 127.0.0.1-től azaz saját magától kérje az információkat. Az inicializálásnál a zóna konfigurációs fájlokat bemásoljuk az /etc/bind könyvtárba, a named.conf és a resolv.conf fájlokat pedig az /etc könyvtárba és a /etc/rc.d/rc.bind start paranccsal elindítjuk a DNS szolgáltatást.

    Ha valaki egyszerűbb megoldást szeretne, a DNS kiszolgálót teljes egészében ki lehet hagyni és a DHCP beállításoknál kiküldeni a szolgáltató DNS szerver címét a belső hálózaton lévő klienseknek. Ekkor arra kell még figyelni, hogy a tűzfal a DNS kéréseket is átengedje.

    DHCP beállítása

    A DHCP beállításánál a cél az volt, hogy néhány gép a hálózati kártya MAC címe alapján fix IP címet kapjon (tipikusan a szerver feladatokat is ellátó gépek) a többi pedig egy elég tágas készletből kapja meg a címét. A címen kívül az alapértelmezett átjárót adjuk még meg. A konfiguráció a dhcpd.conf fájlba kerül és az inicializáló script (dhcpinit) ezt masolja az /etc könyvtárba és indítja el a dhcp démont a /usr/sbin/dhcpd -q ath0 paranccsal. Alternatívaként elvileg lehetne a WLAN access point DHCP szerverét is használni, ekkor azonban meg kell oldani, hogy átjáróként a tűzfalat adja meg, amit nem biztos, hogy be lehet állítani egy egyszerűbb eszköznél.

    Nem használt szolgáltatások leállítása

    Végső lépésben a cleanup scriptben leállítom a nem használt szolgáltatásokat: Cups – nyomtatás Gpm – egér kezelése MySQL – adatbáziskezeő Sendmail – levelezés

    Kikapcsolom a swap memóriát:

    /sbin/swapoff -a

    Erre azért van szükség, hogy nehogy véletlenül bekapcsolódjon a winchester Majd beállítom a winchester energiatakarékos üzemmódját:

    /usr/sbin/hdparm -S 8 /dev/hda

    Ez a parancs 40 másodpercre állítja a winchester sleep idejét azaz ha nem használják 40 másodpercig, akkor leállítja a lemezt.

    Összegzés

    Nagyjából 3 hete működik már a megoldás és alapvetően jól, stabilan működik. Azóta hozzáfejlesztettem a wake-on-lan funkcionalitást is, mert otthoni hálózatról lévén szó, a nem használt szervereket le szoktuk kapcsolni, hogy ne fogyasszák az áramot, és így távolról vissza lehet őket kapcsolni.

    A Sierra Wireless kártya nem teljesít igazán jól Linux alatt, általában 800-1000 kbps sebességet produkál, míg Windows alatt 1,5 Mbps is könnyedén elérhető. (Ezért nemsokára fogok tesztelni egy Huawei E220-as USBs HSDPA modult).

    Mivel eleinte kicsit bizonytalanul működött a HSDPA kártya, a letölthető CIS fájlt kicsit módosítottam, így érzésre stabilabban működik, de nem töltöttem vissza a régi verziót, hogy megnézzem, hogy tényleg ettől lett-e stabil. Egy probléma még mindig fennáll, hogy ha már használtam a HSDPA kapcsolatot, akkor, amikor újra szeretnék kapcsolódni, az csak a második tárcsázásra sikerül (~50 másodperc múlva), ami valószínüleg azért van, mert szétkapcsolásnál nem bontja tisztességesen a kapcsolatot.

    Következő lépésben egy forgalom monitorozó scriptet (rrdtools-al) és egy a hálózat gépeit figyelő scriptet (ping-el) szeretnék még rá barkácsolni, hogy tényleg minden igényemet kielégítse.

    Csilling László

    laco@laco.hu