Dostęp do internetu dla gości
Ostatnia zmiana: 2017-07-10 17:51

Sieć gościnna jest to dodatkowa sieć przeznaczona dla gości (osób doraźnie mających mieć dostęp do internetu), nie powiązana zwykle z siecią domową. Zaletą jej stosowania jest możliwość nałożenia różnych ograniczeń oraz sam fakt, że nie podajemy naszego hasła innym osobom.
Temat ten był już wielokrotnie omawiany i bez problemu można go zrealizować na alternatywnym oprogramowaniu. Opis ten zrealizowano z użyciem OpenWrt Chaos Calmer 15.05 oraz LEDE 17.01

Konfiguracja

Zakładamy, że mamy router z OpenWrt, podłączony do internetu przez interfejs wan (to ważne!), ze standardową konfiguracją. Konfigurację rozpoczynamy od dodania dodatkowej sieci dla gości; najprościej wykonać to przez dodanie nowego wirtualnego interfejsu radiowego nie powiązanego z naszą siecią:


    # uci set network.guest=interface
    # uci set network.guest.type=bridge
    # uci set network.guest.proto=static
    # uci set network.guest.ipaddr=172.16.0.1
    # uci set network.guest.netmask=255.240.0.0

    # uci set dhcp.guest=dhcp
    # uci set dhcp.guest.start=100
    # uci set dhcp.guest.limit=150
    # uci set dhcp.guest.leasetime=2h
    # uci set dhcp.guest.interface=guest

    # uci set wireless.guest=wifi-iface
    # uci set wireless.guest.device=radio0
    # uci set wireless.guest.mode=ap
    # uci set wireless.guest.network=guest
    # uci set wireless.guest.ssid=dom_goscinna
    # uci set wireless.guest.encryption=none

    # uci add firewall zone
    # uci set firewall.@zone[-1].name=guest
    # uci add_list firewall.@zone[-1].network=guest
    # uci set firewall.@zone[-1].input=ACCEPT
    # uci set firewall.@zone[-1].output=ACCEPT
    # uci set firewall.@zone[-1].forward=ACCEPT

    # uci add firewall forwarding
    # uci set firewall.@forwarding[-1].src=guest
    # uci set firewall.@forwarding[-1].dest=wan

    # uci commit

Modyfikowane są pliki /etc/config/firewall, /etc/config/dhcp, /etc/config/network i /etc/config/wireless. Dodajemy nową sieć (nazwaną tu guest) o następujących parametrach:
- nazwa rozgłaszana, SSID: dom_goscinna
- brak szyfrowania
- przydzielane adresy z klasy 172.16.0.0/12
- kanał taki sam jak został ustawiony na interfejsie radiowym.

Dodatkowy SSID dodany jest do pierwszego interfejsu radiowego (radio0), więc musi on być włączony:


    # uci set wireless.radio0.disabled=0
    # uci commit

Należy także pamiętać czym ten interfejs radiowy jest - siecią 2.4GHz lub 5GHz; zależy to od konkretnego modelu routera. Jeżeli urządzenie ma dwa interfejsy radiowe to można też włączyć to na drugim:


    # uci set wireless.radio1.disabled=0
    # uci set wireless.guest1=wifi-iface
    # uci set wireless.guest1.device=radio1
    # uci set wireless.guest1.mode=ap
    # uci set wireless.guest1.network=guest
    # uci set wireless.guest1.ssid=dom_goscinna
    # uci set wireless.guest1.encryption=none
    # uci commit

Po wykonaniu restartu routera


    # reboot

powinna być widoczna dodatkowa sieć o nazwie "dom_goscinna" do której możemy się podłączyć i korzystać z internetu

Nie chcę żeby Google lokalizowało mój router!

Można więc zmienić mac adres interfejsu radiowego (uwaga: nie każdy sterownik to umożliwia!):


    # uci set wireless.guest.macaddr=00:11:22:33:44:55
    # uci commit wireless

lub zmieniać ten mac adres cyklicznie w cronie.

Ale on ma dostęp do mojego routera!

Widzi stronę logowania bo konfiguracja została tak stworzona. Można ją trochę bardziej uszczelnić żeby ruch szedł tylko do internetu:


    # uci set firewall.@zone[-1].input=REJECT
    # uci set firewall.@zone[-1].output=ACCEPT
    # uci set firewall.@zone[-1].forward=REJECT

    # uci add firewall rule
    # uci set firewall.@rule[-1].src=guest
    # uci set firewall.@rule[-1].proto=udp
    # uci set firewall.@rule[-1].src_port=67-68
    # uci set firewall.@rule[-1].dest_port=67-68
    # uci set firewall.@rule[-1].target=ACCEPT
    # uci set firewall.@rule[-1].family=ipv4

    # uci add firewall rule
    # uci set firewall.@rule[-1].src=guest
    # uci set firewall.@rule[-1].dest_port=53
    # uci set firewall.@rule[-1].target=ACCEPT
    # uci set firewall.@rule[-1].family=ipv4
    # uci set firewall.@rule[-1].proto=tcpudp

    # uci commit

