L'única manera de comunicar-se amb una estació sísmica Spider de Worldsensing és mitjançant el port Ethernet, emprant un ordinador amb una configuració de xarxa compatible amb els paràmetres de l'estació, que estigui en el mateix rang.
Per defecte les Spiders tenen definida una xarxa privada amb les següents característiques:
IP: 192.168.2.217Mascara: 255.255.255.0Gateway: 192.168.2.1Cal configurar l'ordinador amb els mateixos valors de Mascara i Gateway, i un IP del mateix ordre, per exemple 192.168.2.50 .
El datalogger no té accés wifi i molts cops, en certs llocs aconseguir una IP pública és força complicat. Una solució per donar accés remot a les estacions sísmiques d'aquest tipus és emprar com a ordinador una placa RaspberryPi. No cal que sigui d'última generació, una Raspberrypi 2B o 3B és més que suficient.
Connectarem l'estació Spider al port ethernet (eth0) de la Raspberrypi, i a aquesta li configurarem la Wifi (wlan0) per a donar-li accés a internet. Per poder accedir a la Raspberry des de qualsevol lloc del món emprarem una xarxa virtual o Xarxa Definida per Software (SDN) com per exemple ZeroTier.
Primer de tot cal disposar d'una placa Raspberrypi amb el sistema operatiu Raspbian recent i actualitzat, on fixarem una una xarxa ethernet (eth0) en el mateix rang de la Spider i els paràmetres de la wifi (wlan0) del lloc ha de funcionar.
1) Per tal de que la Raspberry no assigni IPs per dhcp al eth0, cal eliminar el fitxer /etc/dhcpcd.conf. Si cal li podem canviar el nom per no perdre'l:
pi@sismopi:~ $ sudo mv /etc/dhcpcd.conf /etc/dhcpcd.conf.BACK2) Seguidament modificarem el fitxer /etc/network/interfaces per tal de fixar l'IP de eth0 amb un valor dins el mateix rang que la Spider :
pi@sismopi:~ $ sudo vi /etc/network/interfaces# interfaces(5) file used by ifup(8) and ifdown(8)# Please note that this file is written to be used with dhcpcd# For static IP, consult /etc/dhcpcd.conf and 'man dhcpcd.conf'# Include files from /etc/network/interfaces.d:source-directory /etc/network/interfaces.dauto loiface lo inet loopback# Start eth0 definitionauto eth0allow-hotplug eth0iface eth0 inet staticaddress 192.168.2.50netmask 255.255.255.0# start wlan definitionauto wlan0allow-hotplug wlan0iface wlan0 inet dhcpwpa-conf /etc/wpa_supplicant/wpa_supplicant.confiface default inet dhcpi al fitxer /etc/wpa_supplicant/wpa_supplicant.conf hi introduïm les credencials de la xarxa wifi:
pi@sismopi:~ $ sudo vi /etc/wpa_supplicant/wpa_supplicant.confctrl_interface=DIR=/var/run/wpa_supplicant GROUP=netdevupdate_config=1country=ESnetwork={ ssid="LabSisCSIC" psk="xXqXqXqXx" proto=RSN key_mgmt=WPA-PSK pairwise=CCMP auth_alg=OPEN }Arribats a aquest punt, dins de la xarxa local domèstica, hauriem de poder entrar a la Raspberrypi via wifi amb un ssh, i que la spider, connectada a eth0, respongui al fer un ping 192.168.2.217:
pi@sismopi:~ $ ping -c 2 192.168.2.217PING 192.168.2.217 (192.168.2.217) 56(84) bytes of data.64 bytes from 192.168.2.217: icmp_seq=1 ttl=128 time=0.691 ms64 bytes from 192.168.2.217: icmp_seq=2 ttl=128 time=0.609 ms--- 192.168.2.217 ping statistics ---2 packets transmitted, 2 received, 0% packet loss, time 1074msrtt min/avg/max/mdev = 0.609/0.650/0.691/0.041 msI alhora que la Raspberrypi vegi Internet, és adir que el ping al DNS de google també respongui:
pi@sismopi:~ $ ping -c 2 8.8.8.8PING 8.8.8.8 (8.8.8.8) 56(84) bytes of data.64 bytes from 8.8.8.8: icmp_seq=1 ttl=54 time=12.2 ms64 bytes from 8.8.8.8: icmp_seq=2 ttl=54 time=13.3 ms--- 8.8.8.8 ping statistics ---2 packets transmitted, 2 received, 0% packet loss, time 1001msrtt min/avg/max/mdev = 12.272/12.821/13.371/0.561 ms3) A continuació anirem al nostre compte de ZeroTier Central i creem una xarxa Virtual ZeroTier amb un Network ID , on hi relacionarem tots els dispositius que ens calgui: PCs, Raspberrypi's, Telèfons, etc.
Per a instal·lar ZeroTier als diferents dispositius podem seguir les instruccions de qualsevol d'aquestes dues webs 1 o 2, bàsicament cal fer :
pi@sismopi:~ curl -s 'https://pgp.mit.edu/pks/lookup?op=get&search=0x1657198823E52A61' | gpg --import && if z=$(curl -s 'https://install.zerotier.com/' | gpg); then echo "$z" | sudo bash; fiI continuació verifiquem que funciona i ho activem definitivament:
pi@sismopi:~ sudo systemctl enable zerotier-onepi@sismopi:~ sudo zerotier-cli statuspi@sismopi:~ sudo zerotier-cli join [Network ID]pi@sismopi:~ sudo zerotier-cli listnetworkspi@sismopi:~ sudo touch /var/lib/zerotier-one/networks.d/[Network ID].conf4) Un com instal·lat ZeroTier a la Raspberrypi, la comanda ifconfig ha de respondre alguna cosa similar a això:
pi@sismopi:~ $ ifconfigeth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500 inet 192.168.2.50 netmask 255.255.255.0 broadcast 192.168.2.255 inet6 fe80:xxx:xxx:fe95:68f4 prefixlen 64 scopeid 0x20<link> ether b8:27:xx:xx:68:f4 txqueuelen 1000 (Ethernet) RX packets 9161 bytes 8523759 (8.1 MiB) RX errors 0 dropped 0 overruns 0 frame 0 TX packets 152696 bytes 7817733 (7.4 MiB) TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0lo: flags=73<UP,LOOPBACK,RUNNING> mtu 65536 inet 127.0.0.1 netmask 255.0.0.0 inet6 ::1 prefixlen 128 scopeid 0x10<host> loop txqueuelen 1000 (Local Loopback) RX packets 160488 bytes 30404921 (28.9 MiB) RX errors 0 dropped 0 overruns 0 frame 0 TX packets 160488 bytes 30404921 (28.9 MiB) TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0wlan0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500 inet 192.168.43.206 netmask 255.255.255.0 broadcast 192.168.43.255 inet6 fe80:xxx:xxx:fec0:3da1 prefixlen 64 scopeid 0x20<link> ether b8:27:xx:xx:3d:a1 txqueuelen 1000 (Ethernet) RX packets 22021 bytes 4385631 (4.1 MiB) RX errors 0 dropped 0 overruns 0 frame 0 TX packets 34124 bytes 10242639 (9.7 MiB) TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0zt0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 2800 inet 10.xx.xx.xx netmask 255.255.255.0 broadcast 10.xx.xx.255 inet6 fe80::xxx:xxx:fe6a:acac prefixlen 64 scopeid 0x20<link> ether 9a:ca:xx:6a:ac:ac txqueuelen 1000 (Ethernet) RX packets 11302 bytes 894694 (873.7 KiB) RX errors 0 dropped 0 overruns 0 frame 0 TX packets 10359 bytes 8782461 (8.3 MiB) TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0o, equivalentment, la comanda ip amb opció address dona:
pi@sismopi:~ $ ip address1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000 link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00 inet 127.0.0.1/8 scope host lo valid_lft forever preferred_lft forever inet6 ::1/128 scope host valid_lft forever preferred_lft forever2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000 link/ether b8:27:xx:xx:68:f4 brd ff:ff:ff:ff:ff:ff inet 192.168.2.50/24 brd 192.168.2.255 scope global eth0 valid_lft forever preferred_lft forever inet6 fe80::ba27:xx:xx:68f4/64 scope link valid_lft forever preferred_lft forever3: wlan0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000 link/ether b8:27:eb:c0:3d:a1 brd ff:ff:ff:ff:ff:ff inet 192.168.43.206/24 brd 192.168.43.255 scope global wlan0 valid_lft forever preferred_lft forever inet6 fe80::ba27:xxxx:xxx:3da1/64 scope link valid_lft forever preferred_lft forever4: zt0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 2800 qdisc pfifo_fast state UNKNOWN group default qlen 1000 link/ether 9a:ca:xx:xx:ac:ac brd ff:ff:ff:ff:ff:ff inet 10.xxx.xx.xx/24 brd 10.xx.xx.255 scope global zto valid_lft forever preferred_lft forever inet6 fe80::98ca:xxx:xxx:acac/64 scope link valid_lft forever preferred_lft foreverÉs a dir , tenim correctament configurats els dispositius eth0 amb una IP fixa privada en el rang de la Spider, wlan0 rep una IP privada del router i es connecta a internet i zt0 ens assigna una IP pública-virtual.
5) L'últim pas és re-dirigir tot el tràfic del port 80 eth0 de l'estació sísmica Spider cap a la xarxa virtual ZeroTier per a fer-la visible per tots els dispositius agregats a aquesta xarxa SDN. Per a fer-ho, utilitzarem el protocol iptables del Linux.
M'he inspirat en aquests documents (2, 3 i 4) adaptant-ho a les nostres necessitats. Els pasos finals del document 2 (Enabling Your Server to Manage the Global Route i Managing Flows) trobo que no son necessaris pel nostre cas, així que no els implemento. Tampoc utilitzo el paquet dnsmasq com es diu al document 4.
Això s'aconsegueix modificant el fitxer /etc/sysctl.conf i fixant net.ipv4.ip_forward = 1 :
Si fem:
pi@sismopi:~ $ sudo sysctl net.ipv4.ip_forward Per defecte aquesta comanda respon: net.ipv4.ip_forward = 0.
Editem el fitxer /etc/sysctl.conf :
pi@sismopi:~ $ sudo vi /etc/sysctl.confi canviem o descomentem la línia a net.ipv4.ip_forward = 1
Un cop fet el canvi, cal fer actives i permanents les noves funcions del kernel:
pi@sismopi:~ $ sudo sysctl -ppi@sismopi:~ $ sudo apt-get install iptables-persistent pi@sismopi:~ $ sudo iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADEpi@sismopi:~ $ sudo iptables -A FORWARD -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPTpi@sismopi:~ $ sudo iptables -t nat -A PREROUTING -p tcp --dport 8080 -i zt0 -j DNAT --to 192.168.2.217:80I un cop definides les guardem:
pi@sismopi:~ $ sudo netfilter-persistent savePer verificar que està tot correcte, fem iptables-save que ha de respondre el següent:
pi@sismopi:~ $ sudo iptables-save# Generated by iptables-save v1.6.0 on Tue Mar 10 10:40:04 2020*mangle:PREROUTING ACCEPT [185065:40113455]:INPUT ACCEPT [170205:32205924]:FORWARD ACCEPT [14858:7906857]:OUTPUT ACCEPT [331757:61371856]:POSTROUTING ACCEPT [346621:69280087]COMMIT# Completed on Tue Mar 10 10:40:04 2020# Generated by iptables-save v1.6.0 on Tue Mar 10 10:40:04 2020*nat:PREROUTING ACCEPT [570:41123]:INPUT ACCEPT [70:7401]:OUTPUT ACCEPT [7687:1015148]:POSTROUTING ACCEPT [2977:256946]-A PREROUTING -i zt0 -p tcp -m tcp --dport 8080 -j DNAT --to-destination 192.168.2.217:80-A POSTROUTING -o eth0 -j MASQUERADECOMMIT# Completed on Tue Mar 10 10:40:04 2020# Generated by iptables-save v1.6.0 on Tue Mar 10 10:40:04 2020*filter:INPUT ACCEPT [168328:31897158]:FORWARD ACCEPT [1969:122016]:OUTPUT ACCEPT [329524:61012725]-A FORWARD -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPTCOMMIT# Completed on Tue Mar 10 10:40:04 2020Fet tot això, la estació sísmica Spider hauria de ser visible des de qualsevol dels dispositius de la Xarxa Virtual. Per a aquest grup d'ordinadors, l'estació serà accessible com qualsevol altre instrument amb un IP públic:
Per tant, podrem implementar-hi els scripts de descarrega de dades amb el programa wget de Linux, o els scripts de descàrrega de dades en Temps Pseudo-Real emprant les utilitats de Ringserver d'IRIS :
Agraïments:
Marc Español i Óscar Frías, pel seu suport informàtic destriant el gra de la palla ...
Jordi Díaz, per fer les primeres proves amb el primer prototip.
Dani Ruiz, per deixar-me tenir un trasto a casa seva. Un pongo del grans.