Przy okazji prezentacji programu nettemp na FreeMake w Gdyni musiałem dać zdalny dostęp do Raspberry Pi po WiFi. Zabranie routera ze sobą było by najlepszym wyjściem. Podłączył bym RPi do routera i każdy miał by dostęp do strony www z nettempem. Pojawił się jeden problem rozwiązywanie nazw. Na zwykłym routerze nie postawie prostego DNS a na wgrywanie OpenWRT do mojego WR1043N nie miałem czasu. Wtedy wpadłem na pomysł że przecież zrobię z RPi access pointa.
O co chodzi z nazwami?
Rozwiązywanie nazw w moim przypadku było by o tyle fajne że nie musiałbym każdemu zainteresowanemu podawać adresu IP, loginu i hasła i generalnie tłumaczyć. Tylko podać dane: SSID: nettemppl, hasło: nettemppl, www: nettemp lub nettemppl lub nettemp.pl. A żeby mieć taki miały DNS który by obsłużył wszystkie te nazwy, wystarczyło zainstalować DNSmasq który też posiada funkcje DHCP. Czyli wszystko się idealnie złożyło.
Karta WiFi
Na stanie miałem dwie karty wifi na USB TPlink TL-WN821N (RTL8188CUS) które kurzą się od długiego czasu więc nie musiałem szukać odpowiedniego sprzętu.
Install
Mam wszystko pomysł, kartę wifi i Raspberry Pi. Trzeba zainstalować soft i pozmieniać parę konfigów. Zaraz pokaże że zrobienie zdalnego dostępu do Raspberry Pi po wifi to nie taka ciężka sprawa.
Na początek aktualizacja repozytoriów i instalacja hostapd odpowiedzialnego za funkcję accesspointa i DNSmasq dostarczającego funkcję serwera DHCP i DNS.
apt-get update apt-get -y install hostapd dnsmasq
Wlan0
Czas na zmianę /etc/network/interfaces, trzeba wyłączyć trzy linie dotyczące wlan0 i wstawić nowe ze stałym adresem IP. Poniższe linie można od razu wklejać do terminala nie edytując pliku. Tak jest łatwiej ;)
sed -i 's/iface wlan0 inet manual/#iface wlan0 inet manual/g' /etc/network/interfaces sed -i 's/wpa-roam \/etc\/wpa_supplicant\/wpa_supplicant.conf/#wpa-roam \/etc\/wpa_supplicant\/wpa_supplicant.conf/g' /etc/network/interfaces sed -i 's/iface default inet dhcp/#iface default inet dhcp/g' /etc/network/interfaces sed -i '$aiface wlan0 inet static' /etc/network/interfaces sed -i '$aaddress 192.168.0.1' /etc/network/interfaces sed -i '$anetmask 255.255.255.0' /etc/network/interfaces
Ważna sprawa do zrobienia. Trzeba wyjąć z pod kontroli ifplugd wlan0 bo inaczej będzie znikał adres IP z wlan0.
sed -i 's/INTERFACES="auto"/INTERFACES="eth0"/g' /etc/default/ifplugd sed -i 's/HOTPLUG_INTERFACES="all"/HOTPLUG_INTERFACES="eth0"/g' /etc/default/ifplugd
I restart serwisu ifplugd
service ifplugd restart
Wyłączenie i włączenie spowoduje zastosowanie powyższych danych z pliku interfaces
ifdown wlan0 ifup wlan0
Hostapd
Konfiguracja hostapd odbywa się w pliku /etc/hostapd/hostapd.conf, trzeba dodać poniższe linie. Gdzie najważniejsze to ssid, wpa_passphrase, wpa, wpa_key_mgmt
interface=wlan0 driver=nl80211 ssid=nettemppl hw_mode=g channel=6 macaddr_acl=0 auth_algs=1 ignore_broadcast_ssid=0 wpa=2 wpa_passphrase=nettemppl wpa_key_mgmt=WPA-PSK wpa_pairwise=TKIP rsn_pairwise=CCMP
Ifplugd
W pliku /etc/default/hostapd wskazuje gdzie leży plik hostapd.conf
sed -i 's/#DAEMON_CONF=""/DAEMON_CONF="\/etc\/hostapd\/hostapd.conf"/g' /etc/default/hostapd
DNSmasq
Konfiguracja DNSmasq jest prosta, trzeba dodać tylko zakres dla DHCP i interfejs na którym mają być rozdawane IP. Można dodać na końcu pliku bo domyślnie te linie są wyłączone.
sed -i '$ainterface=wlan0' /etc/dnsmasq.conf sed -i '$adhcp-range=192.168.0.1,192.168.0.250,255.255.255.0,1h' /etc/dnsmasq.conf
IPforward
Standardowo pozwalamy na przekazywanie pakietów pomiędzy interfejsami.
sysctl -w net.ipv4.ip_forward=1 sed -i -e '$anet.ipv4.ip_forward=1\' /etc/sysctl.conf
Moje nazwy
Do /etc/hosts dodaje nazwy jakie chce aby DNSmasq rozwiązywał. DNSmasq poprzez dhcp przekaże klientom jakiego dns mają używać, czyli siebie.
sed -i '$a192.168.0.1 nettemp' /etc/hosts sed -i '$a192.168.0.1 nettemp.pl' /etc/hosts sed -i '$a192.168.0.1 nettemppl' /etc/hosts
Jeszcze tylko restart serwisów.
service hostapd restart service dnsmasq restart
Connecting
Po połączeniu się do ssid nettemppl, wpisaniu hasła nettemppl, dostałem z DHCP adres IP z puli 192.168.0.0/24. I od razu wszedłem na stronę nettemp.pl która jest rozwiązywana na adres karty wlan0 czyli 192.168.0.1.
Bonus
Jeśli ktoś przeszedł przez te wszystkie linijki może odetchnąć i ściągnąć gotowy skrypt z mojego githuba.
wget https://raw.githubusercontent.com/sosprz/nettemp/beta/other/nettemp_accesspoint chmod +x nettemp_accesspoint ./nettemp_accesspoint
No to powodzenia z konfiguracją. Dawajcie znać czy wam również działa.