OpenWrt jako router 3G
Instalacja i uruchomienie połączenia poprzez sieć komórkową (GPRS/EDGE/UMTS/HSPA/LTE/CDMA)
Ostatnia zmiana: 2013-04-03 08:29

1. Szybka instalacja
2. Gotowe obrazy
3. Instalacja
 3.1. USB
 3.2. PPP
 3.3. Sprzęt
4. Konfiguracja
 4.1. Firewall
5. Uruchomienie
6. Testy
7. Wymuszenie trybu pracy
 7.1. plik chat
 7.2. ręczne podanie polecenie
 7.3. konfiguracja sieci
8. Przełączenie urządzenia w tryb modemu
9. Odczytywanie smsów
10. Odczyt siły sygnału
11. Automatyczny restart połączenia
12. Podtrzymania połączenia HSPA+
13. Odblokowanie wszystkich częstotliwości modemu Huawei
14. Opłaty
15. Serwery na łączu 3G
16. Zakończenie


Czasami zdarza się, że padnie połączenie do naszego ISP i zwykle dzieje się to wtedy, kiedy koniecznie trzeba coś zrobić. Być może przydało by się jakieś łącze alternatywne, umożliwiające dostęp do internetu w standardowy sposób. Czemu nie sieć komórkowa? Ponieważ większość nowych telefonów posiada modemy, dostępne są też oddzielne modemy GSM, to dlaczego by nie wykorzystać tego jako źródło internetu? Dostępne są specjalne rutery przeznaczone do obsługi sieci komórkowych - np. Linksys WRT54G3G czy Huawei D100, ale przecież już mamy jeden, więc...

Dla przypomnienia: w zależności od obsługiwanej technologii przez modem i zasięgu/dostępu naszego operatora komórkowego, możliwe są do uzyskania następujące prędkości:

GPRS - do 56kbit/s
EDGE - do 250kbit/s
UMTS - do 384kbit/s
HSDPA - do 7,2Mbit/s
HSPA+ - do 42Mbit/s
LTE - do 150Mbit/s

To są prędkości teoretycznie, w praktyce w zależności od umiejscowienia modemu i obciążenia stacji bazowych można np. na HSDPA osiągnąć 2-4Mbit/s.
Poniższy poradnik dotyczy zarówno podłączonego telefonu GSM pod USB, jak również popularnych modemów na USB np. Huawei, ZTE czy Sierra.

UWAGA: W niektórych przypadkach, zwłaszcza przy słabym zasięgu modemy USB mogą wymagać więcej energii niż jest w stanie dostarczyć port USB w routerze. W takich przypadkach może okazać się niezbędne połączenie modemu przez hub USB, koniecznie aktywny, z własnym zasilaniem.

UWAGA2: Niektóre modemy (np. Sierra Wireless 307) mogą był przełączone w "airplane mode". Należy wtedy wyłączyć ten tryb korzystając z programów firmowych, np. Sierra Wireless Watcher.

UWAGA3: Poniższy poradnik jest dla osób które nie korzystają z GUI. Jeżeli chcesz to po prostu ustawić to zainstaluj Gargoyle PL i można połączenie "wyklikać" - patrz konfiguracja w Gargoyle.

UWAGA4: Niektóre smartfony (np Android z tetheringiem - nie wszystkie) nie są widoczne jako urządzenie szeregowe tylko jako zwykła karta sieciowa. Wtedy ten poradnik nie jest potrzebny - trzeba zainstalować pakiet kmod-usb-net-rndis, a na interfejsie wan ustawić usb0.

UWAGA5: Modemy oznaczone HiLink konfiguruje się w inny sposób. Patrz wsparcie dla modemów GSM.

