Raspberry Pi Wireless 3g Router

Здравейте,

Днес ще споделя как през уикенда намерих малко свободно време и си направих Raspberry pi wireless 3g router – или намерих приложение на едното ми излишно Pi 🙂

Raspberry Pi Wireless 3g Router

Първо ще кажа че има много по-лесни начини да имате 3G рутер – продават се сполучливи модели на Tp-link , но аз исках да си го направя сам 🙂

За целта използвах Raspberry Pi модел B+ с 5.25 волта и 2 амперово захранване , Wifi Nano USB Dongle и usb 3G модем от Mtel

Инсталирах raspbian и след това сложих 3G модема и Wifi адаптера. Уверих се че PI-то ги засича :


pirouter:~# lsusb
Bus 001 Device 007: ID 0424:9514 Standard Microsystems Corp.
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 001 Device 008: ID 0424:ec00 Standard Microsystems Corp.
Bus 001 Device 009: ID 148f:5370 Ralink Technology, Corp. RT5370 Wireless Adapter
Bus 001 Device 010: ID 12d1:15ce Huawei Technologies Co., Ltd.
pirouter:~#

От тук нататък следва и конфигурирането на софтуера:
sudo apt-get install sg3-utils ppp hostapd isc-dhcpd-server

След това се изпълнява това :
/usr/bin/sg_raw /dev/sr0 11 06 20 00 00 00 00 00 01 00

Следва изтеглянето на sakis3g – програмата през която ще вържа 3G модема към оператора ми – в моя случай – Mtel.
wget "http://downloads.sourceforge.net/project/vim-n4n0/sakis3g.tar.gz?r=http%3A%2F%2Fsourceforge.net%2Fprojects%2Fvim-n4n0%2Ffiles%2F&ts=1363537696&use_mirror=tene~t" -O sakis3g.tar.gz

Разархивирам и продължавам напред:
sudo tar -xzvf sakis36.tar.gz
sudo chmod +x sakis3g
./sakis3g --interactive

След първото стартиране на sakis3g с опцията –interactive , ще ни излезе меню за конфигурирането му. Тук са важно да изберем модема си, да добавим APN адреса на сървъра ни , в моя случай : Inet-gprs.mtel.bg , APN потребителя и паролата – може да ги вземете като се обадите на вашият оператор.
Ако всичко е ок, трябва да излезе съобщение че сме се свързали успешно към оператора ни:
E3131 connected to Mtel (28401).
От тук следва бърза проверка : ping google.com – всичко е ок! 🙂

Аз си направих скрипт който да ми служи за автоматичното свързване на модема към мрежата. Кръстих го 3g.sh и го сложих в /root/
Ето и скрипта:

#!/bin/bash
/usr/bin/sg_raw /dev/sr0 11 06 20 00 00 00 00 00 01 00
sudo /root/sakis3g connect --console APN='CUSTOM_APN' USBINTERFACE='0' USBDRIVER='option' USBMODEM='12d1:15b3' OTHER='USBMODEM' MODEM='OTHER' CUSTOM_APN='Inet-gprs.mtel.bg' APN_USER='ime' APN_PASS='parola'

След като го направих стартиращ чрез chmod +x /root/3g.sh го добавих в /etc/rc.local за да се пуска сам след рестарт.

Следва конфигурирането на wireless-a. В /etc/hostapd/hostapd.conf добавих следните редове:

interface=wlan0
driver=nl80211
ssid=RasPi
hw_mode=g
channel=1
wpa=2
wpa_passphrase=pass123
wpa_key_mgmt=WPA-PSK
wpa_pairwise=CCMP
rsn_pairwise=CCMP

beacon_int=100
auth_algs=3
wmm_enabled=1


След това стартирах hostapd чрез :
hostapd /etc/hostapd/hostapd.conf

Проверих безжичните мрежи и видях новата мрежа RasPi.

Последната настройка е конфигурирането на DHCP и маскирането на интерфейса за да тръгне интернета.
/etc/dhcp/dhcpd.conf файла ми изглежда по следния начин:

# wlan0:
subnet 10.10.0.0 netmask 255.255.255.0 {
range 10.10.0.25 10.10.0.50;
option domain-name-servers 8.8.8.8, 8.8.4.4;
option routers 10.10.0.1;
interface wlan0;
}

Следва стартиране на демона DHCP : /etc/init.d/isc-dhcp-server start

Последно и най-важно – маскирам ppp0 и пускам ip_forward
В /etc/sysctl.conf добавих : net.ipv4.ip_forward=1
И изпълних : sysctl -p

Накрая любимият ми iptables 🙂

iptables -t nat -A POSTROUTING -o ppp0 -j MASQUERADE
iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE

Добавям и eth0 че ако реша да ползвам нета през лан порта да го има и от там 🙂
Накрая /etc/rc.local изглежда така:
/root/3g.sh
sleep 30
iptables -t nat -A POSTROUTING -o ppp0 -j MASQUERADE
iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
hostapd /etc/hostapd/hostapd.conf
exit 0

За всеки случай рестартирах PI-то за да се уверя че всичко е ок. И воала , имаме си Raspberry Pi Wireless 3g Router

TODO:

В момента nano стикчето върши работа. Като го тествах из апартамента и обхвата беше колкото на Buffalo-то , но идеята ми е да го използвам на вилата, и да има обхват из двора – може би ще трябва да му сменя Wifi-то с такова с външна антена. Трябва да се тества 🙂

PS. Най-вероятно тока няма да стигна на така направената схема и сигурно ще трябва да добавя USB адаптер с външно захранване.

PS2. На пръв поглед всичко е ок, но забелязах че или 3G модема се разкача, или wireless-a спира. Като гледам самите процеси са спрели , тъй че ще сложа един monit койго да ги гледа дали работят и ако не да ги пуска 🙂

-> Разбрах от къде идва проблема – оказа се че има пуснат демон ifplugd който явно следи за активността на интерфейсите и ги спира при липса на активност – много тъпо! Ето лог :


/var/log/syslog.1:Apr  6 16:10:50 pirouter ifplugd(wlan0)[1676]: Link beat detected.
/var/log/syslog.1:Apr  6 16:23:52 pirouter ifplugd(eth0)[1680]: Link beat lost.
/var/log/syslog.1:Apr  6 16:23:52 pirouter ifplugd(wlan0)[1676]: Link beat lost.
/var/log/syslog.1:Apr  6 16:23:53 pirouter ifplugd(wwan0)[2687]: Link beat lost.

 

 

Ето и как изглежда рутерчето на живо :