RaspberryPi kot Wifi AP

Torej, na RaspberryPi 3 sem hotem postaviti wifi Access Point. Sledil sem temle navodilom:
https://learn.adafruit.com/setting-up-a-raspberry-pi-as-a-wifi-access-point/install-software

Minimalna sprememba, ki sem jo naredil je, da uporabljam IP naslove v območju 172.16.0.x. Torej imam v:
/etc/dhcp/dhcpd.conf

Tole:
subnet 172.16.0.0 netmask 255.255.255.0 {
        range 172.16.0.10 172.16.0.50;
        option broadcast-address 172.16.0.255;
        option routers 172.16.0.1;
        default-lease-time 600;
        max-lease-time 7200;
        option domain-name "local";
        option domain-name-servers 8.8.8.8, 8.8.4.4;
}

Vse ostalo sem nastavil isto. Npr. v /etc/hostapd/hostapd.conf imam:

interface=wlan0
ssid=BlueSensor
country_code=SI
hw_mode=g
channel=6
macaddr_acl=0
auth_algs=1
ignore_broadcast_ssid=0
wpa=2
wpa_passphrase=Raspberry
wpa_key_mgmt=WPA-PSK
wpa_pairwise=CCMP
wpa_group_rekey=86400
ieee80211n=1
wme_enabled=1
Tukaj moram poudariti, da ker želim uporabiti interni RPi3 wifi, sem v zgornji konfiguraciji izpustil definicijo driverja:
driver=rtl871xdrv
Skratka, tega NI.

No, potem pa zaženem tole:
sudo /usr/sbin/hostapd /etc/hostapd/hostapd.conf

In dobim naslednjo napako:
Configuration file: /etc/hostapd/hostapd.conf
Failed to create interface mon.wlan0: -95 (Operation not supported)
wlan0: interface state UNINITIALIZED->COUNTRY_UPDATE
wlan0: Could not connect to kernel driver
Using interface wlan0 with hwaddr b8:27:eb:cc:f0:87 and ssid "BlueSensor"
wlan0: interface state COUNTRY_UPDATE->ENABLED
wlan0: AP-ENABLED

Zdaj... na okoliških napravah vidim SSID BlueSensor. S telefonom sem se uspešno povezal gor, ampak kao ni bilo internetne povezave (RPi je sicer preko eth0 povezan v internet). Na RPiju celo vidim IP od telefona (172.16.0.11), ampak iz telefona ne morem odpreti spletne strani na RPiju, ki se nahaja na 172.16.0.1.

Z računalnikom sem se enkrat uspešno povezal gor, na website na 172.16.0.1 sem prišel, celo internetno povezavo sem imel. V naslednjem poskusu pa se ni več uspel povezati...

Zdaj... malce sumim kakšen problem s kernel driverjem za wifi... Wifi povezava na RPi sicer dela brez problemov (ko ni v AP načinu). Gor je sicer Raspbian Jessie.

Je to problem?

Bi bila lahko težava tudi v tem, da je RPi nastavljen na wifi kanal 6 (glej gornji config), 10 cm stran je pa Mikrotik router? Vendar pa le-ta dela na frekvenci 2412 MHz, kar je sicer kanal 1...

Kakšna ideja?

