quarta-feira, 12 de março de 2014

Evolução do Openflow

Alguns temas importantes para o Openflow já estão sendo explorados por diversos pesquisadores.
A mitigação de DDOS está com um um trabalho muito bom do Peter Phaal
http://blog.sflow.com/2013/08/frenetic-pyretic-and-resonance.html Outro link sobre DDOS: http://packetpushers.net/openflow-1-0-actual-use-case-rtbh-of-ddos-traffic-while-keeping-the-target-online/
No ONS (Open Network Summit) da semana passada, o Yiannis (doutorando de Stanford), que trabalhou no projeto Pantou, que permitiu o uso do Openflow nos switches TP-Link que tenho em casa e que estou utilizando para os experimentos, apresentou um trabalho bem interessante sobre o controle total de uma rede Wi-Fi via Openflow: http://cio.com.br/tecnologia/2014/03/06/stanford-experimenta-gestao-da-rede-wifi-com-sdn
Na SIGCOMM do ano passado encontrei vários papers interessantes: http://conferences.sigcomm.org/sigcomm/2013/hotsdn.php
Agora é esperar os vídeos da ONS no Youtube.

sábado, 8 de fevereiro de 2014

Experiências com SDR (Software Definied Radio)

Nos dias de hoje, hardware é "commodity", e a mágica está no software. Penso assim com as SDN (Software Definied Networks), tema de meu estudo. Na área de radioamadorismo, que tenho um pezinho, com indicativo PY5 apesar de não ser ativo, existe a área de SDR (Softare Definied Radio). O hardware básico, que é um "dongle" USB é muito barato na DX.com (para variar), menos de US$ 15,00 com frete zero. Originalmente é um receptor de TV digital e ráio FM, mas o chipset RTL2832U+R820T é muito versatil e com o software certo, pode receber sinais de RF desde alguns Mhz até mais de 1,2 GHz.

Testei vários softwares , como o HDSDR, mas não gostei por não receber Wide FM das rádios comerciais:
O melhor para mim foi o SDRSharp ou SDR#. Nestas últimas versões, por problemas com direitos de distribuição da  biblioteca RTLSDR.DLL a instalação ficou mais chata, mas é só seguir os forums. Algumas dicas:
  • Não instale os drivers que vem com a placa.
  • Siga este tutorial
  • Use o Zadix para instalar o driver no micro
  • Copie o arquivo rtlsdr.dll para a pasta SdrSharp
  • Retire os comentários sobre a placa RTL USB no arquivo SDRSharp.exe.Config
Com estas modificações, a opção RTL-SDR / USB deve aparecer no Menu:


terça-feira, 4 de fevereiro de 2014

Adaptando o Arduino Mini Pró para alimentar módulos 3,3V

Um pequeno mod para que o Arduino pró mini alimente módulos que tem alimentação 3,3V, como o radio Nrf24L01. Usei os reguladores de tensão AMS1117 da dx.com com os módulos Funduino da dx.com também (de US$ 5,83).
Para fazer a adapatação, apenas cortei com um estilete a trilha da ilha de um dos pinos de GND do módulo e soldei um regulador (com a identificação para trás) nos três pinos da barra, como na foto abaixo.Assim, ficou apenas o GND da ponta, o segundo pino ficou com 3,3V e o terceiro permaneceu como Vin.


terça-feira, 10 de setembro de 2013

Web Semântica e Page-Rank

Mais um curso formidável do Coursera: Big Data e Web Intelligence.
Ontem entendi um pouco sobre web semântica e como o Google está prejudicando a eficiência do próprio Google ! Explico. O Page-Rank se baseia no número de outras páginas tem links para uma determinada página. Mas agora ninguém mais aponta para outras páginas, pois basta dar uma "Googlada" para se achar mais referências sobre o assunto. Assim o próprio Google está empobrecendo o seu próprio algorítimo. Curioso, não ?

quarta-feira, 28 de agosto de 2013

Node.js, MongoDB e Heroku

curl https://raw.github.com/startup-class/setup/master/setup.sh | bash
git clone https://github.com/startup-class/bitstarter-ssjs-db.git
cd bitstarter-ssjs-db
./setup-ssjs.sh
vi .env
foreman start

http://coenraets.org/blog/2012/10/creating-a-rest-api-using-node-js-express-and-mongodb/