Szybka instalacja

    # opkg update
    # opkg install kmod-usb-core kmod-usb2 kmod-usb-serial kmod-usb-serial-option usb-modeswitch usb-modeswitch-data libusb
    # opkg install chat comgt
    # uci del network.wan
    # uci set network.wan=interface
    # uci set network.wan.proto=3g
    # uci set network.wan.service=umts
    # uci set network.wan.device=/dev/ttyUSB0
    # uci set network.wan.pincode=1234
    # uci set network.wan.apn=internet
    # uci set network.wan.username=internet
    # uci set network.wan.password=internet
    # uci commit network
    # ifup wan

czyli w pliku /etc/config/network sekcja wan powinna wyglądać następująco:

    config 'interface' 'wan'
        option 'proto' '3g'
        option 'service' 'umts'
        option 'device' '/dev/ttyUSB0'
        option 'pincode' '1234'
        option 'apn' 'internet'
        option 'username' 'internet'
        option 'password' 'internet'

Należy pamiętać o podaniu właściwego urządzenia, kodu PIN, apn, loginu i hasła stosowanie do wymagań danego operatora (dane mogą się różnić dla określonych usług):
  • Aero2: darmowy, (puste), (puste) <- darmowy internet od Aero2
  • Cyfrowy Polsat: multi.internet, (puste), (puste)
  • Orange: internet, internet, internet
  • Play: internet, (puste), (puste)
  • Plus: internet, (puste), (puste)
  • T-Mobile: internet, (puste), (puste)
Jeżeli tworzymy inną sekcję niż wan - dodatkowo trzeba ustawić firewall

Opcja service to nie jest wymuszenie trybu pracy! To tylko przełącznik CDMA/GSM. Ma więc zostać umts, niezależnie od tego czy mamy edge czy lte.

Dla CDMA ustawienia wyglądają tak:

    config 'interface' 'wan'
        option 'proto' '3g'
        option 'service' 'cdma'
        option 'device' '/dev/ttyUSB0'
        option 'username' 'CDMA'
        option 'password' 'CDMA'

Oczywiście należy pamiętać o ustawieniu odpowiedniego urządzenia, użytkownika i ew. hasło:
  • Sferia: sferia, sferia
  • Orange: cdma@orange, orange
  • Nordisk Polska: CDMA, CDMA
  • Plus: cdma@plus, (puste)
Zobacz także wsparcie dla modemów GSM w OpenWrt.
Gotowe obrazy
Katalog do pobrania obrazów: http://ecco.selfip.net/gargoyle-pl/ar71xx/
Jest to polska wersja systemu Gargoyle ze wsparciem dla modemów przeznaczona dla routerów z rodziny ar71xx. Lista zmian oraz zawartość obrazów dostępna jest tutaj.

Obsługiwane są popularne modemy na USB, np. firmy Huawei lub Sierra Wireless. W razie problemów z połączeniem należy zapoznać z konfiguracją przedstawioną poniżej, a także ze wsparciem dla modemów GSM w OpenWrt oraz projektem 3ginfo. Dla modemów LTE warto zaznajomić się z opisem tych modemów.

Jeżeli modem ma slot na kartę mikro SD to można na nim wykonać extroot - rozszerzenie flash, o ile modem zostanie przełączony w odpowiedni tryb pracy.

Połączenie można "wyklikać" instalując Gargoyle PL. Przykładową konfigurację dla sieci Orange zaprezentowano poniżej:



Instalacja

USB
Oczywiście w systemie musi istnieć wsparcie dla usb, więc:

    # opkg update
    # opkg install kmod-usb-core kmod-usb2 kmod-usb-serial kmod-usb-serial-option usb-modeswitch usb-modeswitch-data libusb

W zależności od posiadanego modemu GSM niezbędne może okazać się także zainstalowanie pakietu kmod-usb-serial-sierrawireless (do urządzeń Sierra Wireless) lub kmod-hso (modemu firmy Option). Dla telefonów/smartfonów czy innych modemów podłączonych przez USB może okazać się niezbędne zainstalowanie pakietu kmod-usb-acm. Urządzeniem jest wtedy /dev/ttyACM0.
PPP
Do poprawnego działania połączenia ppp niezbędne jest jeszcze zainstalowanie pakietów kmod-ppp, ppp (powinny być w systemie) oraz chat i comgt

    # opkg install kmod-ppp ppp chat comgt