Komentarji

  • Evo, zdaj sem malo bolj zdebuggal zadevo.

    Kot prvo sem RPi AP prestavil na kanal 8 (na nekih forumih so pisali, da bi bil to kao problem, da ne podpira vseh kanalov)... Zdajle sem z računalnikom povezan gor. Dela mi lokalni website (http://172.16.0.1:8881) in pa tudi internet (torej IP forwarding).

    S svojim telefonom pa se ne uspem povezati gor. Na telefonu sicer teče Cyanogenmod, ampak ostala wifi omrežja mi delajo. Se je pa sodelavka uspela goro povezati s Samsung Galaxy S7. Sicer nima povezave do interneta, ampak lokalni website pa vidi (http://172.16.0.1:8881).

    No, ko se jaz gor povežem s svojim telefonom, vidim dodeljen IP naslov in lahko telefon tudi pingam. Na telefonu mi pa Network Signal Info app napiše, da "wifi is not connected". Telefon sam mi hkrati napiše, da je wifi povezan, iz RPija pa telefon lahko tudi pingam...

    A je morda problem v kakšnem "nestandardnem" protokolu, ki ga kao telefoni slabše podpirajo??? Ampak na Samsungu bi če drugega ne, moral delati IP forwarding, saj je to vendar stvar iptables na RPi in ne hostapdja...!
  • OK, log povezave telefona na hostapd:
    sudo /usr/sbin/hostapd /etc/hostapd/hostapd.conf
    Configuration file: /etc/hostapd/hostapd.conf
    Failed to create interface mon.wlan0: -95 (Operation not supported)
    wlan0: interface state UNINITIALIZED->COUNTRY_UPDATE
    wlan0: Could not connect to kernel driver
    Using interface wlan0 with hwaddr b8:27:eb:cc:f0:87 and ssid "BlueSensor"
    wlan0: interface state COUNTRY_UPDATE->ENABLED
    wlan0: AP-ENABLED
    wlan0: STA 34:4d:f7:47:b1:4f IEEE 802.11: associated
    wlan0: AP-STA-CONNECTED 34:4d:f7:47:b1:4f
    wlan0: STA 34:4d:f7:47:b1:4f RADIUS: starting accounting session 59311E17-00000000
    wlan0: STA 34:4d:f7:47:b1:4f WPA: pairwise key handshake completed (WPA)
    wlan0: STA 34:4d:f7:47:b1:4f WPA: group key handshake completed (WPA)

    Ping iz RPi AP na telefon:

    ping 172.16.0.11
    PING 172.16.0.11 (172.16.0.11) 56(84) bytes of data.
    64 bytes from 172.16.0.11: icmp_seq=1 ttl=64 time=1396 ms
    64 bytes from 172.16.0.11: icmp_seq=2 ttl=64 time=389 ms
    64 bytes from 172.16.0.11: icmp_seq=3 ttl=64 time=411 ms
    64 bytes from 172.16.0.11: icmp_seq=4 ttl=64 time=448 ms


    adb shell na telefonu:

    ifconfig
    ...
    wlan0     Link encap:UNSPEC
              inet addr:172.16.0.11  Bcast:172.16.0.255  Mask:255.255.255.0
              inet6 addr: fe80::364d:f7ff:fe47:b14f/64 Scope: Link
              UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
              RX packets:19501 errors:0 dropped:0 overruns:0 frame:0
              TX packets:18698 errors:0 dropped:0 overruns:0 carrier:0
              collisions:0 txqueuelen:1000
              RX bytes:10918688 TX bytes:2990567

    ping iz telefona na RPi ne gre skozi:

    shell@hammerhead:/ $ ping 172.16.0.1                                           
    PING 172.16.0.1 (172.16.0.1) 56(84) bytes of data.


    Mimogrede, v hostapd.conf sem vklopil WPA1 in WPA2 ter TKIP šifriranje:

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

    Zdaj mi pa počasi že zmanjkuje idej... :-/
  • Še tole, preko ADB, na telefonu:

    shell@hammerhead:/ $ route

    Kernel IP routing table
    Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
    109.239.187.4   172.19.116.208  255.255.255.255 UGH   0      0        0 rmnet0
    109.239.187.20  172.19.116.208  255.255.255.255 UGH   0      0        0 rmnet0
    172.16.0.0      *               255.255.255.0   U     0      0        0 wlan0
    172.19.116.192  *               255.255.255.224 U     0      0        0 rmnet0

    Na RPi AP pa:
    sudo tcpdump -i wlan0

    Po reconnectu telefona na RPi AP, vidim tole:
    tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
    listening on wlan0, link-type EN10MB (Ethernet), capture size 262144 bytes
    10:42:43.898225 34:4d:f7:47:b1:4f (oui Unknown) > Broadcast Null Unnumbered, xid, Flags [Response], length 6: 01 00
    10:42:43.901171 EAPOL key (3) v2, len 95
    10:42:43.972974 EAPOL key (3) v1, len 119
    10:42:43.974444 EAPOL key (3) v2, len 123
    10:42:43.979761 EAPOL key (3) v1, len 95
    10:42:43.983507 EAPOL key (3) v2, len 135
    10:42:43.989508 EAPOL key (3) v1, len 95
    10:42:44.097824 IP6 :: > ff02::1:ff47:b14f: ICMP6, neighbor solicitation, who has fe80::364d:f7ff:fe47:b14f, length 24
    10:42:44.104857 IP6 :: > ff02::16: HBH ICMP6, multicast listener report v2, 1 group record(s), length 28
    10:42:44.218310 IP 0.0.0.0.bootpc > 255.255.255.255.bootps: BOOTP/DHCP, Request from 34:4d:f7:47:b1:4f (oui Unknown), length 314
    10:42:44.219064 IP 172.16.0.1.bootps > 172.16.0.11.bootpc: BOOTP/DHCP, Reply, length 300
    10:42:44.225425 IP 0.0.0.0.bootpc > 255.255.255.255.bootps: BOOTP/DHCP, Request from 34:4d:f7:47:b1:4f (oui Unknown), length 326
    10:42:44.226248 IP 172.16.0.1.bootps > 172.16.0.11.bootpc: BOOTP/DHCP, Reply, length 300
    10:42:44.396118 ARP, Request who-has 172.16.0.1 tell 172.16.0.11, length 28
    10:42:54.408909 IP 172.16.0.11.52179 > google-public-dns-a.google.com.domain: 54785+ AAAA? connectivitycheck.gstatic.com. (47)
    10:42:59.411431 IP 172.16.0.11.52449 > google-public-dns-b.google.com.domain: 54785+ AAAA? connectivitycheck.gstatic.com. (47)
    10:43:09.417460 ARP, Request who-has 172.16.0.1 tell 172.16.0.11, length 28
    10:43:19.427214 IP 172.16.0.11.43419 > google-public-dns-b.google.com.domain: 62498+ A? connectivitycheck.gstatic.com. (47)
    10:43:24.430657 IP 172.16.0.11.37642 > google-public-dns-a.google.com.domain: 63837+ AAAA? connectivitycheck.gstatic.com.local. (53)
    10:43:29.437642 IP 172.16.0.11.1231 > google-public-dns-b.google.com.domain: 63837+ AAAA? connectivitycheck.gstatic.com.local. (53)
    10:43:34.442038 ARP, Request who-has 172.16.0.1 tell 172.16.0.11, length 28
    10:43:34.442330 ARP, Reply 172.16.0.1 is-at b8:27:eb:cc:f0:87 (oui Unknown), length 28
    10:43:34.443168 IP 172.16.0.11.37642 > google-public-dns-a.google.com.domain: 63837+ AAAA? connectivitycheck.gstatic.com.local. (53)
    Sem se skušal povezati še z Windows 10 prenosnikom. Se poveže, lahko dostopam do 172.16.0.1:8881, nima pa interneta. Zdaj, na svojem Ubuntu sistemu imam ročno vpisane DNS-e oz. svoj lasten DNS, in glede na vse skupaj sem začel sumiti, da mora biti nek DNS problem. Druge mašine, ki imajo težave,imajo namreč privzete DNS nastavitve. Morda je ta problem povezan z IPv6 (AAAA requesti v tcpdump).

    To sicer ne razloži zakaj iz telefona ni routinga na 172.16.0.1, iz prenosnikov pa je...

    Ampak kolikor sem gledal dokumentacijo, ISC DHCP server lahko servira samo IPv4 ali IPv6, jaz pa v bistvu IPv6 sploh nimam skonfiguriran...
  • Huh, iz Windows 10 računalnika:

    ping www.siol.net - ne dela

    ping 193.25.220.192 - DELA.

    Torej internet v bistvu je. Problem so DNS-ji očitno.
  • Okeeey. Ugotovil problem.

    Newtork sysadmini nam na lokalnem omrežju blokirajo Googlove DNS serverje.

    Ko sem v dhcpd.conf vnesel "lokalni DNS", je pa vse "čudežno" začelo delat.

    Čudno mi je samo zakaj prej v Androidu ni delalo niti pinganje lokalnih IP naslovov...

    Kakorkoli, upam, da tole komu pomaga pri podobnih težavah. Mogoče tudi kot recept za debugganje.
Za komentiranje se prijavite ali pa se vpišite.