git clone git://github.com/ccoenraets/nodecellar
cd nodecellar/
wget http://fastdl.mongodb.org/linux/mongodb-linux-x86_64-2.4.6.tgz
ls
tar -xvzf mongodb-linux-x86_64-2.4.6.tgz
sudo mv -n mongodb-linux-x86_64-2.4.6 /usr/local/mongodb
sudo mkdir -p /data/db
sudo chown `id -u` /data/db
cd /usr/local/mongodb
./bin/mongod
sudo npm install mongodb
sudo npm install express
nohup /usr/local/mongodb/bin/mongod &
cd ~/bitstarter/nodecellar/
node ./server.js

http://192.168.56.103:3000/#wines

heroku login
heroku account
heroku apps
heroku apps:destroy lit-bayou-1608
heroku apps:create
git push heroku master


terça-feira, 13 de agosto de 2013

Cursos de SDN e Startup Engineering no Coursera

Consegui terminar o curso do Nick Feamster no Coursera. Que experiência fantástica ! Escrever programas em cima do POX, Pyretic e Resonance é IMHO, a melhor forma de se entender realmente as diferenças dos conceitos envolvidos. Só se aprende fazendo.   
Me impressionou o nível altíssimo do curso. O interessante que pude utilizar o que aprendi nos outros cursos do Coursera, como o de Python e de Startup Engineering.
É curioso como uma coisa acaba levando à outra.

sábado, 15 de junho de 2013

Dicas de instalação de controladores Openflow


ofsoftswitch13

sudo apt-get install libpcap-dev libxerces-c2-dev libpcre3-dev flex bison libboost-all-dev
wget http://www.nbee.org/download/nbeesrc-12-11-12.php
mv nbeesrc-12-11-12.php nbeesrc-12-11-12.zip
unzip nbeesrc-12-11-12.zip
http://www.nbee.org/doku.php - biblioteca para processamento de pacotes. Usada pelo OFsoftswitch

git clone git://github.com/CPqD/ofsoftswitch13
cd nbeesrc-2012-11-12/src
cmake .
make
sudo cp ../bin/libn*.so /usr/local/lib


git clone git://github.com/CPqD/nox13oflib
To start the controller, run the following commands:

sudo apt-get install libboost-filesystem-dev
sudo apt-get install libboost-test-dev
cd /home/openflow/nox13oflib/
./boot.sh
./configure
make
~/openflow13/nox13oflib/src

cd /home/openflow/nox13oflib/build/src
    ./nox_core -i ptcp:<port> [applications]

Wireshark
 cp openflow.so /usr/lib/wireshark/libwireshark1/plugins

 cd /home/openflow/ofdissector/test


 self.cmd( 'ofdatapath -i ' + ','.join( intfs ) +
        ' punix:/tmp/' + self.name + mac_str + ' --no-slicing ' +
        ' 1> ' + ofdlog + ' 2> ' + ofdlog + ' &' )
self.cmd( 'ofprotocol unix:/tmp/' + self.name +
        ' tcp:%s:%d' % ( controller.IP(), controller.port ) +
        ' --fail=closed ' + self.opts +
        ' 1> ' + ofplog + ' 2>' + ofplog + ' &' )


self.cmd( 'ofdatapath -i ' + ','.join( intfs ) +
        ' punix:/var/run/' + self.name + '.sock --no-slicing '
        +' 1> ' + ofdlog + ' 2> ' + ofdlog + ' &' )
self.cmd( 'ofprotocol unix:/var/run/' + self.name +
        '.sock tcp:%s:%d' % ( controller.IP(), controller.port )+
        ' 1> ' + ofplog + ' 2>' + ofplog + ' &' )
     
     
Mininet
sudo mn -c
 sudo mn --topo single,2 --mac --switch user --controller remote

sudo dpctl  unix:/tmp/s1 stats-flow table=0

sudo dpctl  unix:/tmp/s1 flow-mod table=0,cmd=add in_port=2 apply:output=1
sudo dpctl  unix:/tmp/s1 flow-mod table=0,cmd=add in_port=1 apply:output=2
Meter para 5 Mbps
sudo dpctl unix:/tmp/s1 meter-mod cmd=add,flags=1,meter=1 drop:rate=5000
sudo dpctl unix:/tmp/s1 flow-mod table=0,cmd=add in_port=1 meter:1 apply:output=2
altera para 10 Mbps
sudo dpctl unix:/tmp/s1 meter-mod cmd=mod,flags=1,meter=1 drop:rate=10000