Pakiet comgt pierwotnie przeznaczony był dla modemów Option/Vodafone, ale zawiera uniwersalne skrypty do połączenia ppp, więc będzie użyteczny do tego celu.
Sprzęt
Pod podłączeniu modemu (telefonu Nokia E51 w tym przypadku) zostanie zapewne wyświetlony w logu (od odczytania przez logread) podobny komunikat do tego

    hub.c: new USB device 01:03.0-2, assigned address 3
    usb.c: USB device 3 (vend/prod 0x421/0x42) is not claimed by any active driver.

Urządzenie zostało podłączone, ale nie jest obsługiwane przez żaden sterownik. To normalna sprawa, bo możemy posiadać nowsze urządzenie. W takim razie należy w pliku /etc/modules.d/60-usb-serial zmienić wpis, żeby wyglądał tak

    usbserial vendor=0x421 product=0x42

gdzie wartości vendor oraz product należy oczywiście wpisać właściwe wg informacji pokazanej w logach.

Dla kernela 2.4 warto dodać jeszcze opcję maxSize - pomaga w uzyskaniu większych prędkości transmisji interfejsu.

Po zmianach należy zresetować ruter lub załadować moduł ponownie:

    # rmmod usbserial
    # insmod usbserial

i powinny pokazać się właściwe komunikaty

    usb.c: registered new driver serial
    usbserial.c: USB Serial support registered for Generic
    usbserial.c: Generic converter detected
    usbserial.c: Generic converter now attached to ttyUSB0 (or usb/tts/0 for devfs)
    usbserial.c: Generic converter detected
    usbserial.c: Generic converter now attached to ttyUSB1 (or usb/tts/1 for devfs)
    usbserial.c: USB Serial Driver core v1.4

Modem jest gotowy i dostępny. Dla kernela z serii będzie to interfejs /dev/ttyUSB0, dla kernela z serii 2.4 - /dev/usb/tts/0.

UWAGA: niektóre modemy/telefony wymagają specjalnej konfiguracji żeby uruchomić modem w nich. Nokia 6630 (Symbian 2nd) nie wymaga żadnych ustawień. Nokia E51 (Symbian 3th) po podłączeniu do usb wymaga wybrania opcji "PC Suite" a nie "Transfer danych" bo inaczej będzie widoczna jako zwykły dysk. Popularny modem Huawei E220 i inne tego producenta (E160, E169, E170, E180) wymagają po podłączeniu przestawienia w tryb modemu (program huaweiaktbbo lub usb_modeswitch). Inne modemy/telefony mogą wymagać innych ustawień. Po instalacji pakietu pakietu usb-modeswitch i usb-modeswitch-data nastąpi automatyczne przełączenie urządzenia w tryb modemu; jeżeli to nie nastąpiło - patrz rozdział poniżej.

Oczywiście - musimy mieć włączoną usługę pakietowej transmisji danych (GPRS) u operatora ale o tym, mam nadzieję, nie trzeba przypominać.
Konfiguracja
Jest już banalna - w pliku /etc/config/network należy zmienić sekcję wan lub dodać nową. Ja dodałem nową, bo chciałem aby to łącze było zapasowe a nie zastępowało mi moje podstawowe. Nowa sekcja powinna wyglądać tak:

    config interface HSDPA
        option proto 3g
        option service umts
        option device /dev/ttyUSB0
        option pincode 1234
        option apn internet

Opcja pincode można pominąć, jeżeli kod pin jest usunięty z karty. Jeżeli korzystamy z innego operatora, należy zmienić apn oraz dodać obsługę user/password. Np. dla Ery wygląda to następująco:

        option apn erainternet
        option username erainternet
        option password erainternet

