Malinowy hotspot
Wspominałem już kilkukrotnie o udostępnieniu internetu z 3G poprzez kartę WiFi wpiętą do Raspberry Pi. Próbowałem to zrobić już kilka razu, ale zawsze coś nie działało.
W internecie jest całkiem sporo tutoriali jak udostępnić internet poprzez WiFi. Problem w tym, że żadem nie działa. Sprawdziłem kilkanaście, z tym z elinux.org na czele. Znalazłem w końcu przyczynę tych problemów.
Wszystkie opisy robione są dla kart WiFi obsługiwanych przez sterownik nl80211, a moja karta(Edimax EW-7811Un) korzysta z Realteka RTL8188CUS.
Poniżej opiszę instalację dla obu typów adapterów WiFi, sposób jak sprawdzić z jakiego sterownika korzysta nasza karta oraz jak ustawić zabezpieczenie WPA2 dla naszej sieci bezprzewodowej.
Pierwsza część instalacji jest identyczna w przypadku każdego typu kart WiFi. Różnice pojawią się pod koniec, ale o tym później. Zaczynamy od podpięcia do Raspberry Pi kabela ethernet oraz adapter WiFi. Łączymy się przez ssh z komputera podpiętego przez kabel, lub bezpośrednio, to znaczy podpinamy monitor, i klawiaturę.
sudo apt-get update && sudo apt-get upgrade
sudo apt-get install hostapd udhcpd
sudo nano /etc/udhcpd.conf - w pliku konfiguracyjnym zmieniamy istniejące wpisy na te podane poniżej. Standardowo podane są tam inne adresy IP, ale użyjemy takich "normalniejszych". Jeśli nasza obecna sieć WiFi używa adresów zaczynających się od 192.168.5., to zmieniamy 5 na jakąś inną liczbę.
start 192.168.5.2 end 192.168.5.20 # Zakres Adresow IP moze byc o wiele wiekszy. interface wlan0 # Domyslnie eth0, czyli kabel. Zmieniamy na wlan0. remaining yes # usuwamy hash, ktory jest przed remaining. #pod sekcja Examles opt dns 8.8.8.8 4.2.2.2 # musimy podac serwer DNS, uzyjemy tych od Google. opt subnet 255.255.255.0 opt router 192.168.5.1 # Adres IP RPi w sieci WiFi. opt wins 192.168.5.1 # Ten sam adres, ktory podalismy powyzej. opt lease 864000 # Ten wpis powinien byc poprawy.
sudo nano /etc/default/udhcpd - zmieniamy DHCPD_ENABLED="no" na #DHCPD_ENABLED="no".
sudo ifconfig wlan0 192.168.5.1 - zmieniamy IP Raspberry Pi w sieci WiFi. Podajemy ten sam adres, który wpisaliśmy wcześniej w pliku /etc/udhcpd.conf.
sudo nano /etc/network/interfaces - zmieniamy iface wlan0 inet dhcp na
iface wlan0 inet static address 192.168.5.1 netmask 255.255.255.0
Tutaj również wpisujemy ten sam adres IP, którego użyliśmy wcześniej. Dodatkowo w tym samym pliku musimy zmienić
allow-hotplug wlan0 wpa-roam /etc/wpa_supplicant/wpa_supplicant.conf iface default inet manual
na
#allow-hotplug wlan0 #wpa-roam /etc/wpa_supplicant/wpa_supplicant.conf #iface default inet dhcp
sudo nano /etc/hostapd/hostapd.conf - tworzymy plik z nazwą naszej sieci i podstawowymi ustawieniami. RPi_WiFi to nazwa naszej sieci. channel to kanał na którym ma działać. Należy ustawić inny niż ten, z którego normalnie korzystamy. Jeśli ustawimy takie same, mogą się zakłócać i mieć o wiele mniejszy zasięg.
interface=wlan0 driver=nl80211 ssid=RPi_WiFi hw_mode=g channel=6 auth_algs=1 wmm_enabled=0
sudo nano /etc/default/hostapd - zmieniamy #DAEMON_CONF="" na DAEMON_CONF="/etc/hostapd/hostapd.conf"
sudo nano /etc/sysctl.conf - na końcu pliku dodajemy net.ipv4.ip_forward=1
sudo iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
sudo iptables -A FORWARD -i eth0 -o wlan0 -m state --state RELATED,ESTABLISHED -j ACCEPT
sudo iptables -A FORWARD -i wlan0 -o eth0 -j ACCEPT
sudo sh -c "iptables-save > /etc/iptables.ipv4.nat" - dodajemy nasze zmiany do programu sterującego filtrem pakietów (głównie używanym jako zapora sieciowa bądź NAT).
sudo nano /etc/network/interfaces - dodajemy na końcu pliku up iptables-restore < /etc/iptables.ipv4.nat
sudo service hostapd start - odpalamy nasz hotspot. Jeśli nasza karta WiFi używa innego sterownika niż nl80211, zobaczymy w tym momencie błąd. Nie przejmujemy się nim i kontynuujemy instalację.
sudo service udhcpd start - uruchamiamy serwer DHCP.
sudo update-rc.d hostapd enable
sudo update-rc.d udhcpd enable - dodajemy oba serwery do procesów uruchamiamych przy starcie systemu.
Jeśli nasza karta WiFi działa w oparciu o sterownik nl80211, w tym momencie mamy już wszystko gotowe i możemy przejść na koniec tego wpisu, gdzie znajduje się instrukcja jak ustawić hasło WPA2 dla naszej sieci. Jeśli jednak przy uruchamianiu hostapd pojawił się błąd musimy zrobić jeszcze kilka rzeczy.
lsusb - sprawdzamy z jakiego sterownika korzysta nasza karta WiFi. W moim wypadku jest to Realtek RTL8188CUS(mam adapter WiFi Edimax EW-7811Un).
sudo apt-get autoremove hostapd - w przypadku Realtek'a musimy użyć specjalnej wersji aplikacji odpowiedzialnej za działanie naszego hotspotu.
sudo apt-get install git - najprawdopodobniej mamy już zainstalowanego Git'a, ale dla pewności możemy to sprawdzić. Bez niego nie przejdziemy dalej.
git clone https://github.com/segersjens/RTL8188-hostapd.git - pobieramy wymagane pliki.
cd RTL8188-hostapd/hostapd
sudo make - kompilujemy wymagane pakiety. Całość trwa jakieś 6-7 minut.
sudo make install
sudo nano /etc/hostapd/hostapd.conf - zmieniamy ssid=wifi na ssid=RPi_WiFi lub dowolną inną nazwę. Zmieniamy również kanał z channel=1 na jakiś inny, np. channel=6.
sudo service hostapd restart - teraz serwer powinien się zrestartować i uruchomić poprawnie.
sudo reboot - gotowe. Teraz powinniśmy widzieć naszą sieć WiFi na innych urządzeniach i mieć możliwość podłączenia się do niej.
Musimy pamiętać o ustawieniu adresu IP oraz wszystkich wymaganych informacji w urządzeniu z którego chcemy się połączyć.
WPA2
Teraz gdy wszystko już działa. Internet z kabla ethernet jest udostępniany przez WiFi możemy zabezpieczyć naszą sieć.
sudo cp /etc/hostapd/hostapd.conf /etc/hostapd/hostapd.conf.old - tworzymy kopię zapasową pliku konfiguracyjnego. Tak na wszelki wypadek.
sudo nano /etc/hostapd/hostapd.conf - edytujemy plik i dopisujemy w nim:
macaddr_acl=0 auth_algs=1 ignore_broadcast_ssid=0 wpa=2 wpa_passphrase=Nasze_haslo wpa_key_mgmt=WPA-PSK wpa_pairwise=TKIP rsn_pairwise=CCMP
Oczywiście w miejsce Nasze_haslo wpisujemy hasło, którego będziemy używać w celu łączenia się z naszą "malinową" siecią WiFi.
sudo service hostapd restart - restartujemy hotspot i gotowe.

















