duminică, 14 septembrie 2014

Accesarea WRTnode din Internet (Dynamic DNS)

Odata conectata la Internet, placa WRTnode poate fi accesata din Internet - de oriunde din lume. Cu conditia sa stim adresa IP corecta si sa facem setarile corespunzatoare la ruterul WiFi. Iata harta retelei noastre:


(click pe imagine pt marire)

Furnizorul de servicii de internet (ISP) aloca dinamic adresele IP catre clientii sai, deci adresa IP a ruterului WiFi se va schimba dupa un timp dat. Consideram ca ruterul WiFi se conecteaza pt moment la Internet prin interfata WAN folosind adresa 77.123.78.12.

Ruterul WiFi aloca dispozitivelor conectate la el (pe partea de LAN) adresele IP in mod dinamic - primul venit, primul servit - adresele IP fac parte dintr-un interval dat de adrese (alocarea se face prin mecanismul de DHCP). Deci si adresa IP a placii WRTnode se va schimba din cauza alocarii dinamice de catre ruter. Adresele IP ale ruterului WiFi fac parte din subnetul ruterului (192.168.1.0). Adresa IP 192.169.1.1 reprezinta gateway-ul ruterului WiFi. Consideram ca placa WRTnode primeste pt moment adresa IP 192.168.1.110.

Modul in care functioneaza placa WRTnode: se conecteaza prin WiFi la ruterul WiFi si primeste adresa IP 192.168.1.110 din subnetul ruterului WiFi, laptopul il conectez prin WiFi la placa WRTnode si primeste adresa IP 192.168.8.50 din subnetul placii WRTnode - 192.168.8.1 este gateway-ul placii WRTnode), deci nu putem accesa de pe Internet direct placa WRTnode.

Aparent e o problema cu accesarea din Internet a placii WRTnode. Problema aceasta am avut-o si la BeagleBoard, RaspberryPi si restul de SBC (vezi aici si aici).

Insa la orice problema exista o solutie, in cazul de fata se numeste dynamic DNS si port forwarding:
-un server (site de Internet) ofera o adresa web care are in spate adresa IP actualizata a ruterului WiFi (o aplicatie de pe WRTnode o va actualiza periodic) = dynamic DNS
-cererea de conexiune pt un anume port va fi preluata de ruterul WiFi si trimisa mai departe spre o anumita adresa IP din subnetul acestuia, adica spre WRTnode; apoi WRTnode primeste cererea de conexiune pe portul respectiv si o va trimite mai departe spre adresa IP corespunzatoare (specificata) = port forwarding

Instalam pachetul ddns-scripts pt OpenWRT pe placa WRTnode folosind linia de comanda. Modul de instalare / dezintalare al unui pachet in OpenWRT este descris aici.

opkg update
opkg install ddns-scripts

Serverul care va oferi adresa web cu adresa IP actualizata este http://freedns.afraid.org/ (trebuie facut cont acolo, contul este gratuit si functioneaza bine). Dupa ce avem contul pe freedns.afraid.org si adresa web, putem incepe configurarea DDNS. Editam fisierul /etc/config/ddns:

nano /etc/config/ddns

config service "freeedns"
        option enabled          "1"
        option interface        "wan"
        option use_syslog       "1"

        option service_name     "freedns.afraid.org"
        option domain           "wrtnoode.mooo.com"
        option username         "utilizator"
        option password         "parola_utilizator"
        option use_https        "0"

        option force_interval   "72"
        option force_unit       "hours"
        option check_interval   "10"
        option check_unit       "minutes"
        option retry_interval   "60"
        option retry_unit       "seconds"

        #option ip_source       "network"
        #option ip_network      "wan"

        #option ip_source       "interface"
        #option ip_interface    "eth0.1"

        #option ip_source       "script"
        #option ip_script       "path to your scrip"

        option ip_source        "web"
        option ip_url           "http://checkip.dyndns.com/"

        #option update_url      "http://[USERNAME]:[PASSWORD]@members.dyndns.org/nic/update?hostname=[DOMAIN]&myip=[IP]"

Acum pornim serviciul de DynDNS:
root@OpenWrt:~# ACTION=ifup INTERFACE=wan /sbin/hotplug-call iface

Verificam ca este pornit:
root@OpenWrt:~# ps | grep dynamic_dns_updater.sh
 3757 root      1284 S    grep dynamic_dns_updater.sh