Dla pozostałych operatorów należy odpowiednio zmienić apn, user oraz password.

Należy pamiętać o ustawieniu odpowiedniego urządzenia: /dev/ttyUSB0 dla kernela 2.6 lub /dev/usb/tts/0 dla kernela 2.4. Dla modułu kmod-usb-acm jest to natomiast /dev/ttyACM0.
W przypadku problemów w połączeniu można dodać opcję debug do ppp:

    option pppd_options debug

Firewall
Aby dodatkowo umożliwić korzystanie z tego połączenia komputerom podłączonym przez wifi lub kabel, należy dodać odpowiednie reguły do firewalla. UWAGA: jeżeli sekcja nazywa się wan NIE musisz tego robić. Wymagane jest tylko w przypadku innych nazw sekcji (jak HSDPA w tym przypadku). Do dopisania do /etc/config/firewall:

    config zone
        option name HSDPA
        option input REJECT
        option output ACCEPT 
        option forward REJECT
        option masq 1 

    config forwarding 
        option src lan
        option dest HSDPA

Uruchomienie
Ponieważ całość została skonfigurowana w nowej sekcji, aby uruchomić połączenie należy wydać tylko jedno polecenie:

    # ifup HSDPA

Po kilku sekundach połączenie powinno się ustanowić i ruter powinien normalnie udostępnić internet dla naszej sieci. Właśnie zrobiliśmy Router 3G!
Na konsoli mogą pojawić się rożne komunikaty, np

    SIM ready
    PIN set successfully

Aby zakończyć połączenie:

    # ifdown HSDPA

Testy
Jeżeli połączenie zostało zestawione powinien pojawić się interfejs 3g-HSDPA (lub o podobnej nazwie)

    root@OpenWrt:# ifconfig
    [...]
    3g-HSDPA Link encap:Point-to-Point Protocol  
        inet addr:77.112.61.221  P-t-P:10.6.6.6  Mask:255.255.255.255
        UP POINTOPOINT RUNNING NOARP MULTICAST  MTU:1500  Metric:1
        RX packets:746 errors:0 dropped:0 overruns:0 frame:0
        TX packets:4711 errors:0 dropped:0 overruns:0 carrier:0
        collisions:0 txqueuelen:3 
        RX bytes:41745 (40.7 KiB)  TX bytes:1712493 (1.6 MiB)

Powinna także zmienić się trasa domyślna na 3g-HSDPA

    root@OpenWrt:# route
    Kernel IP routing table
    Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
    10.6.6.6        *               255.255.255.255 UH    0      0        0 3g-HSDPA
    [...]
    default         10.6.6.6        0.0.0.0         UG    0      0        0 3g-HSDPA

Dla testów - wynik pingowania jednego z portali

    root@OpenWrt:# ping -c 10 eko.one.pl
    PING eko.one.pl (94.152.131.216): 56 data bytes
    64 bytes from 94.152.131.216: seq=0 ttl=59 time=353.604 ms
    64 bytes from 94.152.131.216: seq=1 ttl=59 time=373.311 ms
    64 bytes from 94.152.131.216: seq=2 ttl=59 time=373.101 ms
    64 bytes from 94.152.131.216: seq=3 ttl=59 time=382.899 ms
    64 bytes from 94.152.131.216: seq=4 ttl=59 time=352.661 ms
    64 bytes from 94.152.131.216: seq=5 ttl=59 time=372.452 ms
    64 bytes from 94.152.131.216: seq=6 ttl=59 time=342.253 ms
    64 bytes from 94.152.131.216: seq=7 ttl=59 time=372.029 ms
    64 bytes from 94.152.131.216: seq=8 ttl=59 time=371.806 ms
    64 bytes from 94.152.131.216: seq=9 ttl=59 time=361.605 ms

    --- eko.one.pl ping statistics ---
    10 packets transmitted, 10 packets received, 0% packet loss
    round-trip min/avg/max = 342.253/365.572/382.899 ms

