Raspberry Pi Wireless 3g Router
Здравейте,
Днес ще споделя как през уикенда намерих малко свободно време и си направих Raspberry pi wireless 3g router – или намерих приложение на едното ми излишно Pi 🙂
Първо ще кажа че има много по-лесни начини да имате 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.
Ето и как изглежда рутерчето на живо :