Dodatkowo można także ograniczyć komunikację miedzy klientami bezprzewodowymi:


    # uci set wireless.guest.isolate=1
    # uci commit

Wykonujemy restart i od tej pory nie powinno być dostępu do routera.

Ale każdy może mi się podłączyć do sieci!

Więc po prostu nie otwieramy sieci tylko ją zabezpieczamy


    # uci set wireless.guest.encryption='psk2'
    # uci set wireless.guest.key=12345678
    # uci commit
    # wifi

Hasło w tym przypadku to 12345678

Ale on ma Windows 10...

I tym samym może mieć włączą nową opcję "Czujnik WiFi" dzięki czemu ktoś może podzielić się naszym hasłem z innymi ludzi. Aby tego uniknąć - po prostu zmieniajmy hasło codzienne na inne dodając odpowiednie polecenie do crona:


    # echo "1 0 * * * uci set wireless.guest.key=\$(head /dev/urandom | tr -dc '0-9a-zA-Z' | cut -b0-8); uci commit wireless; wifi" >> /etc/crontabs/root
    # /etc/init.d/cron restart

Raz dziennie, minutę po północy, hasło do sieci gościnnej zostanie zmienione na osiem losowych znaków.
No tak, ale jak ktoś przyjdzie do nas i chce się podłączyć to nie zna hasła. Rozwiązujemy to w ten sposób, że stworzymy stronę na której to hasło będzie widoczne, więc jeżeli ktoś przyjdzie i będzie chciał się podłączyć, to wyciągamy z kieszeni nasz smartfon (jesteśmy podłączeni do naszej prywatnej sieci, prawda?), wybieramy w zakładkach odpowiednią podstronę naszego routera i po prostu dyktujemy mu hasło. Nawet jak je potem udostępni to i tak zostanie ono następnego dnia zmienione.
Jak się do tego zabrać? Instalujemy serwer http jeżeli go jeszcze nie mamy:


    # opkg update
    # opkg install uhttpd
    # /etc/init.d/uhttpd enable
    # /etc/init.d/uhttpd start

A następnie tworzymy nową podstronę /www/cgi-bin/pin:


    # touch /www/cgi-bin/pin
    # chmod 755 /www/cgi-bin/pin

o zawartości:


    #!/bin/sh
    echo "Content-type: text/html"
    echo ""
    echo "<html><body><h1>"
    uci get wireless.guest.key
    echo "</h1></body></html>"

(np. edytorem vi).
Po jej zrobieniu wchodzimy na adres http://192.168.1.1/cgi-bin/pin i wyświetla nam się bieżące hasło którym możemy się podzielić...

Ale on zapycha mi pasmo!

Niektórych użytkowników nie da się wychować, więc po prostu ograniczamy pasmo naszej sieci gościnnej do limitu np. 1Mbps download i 0,5Mbps upload:


    # opkg update
    # opkg install wshaper

    # uci set wshaper.settings.network='guest'
    # uci set wshaper.settings.downlink='512'
    # uci set wshaper.settings.uplink='1024'
    # uci commit
    # /etc/init.d/wshaper enable
    # /etc/init.d/wshaper start

(dla LEDE pakiet wshaper nie jest już dostępny).
Jeżeli w systemie jest już skonfigurowany QoS to nie należy instalować wshapera tylko zmienić odpowiednio istniejący QoS.

Chcę mieć stronę powitalną

Np. z regulaminem, bo prowadzę mały hotelik. Nic trudnego, wystarczy zainstalować odpowiedni program, np. coova-chilli, nodogsplash czy własne skrypty. Pamiętajmy tylko że nasza sieć gościnna to nie jest interfejs br-lan.

Chcę żeby mieli dostęp do tylko do www

Jeżeli używamy hotspota - tam to można ograniczyć. Jeżeli nie - wystarczy założyć odpowiednią regułę w iptables np:


    # iptables -I FORWARD -p tcp -s 172.16.0.0/12 ! --dport 80 -j REJECT

Chcę żeby sieć była dostępna tylko po południu

I tu znów można posłużyć się cronem:


    # echo "0 16 * * * uci set wireless.guest.disabled=0; wifi" >> /etc/crontabs/root
    # echo "0 22 * * * uci set wireless.guest.disabled=1; wifi" >> /etc/crontabs/root
    # /etc/init.d/cron restart

Spowoduje to włączenie sieci gościnnej o 16:00 i wyłączenie o 22:00. Oczywiście trzeba ustawić domyślnie wyłączoną sieć.

Chcę być anonimowy w sieci gościnnej

Zainstaluj TORa.