W ramach kolejnych eksperymentów z Raspberry PI pozwolę sobie przedstawić jak można przekształcić to małe pudełko w ruter z WiFi.Wymaganymi składnikami są:

  • raspberry pi
  • karta WiFina USB
  • pakiet hostapd oraz dhcp
  • trochę wolnego czasu :)

Przede wszystkim należy zaopatrzyć się we wspieraną pod Linuksem kartę WiFi, która może pracować w trybie AP (polecam http://elinux.org/RPi_VerifiedPeripherals#Working_USB_Wifi_Adapters). Ja wybrałem kartę z chipsetem Atherosa, bo one nigdy nie sprawiały problemów (ten model jednak pewne problemy sprawiał, ale to kwestia innego artykułu). W każdym bądź razie dla ułatwienia przyjmijmy, że interfejs WiFito wlan0 , a port ethernetowy to eth0.

Przede wszystkim instalujemy paczkę hostapd:

yum install hostapd dhcp

Konfigurujemy plik /etc/hostapd/hostapd.conf w poniższy sposób:

ctrl_interface=/var/run/hostapd

ctrl_interface_group=wheel

macaddr_acl=0
auth_algs=1
ignore_broadcast_ssid=0

wpa=2
wpa_key_mgmt=WPA-PSK
wpa_pairwise=TKIP
rsn_pairwise=CCMP

wpa_passphrase=twojehasłowifi

driver=nl80211

interface=wlan0
hw_mode=g
channel=11
ssid=twojanazwasieci

 Powyższe ustawienia powinny zaowocować obsługą standardu G+N z szyfrowaniem WPA2.

Następnie edytujemy plik /etc/sysconfig/network-scripts/ifcfg-wlan0 :

DEVICE=wlan0
BOOTPROTO=static
ONBOOT=yes
IPADDR=192.168.0.1
PREFIX=24
GATEWAY=192.168.0.1
DNS1=8.8.8.8
DOMAIN=”home.drazyk.com”
DEFROUTE=no

 Powyższe ustawienia zapewniają automatyczne podniesienie interfejsu bezprzewodowego po restarcie malinki. Z części do uruchomienia Access Pointa pozostało jeszcze skonfigurowanie serwera DHCP. Edytujemy najpierw /etc/sysconfig/dhcpd  i modyfikujemy jak poniżej:

DHCPDARGS=”wlan0″

Teraz pozostaje przygotowanie prostego pliku /etc/dhcp/dhcpd.conf :

option domain-name „home.drazyk.com”;

default-lease-time 7200;
max-lease-time 14400;

authoritative;

subnet 192.168.0.0 netmask 255.255.255.0 {
range 192.168.0.10 192.168.0.50;
option routers 192.168.0.1;
option domain-name-servers 8.8.8.8;
}

Prościej się nie da :) Na marginesie dodam, że serwery DNS Google’a (8.8.8.8) można zamienić dowolnym – np. ja używam serwera DNS wbudowanego w Sambę 4. Na koniec musimy zrestartować ustawienia sieci oraz zadbać, aby wszystkie usługi uruchamiały się automatycznie przy starcie malinki.

service network restart

systemctl enable dhcpd.service

systemctl enable hostapd.service

Teraz można przetestować czy uda się podłączyć do nowo powstałej sieci WiFi :) Jeśli wszystko jest ok to ruszamy dalej. Zostało nam tylko przygotowanie interfejsu WAN oraz ustawienia reguł na firewallu. Zatem do dzieła. Edytujemy plik /etc/sysconfig/network-scripts/ifcfg-eth0 (założyłem automatyczną konfigurację przez DHCP)

DEVICE=eth0
BOOTPROTO=dhcp
ONBOOT=yes
DNS1=8.8.8.8
DNS2=8.8.4.4
DEFROUTE=yes

Ważne jest, aby dla interfejsu wlan0 ustawić DEFROUTE=no, a dla eth0 DEFROUTE=yes. Ustawienie tylko eth0 może spowodować, że po restarcie połączenie jak najbardziej zostanie nawiązane, usługi się włączą, ale nici z połączenia, gdyż nie zostanie dodana domyślna trasa.

Teraz dodajemy/modyfikujemy /etc/sysctl.conf i ustawiamy:

net.ipv4.ip_forward = 1

Mamy już ustawioną opcję ip_forward w jądrze. Trzeba tylko ustawić odpowiednie wpisy dla IPtables. Zapisujemy reguły:

systemctl save iptables.service

Dzięki temu aktualne reguły zostaną zapisane w pliku /etc/sysconfig/iptables a my będziemy mogli go edytować w poniższy sposób:

*nat
:PREROUTING ACCEPT
:INPUT ACCEPT
:OUTPUT ACCEPT
:POSTROUTING ACCEPT
-A POSTROUTING -o eth0 -j MASQUERADE
COMMIT
*filter
:INPUT ACCEPT
-I INPUT -m state –state ESTABLISHED,RELATED -j ACCEPT
-A INPUT -i wlan0 -j ACCEPT
:FORWARD ACCEPT
-I FORWARD -m state –state ESTABLISHED,RELATED -j ACCEPT
-A FORWARD -i wlan0 -o eth0 -s 192.168.0.0/24 -j ACCEPT
:OUTPUT ACCEPT
COMMIT

Musimy jeszcze ustawić automatyczne uruchamianie IPtables przy starcie

systemctl enable iptables.service

i możemy wykonać ostateczny restart. Po mniej niż minucie system powinien się podnieść, a my będziemy mogli się podłączyć przez WiFi i korzystać z całkiem wydajnego rutera jakim jest Raspberry PI. Smacznego :)