Czas odpowiedzi ping będzie tym mniejszy, im nowocześniejszej technologii będziemy używać. Dla LTE możliwe jest osiągnięcie 10-12ms.
Wymuszenie trybu pracy
Najważniejsze to znalezienie wymaganego polecenia AT. Niektóre wymienione są na forum bez-kabli.pl; każdy typ modemu może wymagać innych poleceń. Po ustaleniu polecenia wymuszenie danego trybu pracy można wykonać na kilka sposobów. W podanych przykładach podano wymuszenie trybu 3G dla modemów Huawei.
Uwaga ponownie: opcja service w konfiguracji to nie jest wymuszenie trybu pracy! To tylko przełącznik CDMA/GSM. Ma więc zostać umts, niezależnie od tego czy mamy edge czy lte. Zmienia się to tylko dla modemów CDMA.
UWAGA: w najnowszych builach Gargoyle PL wymuszenie dostępnie jest jako jedna z opcji konfiguracyjnych w GUI - obsługuje modemu Option, Novatel, Huawei, lecz nie wszystkie modele urządzeń to obsługują.
plik chat

    # vi /etc/chatscripts/3g.chat

i dodajemy odpowiednie polecenie, np może to wyglądać tak:

    ABORT BUSY
    ABORT 'NO CARRIER'
    ABORT ERROR
    REPORT CONNECT
    TIMEOUT 10
    "" "AT&F"
    OK "ATE1"
    OK "AT^SYSCFG=14,2,3FFFFFFF,2,4"   <-- tu dodano linię
    OK 'AT+CGDCONT=1,"IP","$USE_APN"'
    SAY "Calling UMTS/GPRS"
    TIMEOUT 30
    OK "ATD*99***1#"
    CONNECT ' '

ręczne podanie polecenie
Przez wpisanie tego polecenie np. do /etc/rc.local, który uruchamia się przy starcie systemu

    MODE="AT^SYSCFG=14,2,3FFFFFFF,2,4" gcom -d /dev/ttyUSB0 -s /etc/gcom/setmode.gcom

jako pierwszą linię w pliku /etc/rc.local.

Oraz inny sposób, które zadziała tylko w moich obrazach Backfire (bo są przerobione skrypty)
konfiguracja sieci

    # uci set network.wan.mode="AT^SYSCFG=14,2,3FFFFFFF,2,4"
    # uci commit network

Przełączenie urządzenia w tryb modemu
W niektórych przypadkach po podłączeniu modem działa jako wirtualny CDROM, zawierający sterowniki dla Windows, MacOS lub Linuksa. Aby przełączyć modem w pożądany tryb należy uruchomić program usb_modeswitch z odpowiednimi parametrami.

Po instalacji usb-modeswitch oraz pakietu usb-modeswitch-data zbędne staje się ręczne modyfikowanie jakichkolwiek plików. Pakiety te zawierają już cały mechanizm automatycznie wykrywający i przełączający znane modemy. Poniższy tekst do końca akapitu został pozostawiony jedynie w celach informacyjnych.

Najpierw jednak należy znaleźć identyfikator urządzenia. Polecenie:

    # cat /proc/bus/usb/devices 

wyświetli informację o połączonych urządzeniach USB. W przypadku modemu E160 interesujące są linie

    P:  Vendor=12d1 ProdID=1003 Rev= 0.00
    S:  Manufacturer=HUAWEI Technology
    S:  Product=HUAWEI Mobile

Modem ukrywa się pod identyfikatorem Vendor=12d1/ProdID=1003. Przełączenie modemu to wywołanie programu usb_modeswitch z odpowiednimi parametrami:

    # usb_modeswitch -v 12d1 -p 1003 -c /etc/usb_modeswitch.d/12d1:1003

Gdzie 12d1:1003 to pobrane wcześniej VendorID/ProdID