NOX
~/nox13oflib/build/src$ ./nox_core -v -i ptcp:6633 switch

POX
openflow@openflowvm:~/pox$ ./pox.py log.level --DEBUG forwarding.l2_learning  openflow.keepalive
./pox.py samples.pretty_log forwarding.l2_learning  openflow.keepalive
POX com Spanning Tree
./pox.py forwarding.l2_learning openflow.discovery openflow.spanning_tree

 POX com servidor DHCP
 ./pox.py log.level --DEBUG forwarding.l2_learning misc.dhcpd --network=172.31.1.0/24 --ip=172.31.1.1 --first=10 --last=None --router=None --dns=4.2.2.1
sudo mn --topo single,2 --switch user --controller remote

./pox.py forwarding.l2_learning web.webcore
curl -i -X POST -d '{"method":"get_flow_stats","params":{"dpid":"00-00-00-00-01-11"},"id":0}' http://127.0.0.1:8000/OF/
curl -i -X POST -d '{"method":"get_switches", "id":0}' http://127.0.0.1:8000/OF/
curl -i -X POST -d '{"method":"get_switch_desc","params":{"dpid":"00-00-00-00-01-11"},"id":0}' http://127.0.0.1:8000/OF/
curl -i -X POST -d '{"method":"set_table","params":{"dpid":"00-00-00-00-01-11","flows":[{"actions":[{"type":"OFPAT_OUTPUT","port":"OFPP_ALL"}],"match":{}}]},"id":0}' http://127.0.0.1:8000/OF/
curl -i -X POST -d '{"method":"set_table","params":{"dpid":"00-00-00-00-01-12","flows":[{"actions":[{"type":"OFPAT_OUTPUT","port":"OFPP_ALL"}],"match":{}}]},"id":0}' http://127.0.0.1:8000/OF/

SNAC
apt-get install openssl libboost-test1.34.1 libboost-filesystem1.34.1 libboost-serialization1.34.1 libxerces-c28 python2.5 python-twisted python-simplejson python-mako python-openssl tmpreaper python-sphinx libldap2-dev



POXDESK
git clone https://github.com/noxrepo/pox
cd pox
git checkout betta
cd ext
git clone https://github.com/MurphyMc/poxdesk
cd poxdesk
wget http://downloads.sourceforge.net/qooxdoo/qooxdoo-2.0.2-sdk.zip
unzip qooxdoo-2.0.2-sdk.zip
mv qooxdoo-2.0.2-sdk qx
cd poxdesk
./generate.py
cd ../../..
basico ./pox.py samples.pretty_log web messenger messenger.log_service messenger.ajax_transport openflow.of_service poxdesk
completo   ./pox.py samples.pretty_log web messenger messenger.log_service messenger.ajax_transport openflow.of_service poxdesk openflow.discovery poxdesk.tinytopo poxdesk.terminal
http://192.168.56.102:8000/poxdesk/


OPENVSWITCH
sudo  ovsdb-server --remote=punix:/usr/local/var/run/openvswitch/db.sock --remote=db:Open_vSwitch,manager_options --pidfile --detach


ROUTEFLOW
cd rftest
sudo ./create
sudo ./rftest1 --nox
sudo lxc-console -n b1     (sai com ctl-a-q)
ping 172.31.2.2
liga interface grafica cd rfweb/
python rfweb_server.py &
http://192.168.31.129:8080/index.html
entra na maquina virtual rfvm1  sudo lxc-console -n rfvm1

Config da interface de rede
/etc/network/interfaces
auto eth0
iface eth0 inet static
address 10.0.0.100
netmask 255.255.255.0
gateway 10.0.0.1

RYU
http://osrg.github.io/ryu/


FLOODLIGHT

sudo apt-get install build-essential default-jdk ant python-dev eclipse
git clone git://github.com/floodlight/floodlight.git
$ cd floodlight
$ git checkout fl-last-passed-build
$ ant



openflow@mininet-vm:~$ cd floodlight/
openflow@mininet-vm:~/floodlight$ java -jar target/floodlight.jar &

FLOODLIGHT
http://192.168.31.128:8080/wm/firewall/module/status/json
http://192.168.31.128:8080/ui/index.html

Criar um passa-tudo no switch
curl -d '{"switch": "00:00:00:00:00:00:01:11", "name":"normal-drain", "cookie":"0", "priority":"0", "active":"true", "actions":"output=normal"}' http://127.0.0.1:8080/wm/staticflowentrypusher/json
Limpar os flow (que não limpa !)
http://127.0.0.1:8080/wm/staticflowentrypusher/clear/00:00:00:00:00:00:01:11/json

