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 ?
terça-feira, 10 de setembro de 2013
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
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/
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
domingo, 9 de junho de 2013
The quest for the right openflow controller
Neste fim de semana testei mais um controlador Openflow, o OpenDayLight. Muito interessante, em java, possui já uma interface gráfica, com possibilidade de configuração de flows, com a garantia de continuidade da Linux Foundation. Quantos outros controladores foram descontinuados, porque uma grande empresa contratou os desenvolvedores. O Floodlight está estagnado (sem OF 1.3) desde que a Bigswitch cresceu.
Problemas: não suporta o OF 1.3 (ainda), presente em meus roteadores. Os testes mostrados no tutorial funcionam, mas um flow criado na mão, nada de funcionar, mesmo na mininet.
E que complicação, como tudo desenvolvido em java ! Com o Maven, invés do ant, usado no Floodlight (também em Java.)
A compilação e os testes estão bem documentados no Wiki e funcionou bem no Ubuntu 12.04. Só precisei instalar o Java e o maven antes: sudo apt-get install build-essential default-jdk ant python-dev eclipse maven, e um export JAVA_HOME=/usr/lib/jvm/java-6-openjdk-i386
Tentarei utilizar os testes de ACL do Floodlight, já que com a REST API isto é muito fácil, via curl.
Para OF 1.3, somente o antigo NOX, versão CPQD. Quem sabe volte a testar o Ryu.
Problemas: não suporta o OF 1.3 (ainda), presente em meus roteadores. Os testes mostrados no tutorial funcionam, mas um flow criado na mão, nada de funcionar, mesmo na mininet.
E que complicação, como tudo desenvolvido em java ! Com o Maven, invés do ant, usado no Floodlight (também em Java.)
A compilação e os testes estão bem documentados no Wiki e funcionou bem no Ubuntu 12.04. Só precisei instalar o Java e o maven antes: sudo apt-get install build-essential default-jdk ant python-dev eclipse maven, e um export JAVA_HOME=/usr/lib/jvm/java-6-openjdk-i386
Tentarei utilizar os testes de ACL do Floodlight, já que com a REST API isto é muito fácil, via curl.
Para OF 1.3, somente o antigo NOX, versão CPQD. Quem sabe volte a testar o Ryu.
sexta-feira, 3 de maio de 2013
Escócia
Último dia em Edinburgo, na Escócia. Levantamos cedo em um dia com 10 graus e chuva para pegarmos um tour pela heartofscotlandtours.co.uk. Não tínhamos reservado com antecedência, mas havia lugares vagos na minivan. Nós, três alemães e mais 8 brasileiros ! Que azar, mas tudo bem, fora a chuva, muito pesada, a guia muito simpática e com um sotaque excelente, ao contrário das demais escocesas, que parecem que falam com duas batatas na boca.
Começamos pela Forth Rail Bridge, uma bela vista das pontes suspensas.
Começamos pela Forth Rail Bridge, uma bela vista das pontes suspensas.
A viagem foi pelo castelo de Stirling, pelo Loch Lemond, pelo castelo Doune, onde o Monty Pyton gravou uma das cenas do Cálice Sagrado, almoço em uma pub muito legal, onde comemos um peixe assado com limão delicioso e uma IPA local. Deu para ver do lado as vaquinhas peludas Hamish.
Depois teve a visita à destilaria Glengoyne, tudo debaixo de chuva e frio. Muito legal também, experimentar os wiskys de 15 e 18 anos por 10 pounds. As destilarias ficavam escondidas para não pagarem impostos para a Inglaterra.
quinta-feira, 25 de abril de 2013
O inferno que é inovar.
Estou há dois dias tentando instalar alguns pacotes para rodar o Openflow 1.3 em um Ubuntu 12.04. Antes havia rodado os aplicativos em uma VM pré preparada e tudo bem. Mas agora a VM que utilizava uma versão anterior do Ubuntu foi "deprecated", me vi tendo de instalar do zero.
Tenho uma certa experiência em instalar pacotes e compilar programas no Linux, já o faço há 18 anos. mesmo assim é sempre uma "quebra de pedras". São bibliotecas que faltam, instruções parciais, scripts com bugs ou que se referem a outras versões dos pacotes. Um inferno.
Alguns funcionaram, mas o LXC nem por reza braba e muito trabalho nos scripts. Outros, como o ryu, até funcionaram depois de muitos módulos adicionais que foram instalados. O floodlight foi bem simples, mas ainda não tem suporte ao OF1.3. Como os OpenWRT que possuo somente funcionam com o OF1.3 e não existe backward compatibility com o OF1.0, ele não tem serventia. Uma pena, porque parece ser uma excelente escolha de controlador OF. Vou tentar usar o ryu mesmo, porque o NOX OF1.3 funciona, mas está sendo descontinuado.
E assim vou quebrando pedras neste inferno.
Tenho uma certa experiência em instalar pacotes e compilar programas no Linux, já o faço há 18 anos. mesmo assim é sempre uma "quebra de pedras". São bibliotecas que faltam, instruções parciais, scripts com bugs ou que se referem a outras versões dos pacotes. Um inferno.
Alguns funcionaram, mas o LXC nem por reza braba e muito trabalho nos scripts. Outros, como o ryu, até funcionaram depois de muitos módulos adicionais que foram instalados. O floodlight foi bem simples, mas ainda não tem suporte ao OF1.3. Como os OpenWRT que possuo somente funcionam com o OF1.3 e não existe backward compatibility com o OF1.0, ele não tem serventia. Uma pena, porque parece ser uma excelente escolha de controlador OF. Vou tentar usar o ryu mesmo, porque o NOX OF1.3 funciona, mas está sendo descontinuado.
E assim vou quebrando pedras neste inferno.
sexta-feira, 19 de abril de 2013
Modificando o SSID e a chave WPA2 padrão do OpenWrt de acordo com o endereço MAC do AP
Meu problema era criar uma versão de firmware OpenWrt padrão, para ser instalado em milhares de roteadores de um mesmo modelo, o TP-Link WR-841nd. O firmware deveria ser customizado de uma forma que o técnico de instalação tivesse o menor trabalho possível.
Uma forma de customizar a configuração é copiar o diretório /etc de um roteador já configurado para a o diretório trunk/package/files da árvore de compilação do OpenWrt ,antes da compilação final da imagem (make).
Porém eu queria que cada roteador tivesse um SSID diferente, tipo REDE-XX, onde o XX é o último byte em hexa do endereço MAC da placa Wireless do roteador. Também seria importante que a chave WPA2 fosse diferente para roteador e que ela fosse de fácil acesso para o cliente. Então optei por utilizar o MAC completo como chave (sem os ":"), já que ele está impresso em uma etiqueta embaixo do equipamento.
No OpenWrt, se não existir um arquivo padrão /etc/config/wireless, ele é criado no primeiro "boot" do equipamento pelo script /sbin/wifi, que por sua vez utiliza a biblioteca /lib/wifi/mac80211.sh.
O que fiz foi alterar o arquivo trunk/package/mac80211/files/lib/wifi/mac80211.sh na árvore de compilação, alterando as últimas linhas do para o seguinte:
...
new_ssid=" option ssid REDE-$(cut -f6 -d: /sys/class/ieee80211/${dev}/macaddress)"
new_pass=" option key $(cut -c1-2,4-5,7-8,10-11,13-14,16-17 /sys/class/ieee80211/${dev}/macaddress)"
cat <<EOF
config wifi-device radio$devidx
option type mac80211
option channel ${channel}
option hwmode 11${mode_11n}${mode_band}
$dev_id
$ht_capab
# REMOVE THIS LINE TO ENABLE WIFI:
#option disabled 1
config wifi-iface
option device radio$devidx
option network lan
option mode ap
$new_ssid
option encryption psk2
$new_pass
...
Uma forma de customizar a configuração é copiar o diretório /etc de um roteador já configurado para a o diretório trunk/package/files da árvore de compilação do OpenWrt ,antes da compilação final da imagem (make).
Porém eu queria que cada roteador tivesse um SSID diferente, tipo REDE-XX, onde o XX é o último byte em hexa do endereço MAC da placa Wireless do roteador. Também seria importante que a chave WPA2 fosse diferente para roteador e que ela fosse de fácil acesso para o cliente. Então optei por utilizar o MAC completo como chave (sem os ":"), já que ele está impresso em uma etiqueta embaixo do equipamento.
No OpenWrt, se não existir um arquivo padrão /etc/config/wireless, ele é criado no primeiro "boot" do equipamento pelo script /sbin/wifi, que por sua vez utiliza a biblioteca /lib/wifi/mac80211.sh.
O que fiz foi alterar o arquivo trunk/package/mac80211/files/lib/wifi/mac80211.sh na árvore de compilação, alterando as últimas linhas do para o seguinte:
...
new_ssid=" option ssid REDE-$(cut -f6 -d: /sys/class/ieee80211/${dev}/macaddress)"
new_pass=" option key $(cut -c1-2,4-5,7-8,10-11,13-14,16-17 /sys/class/ieee80211/${dev}/macaddress)"
cat <<EOF
config wifi-device radio$devidx
option type mac80211
option channel ${channel}
option hwmode 11${mode_11n}${mode_band}
$dev_id
$ht_capab
# REMOVE THIS LINE TO ENABLE WIFI:
#option disabled 1
config wifi-iface
option device radio$devidx
option network lan
option mode ap
$new_ssid
option encryption psk2
$new_pass
...
A ideia básica do que eu fiz está aí, mas somente edite o arquivo se conseguir entender o código.
quarta-feira, 17 de abril de 2013
segunda-feira, 15 de abril de 2013
Coursera e SDN
Agora estou cursando Python na Coursera,org. Fantástico, até com legendas em português no vídeo.
Mês que vem inicia um curso de Software Definied Networks e Openflow. Parece ser de nível 101, mas nunca é demais ouvir o que estão mostrando ao mundo sobre este novo paradigma, ops, "inovação não linear".
Mês que vem inicia um curso de Software Definied Networks e Openflow. Parece ser de nível 101, mas nunca é demais ouvir o que estão mostrando ao mundo sobre este novo paradigma, ops, "inovação não linear".
sexta-feira, 12 de abril de 2013
Compilação do OpenWRT Barrier Breaker para o TP-Link WR1043nd com suporte ao OpenFlow 1.3
O pessoal do CPQD lançou a versão de um softswitch user-space com suporte ao OpenFlow 1.3 em https://github.com/CPqD/ofsoftswitch13/wiki/OpenFlow-1.3-for-OpenWRT. As instruções de compilação apresentadas são para a versão antiga do OpenWrt, então tentei compilar uma imagem mais atual. As imagens compiladas, que devem funcionar com o TP-Link WR-1043:
- para a versão de hardware até a 1.11 (só testei com a 1.8): Openflow 1.3
- para a versão de hardware 2.0 e 2.1 (não testei): Openflow 1.3
Fiz a compilação com a versão "trunk" do OpenWRT (Barrier Breaker) e tudo funcionou muito bem.
Alternativamente, tenho estas versões compiladas com o branch estável (Attitude Adjustment 12.09) para a versão de hardware até 1.11 ( a versão 2 não é suportada):
- Firmware Openflow 1.3 e o OpenFlow 1.0 (Pantou)
Para compilá-las, utilizei uma imagem padrão do Ubuntu 12.04 para o Virtualbox, com 1,5 G de memória e 20 GB de disco, em um laptop I3 com 4 Gb de RAM, Win7 64 bits.
É imprescindível ter acesso Internet de dentro da máquina virtual. Pingue o www.google.com antes de tudo.
A "receita de bolo" exata é a seguinte:
Depois de terminar a edição dos arquivos, reinicialize com o "reboot" o TP-link. Não esqueça que agora deve ser utilizada a porta WAN para o acesso telnet ao endereço de gerência.
O comando "ps" deve mostrar duas linhas similares a estas:
ofdatapath ptcp:6634 -i eth0.1 eth0.2 eth0.3 eth0.4 wlan0 --no-slicing --no-local-port --pidfile -d 000000000011
ofprotocol tcp:127.0.0.1:6634 tcp:192.168.1.130 --fail=closed -D --pidfile=/var/run/ofprotocol.pid --out-of-band
Se algo der errado, há a possibilidade do System Rescue, como explicado em http://wiki.openwrt.org/doc/howto/generic.failsafe#in.failsafe.mode . A pagina do Wiki do OpenWRT para o TP-link WR-1043nd é muito útil, no caso de problemas.
Update:
O desempenho medido com o Iperf, entre dois micros ligados em dois switches separados está abaixo:
- para a versão de hardware até a 1.11 (só testei com a 1.8): Openflow 1.3
- para a versão de hardware 2.0 e 2.1 (não testei): Openflow 1.3
Fiz a compilação com a versão "trunk" do OpenWRT (Barrier Breaker) e tudo funcionou muito bem.
Alternativamente, tenho estas versões compiladas com o branch estável (Attitude Adjustment 12.09) para a versão de hardware até 1.11 ( a versão 2 não é suportada):
- Firmware Openflow 1.3 e o OpenFlow 1.0 (Pantou)
Para compilá-las, utilizei uma imagem padrão do Ubuntu 12.04 para o Virtualbox, com 1,5 G de memória e 20 GB de disco, em um laptop I3 com 4 Gb de RAM, Win7 64 bits.
É imprescindível ter acesso Internet de dentro da máquina virtual. Pingue o www.google.com antes de tudo.
A "receita de bolo" exata é a seguinte:
sudo su -
Digite o seguinte na mesma linha: apt-get install git quilt build-essential binutils flex bison autoconf gettext texinfo sharutils subversion libncurses5-dev ncurses-term zlib1g-dev gawk
exit
mkdir ~/openwrt
cd ~/openwrt
svn co svn://svn.openwrt.org/openwrt/trunk/
cd trunk
./scripts/feeds update -a
./scripts/feeds install -a
make menuconfig
Select Target Profile (TP-LINK TL-WR1043N/ND)
make prereq
make
cd ~/openwrt
git clone https://github.com/CPqD/openflow-openwrt.git
cd ~/openwrt/trunk/package/
ln -s ~/openwrt/openflow-openwrt/openflow-1.3/
cd ~/openwrt/trunk/
ln -s ~/openwrt/openflow-openwrt/openflow-1.3/files
make menuconfig
Select (*) OpenFlow package under network
Select (*) tc package under network
Select kmod-tun under Kernel Modules->Network Support
Save and Exit
make kernel_menuconfig
Under Networking Support->Networking options->QoS and/or fair queueing select Hierarchical Token Bucket (HTB)
Save and Exit
Dica opcional: se quiser gravar os arquivos de configuração para que eles fiquem na imagem compilada, os grave em ~/openwrt/trunk/files/etc/configAgora faça a compilação final:
make
E voilá, a sua imagem estará em ~/openwrt/trunk/bin/ar71xx/openwrt-ar71xx-generic-tl-wr1043nd-v1-jffs2-factory.bin, após a longa compilação. A copie para o seu Windows utilizando o WinSCP ou similar. Faça o upgrade do firmware pela tela de gerência web do TP-link.
Caso o roteador já esteja com o OpenWRT instalado, copie com o WinSCP (modo SCP) o arquivo para o /tmp do TP-Link e utilize o seguinte comando para fazer o upgrade:
Primeiramente crie o seguinte vínculo estático. Sem ele, os processos do openflow não "sobem":
Altere todos os arquivos abaixo para não se incomodar.
Caso o roteador já esteja com o OpenWRT instalado, copie com o WinSCP (modo SCP) o arquivo para o /tmp do TP-Link e utilize o seguinte comando para fazer o upgrade:
mtd -r write /tmp/openwrt-ar71xx-generic-tl-wr1043nd-v1-jffs2-factory.bin firmware
Depois do upgrade feito, conecte o seu micro em uma das portas LAN do roteador e acesse por telnet (ou Putty) o endereço 192.168.1.1.Primeiramente crie o seguinte vínculo estático. Sem ele, os processos do openflow não "sobem":
cd /etc
ln -s /lib/functions.sh
cd /sbin
ln -s /usr/sbin/tc
Faça uma cópia dos arquivos originais e edite os seguintes arquivos, para que fiquem exatamente como o modelo a seguir. O endereço de gerência será alterado para 192.168.1.111, agora na porta WAN, com o endereço do controlador definido para 192.168.1.130, mas podem ser modificados (e devem ser para os demais roteadores) com a alteração dos valores em vermelho. Para ficar mais divertido, habilitei dois SSID, um WAN na a rede ligada ao plano de controle e outro na rede do plano de dados.Altere todos os arquivos abaixo para não se incomodar.
cp /etc/config/network /etc/config/network.ori cp /etc/config/firewall /etc/config/firewall.ori cp /etc/config/wireless /etc/config/wireless.ori cp /etc/config/openflow /etc/config/openflow.ori
Utilizo o "cat" para sobrescrever os arquivos originais, mas podem ser editados com o "vi".
cat > /etc/config/network
config switch
option name 'rtl8366rb'
option reset '1'
option enable_vlan '1'
option enable_learning '0'
config switch_vlan
option device 'rtl8366rb'
option vlan '1'
option ports '1 5t'
config switch_vlan
option device 'rtl8366rb'
option vlan '2'
option ports '2 5t'
config switch_vlan
option device 'rtl8366rb'
option vlan '3'
option ports '3 5t'
config switch_vlan
option device 'rtl8366rb'
option vlan '4'
option ports '4 5t'
config switch_vlan
option device 'rtl8366rb'
option vlan '5'
option ports '0 5t'
config interface 'loopback'
option ifname 'lo'
option proto 'static'
option ipaddr '127.0.0.1'
option netmask '255.0.0.0'
config interface
option ifname 'eth0.1'
option proto 'static'
config interface
option ifname 'eth0.2'
option proto 'static'
config interface
option ifname 'eth0.3'
option proto 'static'
config interface
option ifname 'eth0.4'
option proto 'static'
config interface 'wan'
option ifname 'eth0.5'
option proto 'static'
option ipaddr '192.168.1.111'
option netmask '255.255.255.0'
option type 'bridge'
tecle <ctrl-d>
cat > /etc/config/wireless
config wifi-device radio0
option type mac80211
option channel 11
option hwmode 11ng
option path 'platform/ath9k'
option htmode HT20
list ht_capab SHORT-GI-40
list ht_capab DSSS_CCK-40
# REMOVE THIS LINE TO ENABLE WIFI:
#option disabled 1
config wifi-iface wlan0
option device radio0
# option network lan
option mode ap
option ssid OpenFlow-111-lan
option encryption none
config wifi-iface wlan1
option device radio0
option network wan
option mode ap
option ssid OpenFlow-111-wan
option encryption none
cat > /etc/config/openflow
config 'ofswitch'
option 'dp' 'dp0'
option 'dpid' '000000000111'
option 'ofports' 'eth0.1 eth0.2 eth0.3 eth0.4 wlan0'
option 'ofctl' 'tcp:192.168.1.130'
option 'mode' 'outofband'
<ctrl-d>
cat > /etc/config/firewall config defaults option syn_flood 1 option input ACCEPT option output ACCEPT option forward ACCEPT
<ctrl-d>
cat > /etc/config/system config system option hostname 'OpenWrt' option timezone 'UTC' config timeserver 'ntp' list server '0.openwrt.pool.ntp.org' list server '1.openwrt.pool.ntp.org' list server '2.openwrt.pool.ntp.org' list server '3.openwrt.pool.ntp.org' option enable_server '0' config led 'led_usb' option name 'USB' option sysfs 'tp-link:green:usb' option trigger 'usbdev' option dev '1-1' option interval '50' config led 'led_wlan' option name 'WLAN' option sysfs 'tp-link:green:wlan' option trigger 'phy0tpt'
<ctrl-d>
O comando "ps" deve mostrar duas linhas similares a estas:
ofdatapath ptcp:6634 -i eth0.1 eth0.2 eth0.3 eth0.4 wlan0 --no-slicing --no-local-port --pidfile -d 000000000011
ofprotocol tcp:127.0.0.1:6634 tcp:192.168.1.130 --fail=closed -D --pidfile=/var/run/ofprotocol.pid --out-of-band
Se algo der errado, há a possibilidade do System Rescue, como explicado em http://wiki.openwrt.org/doc/howto/generic.failsafe#in.failsafe.mode . A pagina do Wiki do OpenWRT para o TP-link WR-1043nd é muito útil, no caso de problemas.
Update:
O desempenho medido com o Iperf, entre dois micros ligados em dois switches separados está abaixo:
terça-feira, 26 de março de 2013
Seguro do tratado de Schengen grátis para que tem cartão platinum
Muitas vezes não sabemos de algumas vantagens que "ganhamos" junto com o cartão de crédito.
Esta eu descobri hoje: Quem possui cartão Master ou Visa Platinum ganha o seguro de EUR$ 30.000,00 exigido pelo tratado de Schengen. Basta ter pago as passagens ou as taxas aeroportuárias (para quem usou pontos) com o cartão. Vale para o titular, cônjuge e filhos. Para imprimir a declaração (ou carta de Schengen) para o Visa, entre em www.visa-platinum.com ou direto em http://www.visa-platinum.com/br/beneficios/carta-schengen_1044 . Para o Master, http://www.mastercard.com/br/platinum/schenge.html
Esta eu descobri hoje: Quem possui cartão Master ou Visa Platinum ganha o seguro de EUR$ 30.000,00 exigido pelo tratado de Schengen. Basta ter pago as passagens ou as taxas aeroportuárias (para quem usou pontos) com o cartão. Vale para o titular, cônjuge e filhos. Para imprimir a declaração (ou carta de Schengen) para o Visa, entre em www.visa-platinum.com ou direto em http://www.visa-platinum.com/br/beneficios/carta-schengen_1044 . Para o Master, http://www.mastercard.com/br/platinum/schenge.html
sábado, 16 de março de 2013
Suporte ao protocolo IPv6 no TP-Link WR-841n
O OpenWrt é a melhor alternativa para se obter suporte a IPv6 em roteadores Wi-Fi de baixo custo. Este suporte se refere a estabelecermos uma conexão PPPoE para um BRAS, onde um endereço IPv6 é concedido via odhcp6 e a delegação de um prefixo para ser anunciado pela LAN, pelo 6relayd.
Há uma excelente imagem para o TP-link TL-WR1043nd foi compilada por um hacker Romeno, que se baseou no release Attitude Adjustment do OpenWRT aqui. Basta usar a opção de upgrade no firmware original. Ele possui também versões para outros roteadores, basta clicar em "Parent Directory" no link acima para verificar quais os modelos suportados.
Infelizmente o roteador que temos disponível (TL-WR841n V.7.0) não possui uma imagem compilada com IPv6, então iremos pelo caminho difícil ...
Primeiramente, há o Wiki do Openwrt para o WR841ND aqui, porém Todos os links estão desatualizados, se referem a uma versão anterior do OpenWrt. Há versão pré-compilada recente, mas sem suporte a IPv6.
A minha melhor experiência foi com o uso de uma máquina virtual Virtualbox com Ubuntu 12.04, previamente utilizada para outros fins. O que tive de fazer foi acrescentar mais uma interface bridge Eth1 e aumentar a memória da VM para 1,5 GB no Virtualbox. Conectei o TP-Link na interface Eth e acessei a Internet pelo Wi-Fi do notebook.
sudo su -
apt-get install git quilt build-essential binutils flex bison autoconf gettext texinfo sharutils \
subversion libncurses5-dev ncurses-term zlib1g-dev gawk
Crie um diretório de trabalho e baixe as fontes SVN do projeto OpenWRT:
Para isso, volte a ser usuário não root e execute os comandos:
exit
mkdir ~/openwrt
cd ~/openwrt
svn co svn://svn.openwrt.org/openwrt/trunk/
cd trunk
./scripts/feeds update -a
./scripts/feeds install -a
make menuconfig
Selecione os parâmetros específicos da plataforma:
Selecione "Atheros AR71xx/AR7240/AR913x" under "Target System".
Selecione "(TP-LINK TL-WR841N/ND)" under "Target profile"
Salve e saia.
Confira se todos os pré-requisitos foram satisfeitos:
make prereq
Compile:
make
make kernel_menuconfig
habilite o suporte IPv6
make menuconfig
Neste passo, configure em
IPv6
Firewall -> todas as opções
odhcp6c
Luci
Collections
Protocols - IPv6
Em outras opções, habilite o Luci (ambiente gráfico), inclusive para o RADVD.
Gere a imagem final:
make
ATENÇÃO: Não há garantias que o roteador não será "bricado", com a mesma serventia de um peso de papel após o procedimento a seguir.
Faça upload da imagem (~/openwrt/trunk/bin/ar71xx/openwrt-ar71xx-generic-tl-wr841nd-v7-squashfs-factory.bin) para o TP-Link pela interface gráfica do mesmo, na opção "firmware upgrade".
Retorno ao firmware de fábrica
Para voltar ao firmware original, baixe o arquivo do site da TP-link, descompacte-o e copie para o diretório /tmp via wget. Precisará de um servidor http para isso, pode ser o próprio apache do Ubuntu ou, se quiser instalar um HTTP server em seu micro com Windows 7, sugiro o Sami .
Renomeie o arquivo original para tplink.bin e execute o comando:
mtd -r write /tmp/tplink.bin firmware
Há uma excelente imagem para o TP-link TL-WR1043nd foi compilada por um hacker Romeno, que se baseou no release Attitude Adjustment do OpenWRT aqui. Basta usar a opção de upgrade no firmware original. Ele possui também versões para outros roteadores, basta clicar em "Parent Directory" no link acima para verificar quais os modelos suportados.
Infelizmente o roteador que temos disponível (TL-WR841n V.7.0) não possui uma imagem compilada com IPv6, então iremos pelo caminho difícil ...
Primeiramente, há o Wiki do Openwrt para o WR841ND aqui, porém Todos os links estão desatualizados, se referem a uma versão anterior do OpenWrt. Há versão pré-compilada recente, mas sem suporte a IPv6.
Compilando a nova versão.
Referência: http://wiki.openwrt.org/doc/howto/build
A minha melhor experiência foi com o uso de uma máquina virtual Virtualbox com Ubuntu 12.04, previamente utilizada para outros fins. O que tive de fazer foi acrescentar mais uma interface bridge Eth1 e aumentar a memória da VM para 1,5 GB no Virtualbox. Conectei o TP-Link na interface Eth e acessei a Internet pelo Wi-Fi do notebook.
Receita de bolo:
Instale as dependências para o processo de compilação:sudo su -
apt-get install git quilt build-essential binutils flex bison autoconf gettext texinfo sharutils \
subversion libncurses5-dev ncurses-term zlib1g-dev gawk
Crie um diretório de trabalho e baixe as fontes SVN do projeto OpenWRT:
Para isso, volte a ser usuário não root e execute os comandos:
exit
mkdir ~/openwrt
cd ~/openwrt
svn co svn://svn.openwrt.org/openwrt/trunk/
cd trunk
./scripts/feeds update -a
./scripts/feeds install -a
make menuconfig
Selecione os parâmetros específicos da plataforma:
Selecione "Atheros AR71xx/AR7240/AR913x" under "Target System".
Selecione "(TP-LINK TL-WR841N/ND)" under "Target profile"
Salve e saia.
Confira se todos os pré-requisitos foram satisfeitos:
make prereq
Compile:
make
make kernel_menuconfig
habilite o suporte IPv6
make menuconfig
Neste passo, configure em
IPv6
Firewall -> todas as opções
odhcp6c
Luci
Collections
Protocols - IPv6
Em outras opções, habilite o Luci (ambiente gráfico), inclusive para o RADVD.
Gere a imagem final:
make
ATENÇÃO: Não há garantias que o roteador não será "bricado", com a mesma serventia de um peso de papel após o procedimento a seguir.
Faça upload da imagem (~/openwrt/trunk/bin/ar71xx/openwrt-ar71xx-generic-tl-wr841nd-v7-squashfs-factory.bin) para o TP-Link pela interface gráfica do mesmo, na opção "firmware upgrade".
Retorno ao firmware de fábrica
Para voltar ao firmware original, baixe o arquivo do site da TP-link, descompacte-o e copie para o diretório /tmp via wget. Precisará de um servidor http para isso, pode ser o próprio apache do Ubuntu ou, se quiser instalar um HTTP server em seu micro com Windows 7, sugiro o Sami .
Renomeie o arquivo original para tplink.bin e execute o comando:
mtd -r write /tmp/tplink.bin firmware
quarta-feira, 13 de março de 2013
Primeiro post !
Criei este blog como uma forma de documentar as "quebras de pedras"que enfrento na vida profissional e acadêmica todos os dias. É mais para uso pessoal, mas se o Google achar uma dica minha que sirva para outras pessoas, será muito gratificante.
Meus interesses são bem "nerds", indo desde experiências com o Arduíno, Android, e sistemas embarcados em geral até o tema de minha tese, de aplicações para Redes Definidas por Software (SDN).
Pretendo escrever algo sobre meus outros interesses não "nerds"(peronomutcho) como Sax e alguns livros de filosofia que o acaso acaba me trazendo.
Sobre mim, não quero falar muito. Sou um engenheiro eletricista, que começou a vida profissional fazendo um curso de eletrônica por correspondência no Instituto Universal Brasileiro aos 11 anos, fiz o curso técnico e depois engenharia eletrônica no CEFET-PR, mestrado em informática na PUC-PR, e agora me aventurando em um doutorado em paralelo ao trabalho em uma empresa de Telecom. Posso dizer que não é fácil, mas vou tocar, pois afinal é algo que dura apenas quatro anos. Até mais !
Meus interesses são bem "nerds", indo desde experiências com o Arduíno, Android, e sistemas embarcados em geral até o tema de minha tese, de aplicações para Redes Definidas por Software (SDN).
Pretendo escrever algo sobre meus outros interesses não "nerds"(peronomutcho) como Sax e alguns livros de filosofia que o acaso acaba me trazendo.
Sobre mim, não quero falar muito. Sou um engenheiro eletricista, que começou a vida profissional fazendo um curso de eletrônica por correspondência no Instituto Universal Brasileiro aos 11 anos, fiz o curso técnico e depois engenharia eletrônica no CEFET-PR, mestrado em informática na PUC-PR, e agora me aventurando em um doutorado em paralelo ao trabalho em uma empresa de Telecom. Posso dizer que não é fácil, mas vou tocar, pois afinal é algo que dura apenas quatro anos. Até mais !
Assinar:
Postagens (Atom)