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
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'
- 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)
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'
- Sferia: sferia, sferia
- Orange: cdma@orange, orange
- Nordisk Polska: CDMA, CDMA
- Plus: cdma@plus, (puste)
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
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
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.
usbserial vendor=0x421 product=0x42
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
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
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
option apn erainternet
option username erainternet
option password erainternet
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
Na konsoli mogą pojawić się rożne komunikaty, np
SIM ready
PIN set successfully
# 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)
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
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
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
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
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
P: Vendor=12d1 ProdID=1003 Rev= 0.00
S: Manufacturer=HUAWEI Technology
S: Product=HUAWEI Mobile
# usb_modeswitch -v 12d1 -p 1003 -c /etc/usb_modeswitch.d/12d1:1003
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 SMSOdczyt siły sygnału
# echo -e "AT+CSQ\r" >/dev/ttyUSB2 && grep -m1 "CSQ:" /dev/ttyUSB2
# gcom -d /dev/ttyUSB2 sig
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
#!/bin/sh
if ! ping -q -c 1 -W 10 8.8.8.8 > /dev/null; then
(ifup wan) &
fi
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
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
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.