Dam ping la domeniul ales de pe freedns.afraid.org:
root@OpenWrt:~# ping wrtnode.mooo.com
PING wrtnode.mooo.com (89.114.85.19): 56 data bytes
64 bytes from 89.114.85.299: seq=0 ttl=64 time=2.264 ms
64 bytes from 89.114.85.299: seq=1 ttl=64 time=1.580 ms
64 bytes from 89.114.85.299: seq=2 ttl=64 time=1.583 ms
64 bytes from 89.114.85.299: seq=3 ttl=64 time=1.831 ms
^C
--- wrtnode.mooo.com ping statistics ---
4 packets transmitted, 4 packets received, 0% packet loss
round-trip min/avg/max = 1.580/1.809/2.264 ms

Daca sunt probleme, ajuta sa vedem ce face in fundal serviciul DDNS (cu numele dat ca mai sus - freeedns):

/usr/lib/ddns/dynamic_dns_updater.sh freeedns

Din exterior, placa WRTnode poate fi accesata prin SSH prin portul 5000 (l-am ales eu, nu are o semnificatie ori importanta). din interior, placa WRTnode se aceseaza prin SSH prin portul 1028, se editeaza /etc/config/dropbear (option port '22' devine option port '1028'):

nano /etc/config/dropbear



Mai multe masuri de crestere a securitatii unui dispozitiv cu OpenWRT sunt descrise aici.

WRTnode are un firewall care ne pazeste de atacurile informatice venite din Internet. Un firewall "lasa inauntru" / permite accesul in sistem dupa reguli prestabilite, deci daca vrem sa accesam WRTnode din afara Internetului, este necesar sa creeam o astfel de regula. Editam fisierul /etc/config/firewall (editorul nano l-am instalat deja, vezi aici) - am adaugat la finalul fisierului acesti parametri:

nano /etc/config/firewall

config 'redirect'
        option 'name' 'ssh'
        option 'src' 'wan'
        option 'proto' 'tcpudp'
        option 'src_dport' '1028'
        option 'dest_ip' '192.168.8.1'
        option 'target' 'DNAT'
        option 'dest' 'lan'

(care semnifica: daca vine o cerere pt portul 1028 pe wan, atunci permite-i sa mearga mai departe pe lan, la adresa IP 192.168.8.1)

Sau putem simplu sa folosim interfata web: deschidem un browser, mergem la 192.168.8.1, user root si parola stabilita de anterior, apoi meniul Network -> Firewall, sectiunea Port Forwarding.



 Adaugam o regula noua (Rule, Add) care arata ca mai jos, click pe Add, apoi click pe Save&Apply. Regula va fi vizibila si in functie.




Repornim serviciul de firewall a.i. sa includa si aceasta noua regula (daca editam cu nano este necesar acest pas):

/etc/init.d/firewall restart

Am terminat cu setarile pt WRTnode, urmeaza partea de setari ruterul WiFi la care placa WRTnode este conectata, am mai facut acest lucru pt alt dispozitiv aici, si pt WRTnode este similar.

Trebuie sa ne conectam cu un calculator prin WiFi / cablu la ruterul WiFi. Accesam interfata ruterului WiFi (in browser introducem o adresa de forma 192.168.1.1 sau 192.168.0.1 - trebuie sa stim utilizatorul si parola ruterului).

Pe prima pagina afisata gasim de obicei o lista cu adresele IP deja alocate si adresele MAC ale dispozitivelor respective (daca nu, o cautam la LAN / DHCP clients sau similar). Identificam placa WRTnode in lista si notam undeva adresa IP si adresa MAC.

In sectiunea LAN / DHCP trebuie sa fie optiune pentru alocarea de adrese IP fixe din intervalul DHCP, acolo introducem adresa IP si MAC a placii WRTnode si in acest fel la conectare, WRTnode primeste aceeasi adresa IP de la ruterul WiFi.

In sectiunea WAN, trebuie sa fie o sectiune Port forwarding / Virtual server unde vom introduce portul 17000 sa fie directionat spre adresa IP alocata placii WRTnode ca si portul 1028. Salvam si am terminat cu setarile.

Ca si verificare, incercam o conectare la WRTnode:

ssh root@wrtnoode.mooo.com -p 5000

(mai multe optiune de dynDNS gratuit si explicatii: http://wiki.openwrt.org/doc/howto/ddns.client)
(mai multe detalii despre port forwarding: http://wiki.openwrt.org/doc/howto/port.forwarding)
(mai multe detalii despre firewall: http://wiki.openwrt.org/doc/uci/firewall)