WwanHotspot: maintain allways up a dual wifi config, Access Point and HotSpot client
Gsm-модем и отправление смс в openwrt | hardware solutions for openwrt
Долго и без дела валялся у меня дома usb-модем. Я думаю, у многих из вас он тоже есть. Про процесс прошивки Gsm-модема ZTE MF627 не буду здесь расписывать, т.к. этой информации достаточно в интернете. Честно говоря, поражает простота, с которой решается наша задача… Давайте посмотрим, как это делается!
На этапе конфигурации OpenWrt нужно отметить следующие модули:
Kernel modules:
Video Support:
<M> kmod-usb-serial
<M> kmod-usb-serial-option
<M> kmod-usb-serial-wwan
У меня была проблема с установкой модуля kmod-usb-serial-wwan. А именно: dmesg после загрузки выдавал следующее:
Решается она правкой файла ‘openWrt/package/kernel/modules/usb.mk’.
Добавляем раздел ‘kmod-usb-serial-wwan’
Всё это описано вот здесь: . Большое спасибо автору.
Устанавливаем:
Подключаем Gsm-модем и смотрим вывод dmesg:
Gsm-модем определился. Можно начать с ним работать. Как видно из лога, создалось три устройства ttyUSB: интерфейс доступа к sd-карте,интерфейс для настройки устройства,интерфейс, через который идет обмен данными. Нам нужен интерфейс обмена данными, у меня это ttyUSB1.
Определить, какой из трех интерфейсов нам нужен, очень просто. Подключаем Gsm-модем к компьютеру, запускаем терминал на скорости 19200 и вводим команду ati. Модем должен откликнуться.
Для отправки смс будем использовать утилиту smstools. На момент написания этой статьи она не входит в стандартные утилиты OpenWrt. Поэтому, скачиваем исходники отсюда:
и разархивируем.
Собрать нужно её, используя кросс-компилятор из OpenWrt. Для этого в файле smstools3/src/Makefile нужно добавить строчку:
CC=openwrt/staging_dir/toolchain-mipsel_gcc-4.3.3 cs_uClibc-0.9.30.1/bin/mipsel-openwrt-linux-gcc
т. е. указать путь до кросс-компилятора.
Запускаем make. В smstools3/src/ получаем файл демона sms-сервера smsd, который копируем на файловую систему в /usr/sbin. Заодно в директорию /etc положим файл конфигурации smsd.conf, который необходим для запуска smsd.
Загружаемся. Также для работы smsd нужно создать следующие директории (используя mkdir, создадим их):
/var/log/smstools
/var/spool/sms/checked/
/var/spool/sms/outgoing/
/var/spool/sms/incoming/
Запускаем sms-сервер:
Смотрим лог и видим, что Gsm-модем проинициализировался:
Можно отправлять смс. Смс отпраляются автоматически после того, как файл с смс будет помещен в директорию /var/spool/sms/outgoing/
Создадим файл send_sms.sms и поместим в эту директорию:
Смотрим лог и видим, что сервер обнаружил новое неотправленное смс, приступил к его отпаравке и после отправки удалил файл:
tail -f /var/log/smstools/smsd.log
1970-01-01 00:03:54,5, GSM1: Waiting for messages to send… 1970-01-01 00:05:23,5, smsd: Moved file /var/spool/sms/outgoing/send_sms.sms to /var/spool/sms/checked 1970-01-01 00:05:23,6, GSM1: I have to send 1 short message for /var/spool/sms/checked/send_sms.sms 1970-01-01 00:05:23,6, GSM1: Sending SMS from to 79161737465 1970-01-01 00:05:23,6, GSM1: Checking if modem is ready 1970-01-01 00:05:24,7, GSM1: -> AT 1970-01-01 00:05:24,7, GSM1: Command is sent, waiting for the answer 1970-01-01 00:05:24,7, GSM1: <- OK 1970-01-01 00:05:24,6, GSM1: Pre-initializing modem 1970-01-01 00:05:24,7, GSM1: -> ATE0 CMEE=1; CREG=2 1970-01-01 00:05:27,6, GSM1: Signal Strength Indicator: (13,99) -87 dBm (Workable), Bit Error Rate: not known or not detectable 1970-01-01 00:05:27,6, GSM1: Checking if Modem is registered to the network 1970-01-01 00:05:27,7, GSM1: -> AT CREG? 1970-01-01 00:05:28,7, GSM1: Command is sent, waiting for the answer 1970-01-01 00:05:28,7, GSM1: <- CREG: 0,1 OK 1970-01-01 00:05:28,6, GSM1: Modem is registered to the network 1970-01-01 00:05:28,6, GSM1: Selecting PDU mode 1970-01-01 00:05:29,7, GSM1: -> AT CMGF=0 1970-01-01 00:05:29,7, GSM1: Command is sent, waiting for the answer 1970-01-01 00:05:30,7, GSM1: <- ZUSIMR:2 OK 1970-01-01 00:05:30,6, GSM1: Changing SMSC 1970-01-01 00:05:30,7, GSM1: -> AT CSCA=” 79168960220″ 1970-01-01 00:05:32,7, GSM1: Command is sent, waiting for the answer 1970-01-01 00:05:32,7, GSM1: <- ZUSIMR:2 OK 1970-01-01 00:05:32,7, GSM1: -> AT CMGS=29 1970-01-01 00:05:33,7, GSM1: Command is sent, waiting for the answer 1970-01-01 00:05:33,7, GSM1: <- > 1970-01-01 00:05:33,7, GSM1: -> 0011000B919711257733F30000FF115079DA5EA683D27A50FB4D2EB7C321# 1970-01-01 00:05:38,7, GSM1: Command is sent, waiting for the answer 1970-01-01 00:05:42,7, GSM1: <- ZUSIMR:2 ZUSIMR:2 ZUSIMR:2 ZUSIMR:2 CMGS: 174 OK 1970-01-01 00:05:42,5, GSM1: SMS sent, Message_id: 174, To: 79161737465, sending time 19 sec. 1970-01-01 00:05:42,6, GSM1: Deleted file /var/spool/sms/checked/send_sms.sms |
Ieee 802.1x md5 авторизация на openwrt
В последнее время у провайдеров домашних сетей среди множества способов авторизации стал появляться способ с использованием стандарта IEEE 802.1x. Работает протокол предельно просто: пока клиент не идентифицировал себя, на порту бегают только 802.1x пакеты. В Windows можно настроить проверку подлинности в несколько кликов, но чаще дома установлен беспроводной машрутизатор, который раздает интернет. В этом топике пойдет речь о том, как наладить IEEE 802.1x MD5 авторизацию на OpenWrt совместимом устройстве.
Cуществует море способов провести установку. Как правило, всё сводится к тому, что загруженный с сайта OpenWrt образ прошивки заливается через веб-интерфейс маршрутизатора, подробнее об этом можно почитать на вышеупомянутом сайте. Предположим, что у нас уже есть устройство с установленным OpenWrt: в качестве жертвы будет использоваться Linksys WRT54GL v1.1 и прошивка Kamikaze 8.09.2.
Итак:
- Загружаем прошивку и прошиваем наш роутер.
- Заходим на него в первый раз по telnet root@192.168.1.1 и меняем пароль командой passwd, после чего telnet будет отключен, а ssh включен.
- Нам необходимо установить «особенный» wpa_supplicant, с поддержкой драйвера roboswitch:
ssh root@192.168.1.1
cd /tmp
opkg update
wget www.liacs.nl/~jwitteve/openwrt/8.09/brcm-2.4/packages/wpa-supplicant_0.6.9-2_mipsel.ipk
opkg install wpa-supplicant_0.6.9-2_mipsel.ipk - Создаем конфигурационный файл для wpa_supplicant, например /etc/config/wpa_supplicant.conf:
ap_scan=0 network={ ssid="" key_mgmt=IEEE8021X eap=MD5 identity="логин" password="пароль" }
Кроме MD5 бывают и другие способы проверки подлинности, например TTLS PAP, в случае с которым требуются сертификаты. Подробнее о других способах можно прочитать, например, в man wpa_supplicant
- Теперь можно сделать тестовый запуск. В случае с WRT54GL провод провайдера воткнут в WAN порт, который в системе значится как интерфейс eth0.1:
# wpa_supplicant -dd -D roboswitch -c /etc/config/wpa_supplicant.conf -i eth0.1
Initializing interface 'eth0.1' conf '/etc/config/wpa_supplicant.conf' driver 'roboswitch' ctrl_interface 'N/A' bridge 'N/A'
Configuration file '/etc/config/wpa_supplicant.conf' -> '/etc/config/wpa_supplicant.conf'
Reading configuration file '/etc/config/wpa_supplicant.conf'
В случае, если всё хорошо, мы увидим:...
EAPOL: SUPP_PAE entering state AUTHENTICATED
EAPOL: Supplicant port status: Authorized
...
EAPOL authentication completed successfully
И теперь можно получить адрес:# udhcpc -i eth0.1
udhcpc (v1.15.3) started
Sending discover...
Sending select for x.x.x.x...
Lease of x.x.x.x obtained, lease time 21600
И это еще не всё, потому что надо сделать, чтобы всё работало автомагически.
Создаем init скрипт /etc/init.d/wpa_signin:
#!/bin/sh /etc/rc.common START=99 start() { /usr/sbin/wpa_supplicant -i eth0.1 -D roboswitch -B -c /etc/config/wpa_supplicant.conf }
Не забываем включить его:
# /etc/init.d/wpa_signin enable
Ссылки
Send sms or email using 3g/gsm modem
This method is fairly simple-minded, and uses only the serial /dev/ttyUSB0 port and “AT” commands to send an SMS message.
Almost any OpenWrt version should work, and any OpenWrt device which supports USB. It has been tested n a WL-500gPv2, a WL-520Gu, and a MPR-A8 (Ralink-based Hame A1 clone).
One modem was from dx.com, 7.2M HSDPA 3G SIM Card USB 2.0 Wireless Modem Adapter with TF Card Slot, item 80032. This is a Huawei E169 clone.
If you have device like WL-520Gu that has little onboard flash then you need to built my own OpenWrt firmware image with following modules (usually installing them via opkg installing fails due to for lack of memory):
kmod-usb2 kmod-usb-ohci kmod-usb-serial kmod-usb-serial-option usbutils usb-modeswitch kmod-usb-storage kmod-scsi-core kmod-scsi-cdrom kmod-scsi-generic picocom
When I plugged in the usb modem, it detected scsi drives and 4 tty devices–/dev/ttyUSB0 through ttyUSB3.
I connected to the modem using picocom:
picocom -b 9600 -f n -p n -d 8 -r /dev/ttyUSB0
Typing “AT<Enter>” got the response, “OK”
I then sent a message with the following commands:
AT CMGF=1 [set pdu mode to text] AT CMGS=" 12345678900" [use a valid cell phone number] Type some message<Ctrl-z> [type a message terminated with <Ctrl-z>]
After a short while I got a response, “ CMGS: 18”
That was all there was to it with this device.
Mode Switching
With the WL-500gPv2 it was harder. The ttyUSB devices were not detected. This is because many (most?) cell modems initiate as scsi devices, which, in Windows, automatically load a driver and then switches mode to enable the modem. In linux, you have to perform the mode switch. There’s a program for that, usb-modeswitch, and also usb-modeswitch-data. On the WL-500gPv2, I needed to use lsusb (from usbutils) to get the Vendor # and product ID. You then execute “usb-modeswitch -v nnnn -p nnnn”. After doing this, dmesg showed the ttyUSB devices 0-3, and I was able to proceed as above.
The modeswitch process can apparently be more complicated for other devices. Various web sites explain it.
MPR-A8–modeswitch not needed
With the MPR-A8, with self-compiled trunk, watching on serial console, the scsi drives were recognized first, and then, after 30m seconds or so, the 4 ttyUSB devices. I again signed on to /dev/ttyUSB0 (with microcom), and sent an SMS message using the commands shown above.
Sending Email
With my provider, T-Mobile, you can also send an email with the address number of “500” with these commands (after “AT CMGF=1”):
AT CMGS="500" myAddress@myProvider.com/Subject2/sending text.<Ctrl z>
The subject is within “/” or “#”.