openflow@mininet-vm:~/floodlight$ java -jar target/floodlight.jar

sudo mn --controller=remote
sudo mn --topo single,3 --mac --switch ovsk --controller remote
sudo mn -c


http://192.168.31.128:8080/wm/firewall/module/enable/json

Grafico
http://192.168.31.128:8080/ui/index.html
http://10.1.1.39:8080/ui/index.html

curl http://localhost:8080/wm/firewall/module/status/json
curl http://localhost:8080/wm/firewall/module/enable/json
curl -X POST -d '{"switchid": "00:00:00:00:00:00:00:11"}' http://localhost:8080/wm/firewall/rules/json


curl -X POST -d '{"src-ip": "10.0.0.3/32", "action":"DENY"}' http://localhost:8080/wm/firewall/rules/json
curl -X POST -d '{"src-ip": "10.0.0.3/32"}' http://localhost:8080/wm/firewall/rules/json
curl -X POST -d '{"dst-ip": "10.0.0.3/32"}' http://localhost:8080/wm/firewall/rules/json
curl -X POST -d '{"src-ip": "10.0.0.2/32"}' http://localhost:8080/wm/firewall/rules/json
curl -X POST -d '{"dst-ip": "10.0.0.2/32"}' http://localhost:8080/wm/firewall/rules/json

$ curl -d '{"switch": "00:00:5c:26:0a:5a:c8:b2", "name":"static-flow3", "cookie":"0", "priority":"32768", "dst-mac":"22:22:22:00:cc:10","active":"true", "actions":"output=7"}' http://192.168.1.208:8080/wm/staticflowentrypusher/json
curl -d '{"switch": "00:00:00:00:00:00:00:11", "name":"static-flow3", "cookie":"1", "priority":"32768","active":"true", "actions":"output=3"}' http://127.0.0.1:8080/wm/staticflowentrypusher/json
lista flows
curl http://127.0.0.1:8080/wm/staticflowentrypusher/list/00:00:00:00:00:00:00:11/json
$ curl http://192.168.1.208:8080/wm/staticflowentrypusher /list/00:00:5c:26:0a:5a:c8:b2/json
deleta flows
$ curl http://127.0.0.1:8080/wm/staticflowentrypusher/clear/00:00:00:00:00:00:00:11/json



POXDESK
./pox.py samples.pretty_log web messenger messenger.log_service messenger.ajax_transport openflow.of_service poxdesk openflow.discovery poxdesk.tinytopo &
./pox.py  forwarding.l2_learning web messenger messenger.log_service messenger.ajax_transport openflow.of_service poxdesk openflow.discovery poxdesk.tinytopo

OPENDAYLIGHT
cd ~/controller/opendaylight/distribution/opendaylight/target/distribution.opendaylight-0.1.0-SNAPSHOT-osgipackage/opendaylight
./run.sh

service openvswitch-switch start
sudo mn --controller=remote,ip=192.168.56.102 --topo tree,3

http://192.168.56.102:8080/   admin admin

 curl -X POST -d '{"src-mac": "00:00:00:00:00:0a", "dst-mac": "00:00:00:00:00:0b"}' http://localhost:8000/rest/v1/model/link
 curl 'http://localhost:8080/rest/v1/model/link?src-switch=00:00:00:1c:73:10:3e:24'
 curl 'http://localhost:8080/rest/v1/model/link?src-switch=00:00:00:1c:73:10:3e:24' | python -mjson.tool

 OPENDAYLIGHT SDN CONTROLLER
 sudo apt-get remove openjdk-6-jre-lib openjdk-6-jre-headless
 sudo apt-get install unzip python-dev python-virtualenv \
      git openjdk-7-jdk ant build-essential

 git clone http://git.opendaylight.org/gerrit/p/net-virt-platform.git
 ./setup.sh
 make
 sudo pip install Django

 Running:

 make start-cassandra
 make start-sdncon
 make stop-sdncon reset-cassandra start-sdncon
 make start-sdnplatform
 ./cli.py
 http://192.168.56.102:8000/
  sudo mn --controller=remote,ip=192.168.56.102 --topo tree,3
 https://wiki.opendaylight.org/view/OpenDaylight_SDN_Controller_Platform_(OSCP):Installation