Modem można też przełączyć "na stałe". Dla modemów Huawei wykonuje się to poleceniem AT^U2DIAG (zobacz jakie parametry przyjmuje: http://3g-modem.wetpaint.com/page/Huawei+AT-commands#fbid=Y0St-8SoSZa)

Odczytywanie smsów
Patrz wysyłanie i odbieranie wiadomości SMS
Odczyt siły sygnału

    # echo -e "AT+CSQ\r" >/dev/ttyUSB2 && grep -m1 "CSQ:" /dev/ttyUSB2

lub

    # gcom -d /dev/ttyUSB2 sig

lub patrz projekt 3ginfo.
Automatyczny restart połączenia
Generalnie po zerwaniu połączenia ppp samoczynnie ponawia próbę i łączy się ponownie. Bywają jednak sytuacje, kiedy modem połączenie trzyma, natomiast nie ma możliwości przesłania żadnego pakietu, nawet ping nie przechodzi.
Tworzymy skrypt o nazwie tester.sh w katalogu /bin

    # touch /bin/tester.sh
    # chmod 755 /bin/tester.sh

o następującej zawartości

    #!/bin/sh
    if ! ping -q -c 1 -W 10 8.8.8.8 > /dev/null; then
        (ifup wan) &
    fi

Skrypt pinguje adres 8.8.8.8 (dns od google) - jeżeli nie dostanie odpowiedzi przez 10s to wznawia połączenie na interfejsie wan.
Następnie można dodać wywołanie tego skryptu do crona i uruchamiamy go:

    # /etc/init.d/cron stop
    # echo "*/2 * * * * /bin/tester.sh" >> /etc/crontabs/root
    # /etc/init.d/cron enable
    # /etc/init.d/cron start

Od tej pory co 2 minuty nastąpi wywołanie skryptu. Jeżeli brama nie odpowie w ciągu 10s - nastąpi wznowienie połączenia.
Podtrzymania połączenia HSPA+
Dodajemy do pliku /etc/rc.local jako pierwszą linię:

    (while true; do ping google.com > /dev/null; sleep 3; done) &

Odblokowanie wszystkich częstotliwości modemu Huawei
Problem z modemami (zwłaszcza z Play) opisany jest w wątku forum bez-kabli.pl. Pod OpenWrt sprowadza się to do wydania polecenia:

    # ifdown wan
    # echo "AT^SYSCFG=2,2,3FFFFFFF,1,2" > /dev/ttyUSB0

Generalnie to polecenie służy do odblokowania wszystkich częstotliwości oraz wybranie 3G jako preferowanego, więc jest jest przydatne dla większości modemów Huawei.
Opłaty
Nic nie ma za darmo - opłaty za połączenie zależne są od stawki danego operatora. W chwili pisania tego poradnika w mojej taryfie (operator: Plus) koszt to ok 12gr za 100KB przesłanych danych. Można wykorzystać kartę prepaidową , wtedy koszt spada do 1gr za 100KB. Można wykupić specjalny pakiet na transmisję danych - np. 100MB za ok 5zł lub dokupić iPlusa i mieć limit 8GB za 60zł. Stawki u różnych operatorów znacznie się różnią, więc należy wybrać najkorzystniejszą i o najlepszym zasięgu/technologi w miejscu wykorzystania.
Serwery na łączu 3G
Wszyscy polscy operatorzy blokują ruch przychodzący z zewnątrz, więc mając łącze przez modem 3G nie ma da się na nim postawić serwera WWW czy dostać się do routera przez ssh, mimo że dostajemy adres IP z puli publicznej. Aby to było możliwe należy wykupić odpowiednią usługę w planach abonamentowych; w preapidach nie jest to w ogóle możliwe.
Zakończenie
Można zrobić automatyzację - np. uruchamiać/kończyć połączenie w przypadku naciśnięcia przycisku na obudowie.