Procedimentos para flash do DIR-300 com DD-WRT e OpenWRT - versão 2

Estudando e testando redes Mesh nos deparamos com a necessidade de trocar o firmware original dos roteadores para firmwares livres. Neste pequeno artigo demonstraremos a troca do firmware para o roteador D-Link modelo DIR-300, um equipamento barato e de fácil acesso no mercado brasileiro. Por Rodrigo Troian e Vinicius John.

[ Hits: 27.700 ]

Por: Vinicius John em 26/03/2010


Introdução



Este artigo é de co-autoria de Rodrigo Troian e Vinicius John.

Estudando e testando redes Mesh nos deparamos com a necessidade de trocar o firmware original dos roteadores para firmwares livres. Neste pequeno artigo demonstraremos a troca do firmware para o roteador D-Link modelo DIR-300, um equipamento barato e de fácil acesso no mercado brasileiro, que após a troca do sistema operacional deve agregar alguns reais a mais, pois o mesmo passa a permitir seu uso com WDS, múltiplas interfaces wifi virtuais, estatísticas, acesso ssh, QOs, rodar protocolos de rede mesh (olsr, b.a.t.m.a.n., etc.) enfim, coisas que só o GNU/Linux faz para você!

Tenha clareza de que você estará modificando o software que controla todo o hardware do seu equipamento, o sistema operacional. Qualquer problema que ocorra principalmente durante os processos críticos de gravação poderá danificar o hardware permanentemente, faça por sua conta e risco! Mas os resultados compensam, e como! :-)

A parte inicial da troca do firmware deste router é igual tanto para DD-WRT como OpenWRT. Este script foi escrito e testado usando sistema operacional GNU/Linux e OS X como estação.

Dicas: tenha paciência e vá com calma. Verificando duas vezes antes de dar os comandos. No caso de uploads de arquivo, verifique se os arquivos existem e o servidor tftp está escutando. Aguarde os comandos retornarem ao prompt, muitas vezes demoram um pouco na execução. Se houver possibilidade, conecte seu roteador e micro a nobreak.

Material necessário: microcomputador com placa de rede disponível, servidor tftp (no GNU/Linux usamos atftpd), putty no GNU/Linux e telnet no OS X, cabo de rede, roteador D-Link Dir-300 e o seguinte script para abrir o gerenciador de boot do roteador, conforme segue:
# cat scriptdd.bash

#!/bin/bash

echo ""
echo "Usando IP padrao gerenciador boot original do DIR-300: 192.168.20.81"
host="192.168.20.81"

#Para acessar o gerenciador de boot do dd-wrt comente as duas linhas acima e
#descomente as duas abaixo
#echo "Usando IP padrao do dd-wrt: 192.168.1.1"
#host="192.168.1.1"

while true
do
   if eval "ping -c 1 -s 1 $host" > /dev/null; then       
       echo "Acordou o roteador. Tentando conectar via telnet"

      #no machintoch, somente o comando telnet funcionou
      #telnet $host 9000

      #para micros com sistema gnu/linux, precisamos instalar o putty e criar um arquivo
      #ctrlc.txt com o conteudo "^C" (sem aspas) e colocar no mesmo diretorio deste script
      putty telnet://$host:9000 -m ctrlc.txt
      break
   else
      echo "Esperando pelo gerenciador de boot. Pressione CTRL + C para sair."
      sleep 1
   fi
done

Começando então:

Para saber os detalhes técnicos do seu roteador, coisa que estranhamente os fabricantes não disponibilizam, um caminho é acessar o site do DD-WRT e encontrar o seu roteador (marcar/modelo), lá estão quantidade de memória ram, memória flash e processador do equipamento.

0. Baixar os arquivos necessários:
   No site do DD-WRT baixe os arquivos ap61.ram e ap61.rom.
   No site do OpenWRT.org, encontre a versão que você quer (kamikaze/backfire - última), acesse a pasta correspondente ao sistema, no caso do DIR-300 atheros, e baixe openwrt-atheros-vmlinux.lzma e openwrt-atheros-root.squashfs. Cuidado com estes arquivos, é importante um correto download. Já copie os arquivos na raiz do servidor tftp. Nós utilizamos o OpenWRT na versão kamikaze 8.09.2.

1. Configurar IP local manualmente para 192.168.20.80/24 (255.255.255.0). Se estiver usando o network-manager no GNU/Linux, faça através dele ou desative-o e faça manualmente.

2. Conectar o cabo de rede no micro e na porta WAN do roteador.

3. Desligar a energia elétrica do router e religar, já pressionando o botão reset localizado na parte de trás do router. Assim que ligar, inicie o script no micro (conforme comando abaixo) e mantenha o reset pressionado até a mensagem "Router Awake" aparecer já como saída do script.

# bash scriptdd.bash

4. Aguarde o prompt do RedBoot aparecer (gerenciador de boot padrão do DIR-300).

Usando IP padrao DIR-300: 192.168.20.81
Waiting for Redboot to boot. Press CTRL + C to quit
Router Awake
Trying 192.168.20.81...
Connected to 192.168.20.81.
Escape character is '^]'.
RedBoot>

5. Levante o tftp server (no Debian/Ubuntu atftpd), com os arquivos necessários já copiados para sua raiz (ap61.ram e ap61.rom para /tftpboot). Tenha certeza que o tftp esteja rodando ("ps aux | grep ftp" ou "netstat -anp | grep ftp"). Caso utilize firewall, desative-o ou libere a porta padrão do tftp (69).

6. Digite no prompt do RedBoot. Estaremos carregando o sistema de boot do dd-wrt para a memória ram. Se houver interrupção de energia, será necessário gravar novamente a ram.

RedBoot> load ap61.ram
Using default protocol (TFTP)
Entry point: 0x800410bc, address range: 0x80041000-0x800680d8

Caso dê timeout na saída do comando load, o router não está conseguindo conectar ao servidor tftp, reveja suas configurações. Também é útil utilizar um sniffer de pacotes para ver o que está acontecendo.

Reiniciando o router:

RedBoot> go

7. Troque o IP da placa de rede do micro para 192.168.1.2/24. O equipamento agora já irá carregar o gerenciador de boot do dd-wrt gravado na ram.

# telnet 192.168.1.1 9000
Trying 192.168.1.1...
Connected to 192.168.1.1.
Escape character is '^]'.
DD-WRT>

Observe que o prompt já é diferente. Lembre-se de reiniciar o servidor tftp depois da mudança de IP da placa de rede.

Continuando então...

Apagando a flash de inicialização, incluindo a rom de inicialização original, portanto a partir de agora, não pode haver interrupção de energia.

DD-WRT> fis init
About to initialize [format] FLASH image system - continue (y/n)? y
*** Initialize FLASH Image System
... Erase from 0xbffe0000-0xbfff0000: .
... Program from 0x80ff0000-0x81000000 at 0xbffe0000: .
DD-WRT>

Confirmando endereço IP do micro:

DD-WRT> ip_address -h 192.168.1.2
IP: 192.168.1.1/255.255.255.0, Gateway: 0.0.0.0
Default server: 192.168.1.2

Carregando a ROM de inicialização:

DD-WRT> load -r -b %{FREEMEMLO} ap61.rom
Using default protocol (TFTP)
Raw file loaded 0x80080000-0x800a8717, assumed entry at 0x80080000

Montando a imagem da rom.

DD-WRT> fis create -l 0x30000 -e 0xbfc00000 RedBoot
An image named 'RedBoot' exists - continue (y/n)? y
... Erase from 0xbfc00000-0xbfc30000: ...
... Program from 0x80080000-0x800a8718 at 0xbfc00000: ...
... Erase from 0xbffe0000-0xbfff0000: .
... Program from 0x80ff0000-0x81000000 at 0xbffe0000: .

Reiniciando o router:

DD-WRT> reset

Conectando novamente:

# telnet 192.168.1.1 9000
Trying 192.168.1.1...
Connected to 192.168.1.1.
Escape character is '^]'.
DD-WRT>

Confirmando mais uma vez o IP do micro:

DD-WRT> ip_address -h 192.168.1.2
IP: 192.168.1.1/255.255.255.0, Gateway: 0.0.0.0
Default server: 192.168.1.2

Gravando a imagem da rom de boot do dd-wrt.

DD-WRT> fis init
About to initialize [format] FLASH image system - continue (y/n)? y
*** Initialize FLASH Image System
... Erase from 0xbffe0000-0xbfff0000: .
... Program from 0x80ff0000-0x81000000 at 0xbffe0000: .

Trocado o boot loader do roteador, não há problemas com interrupção de energia. Começamos os procedimentos para instalar o firmware OpenWRT do DD-WRT são diferentes e seguem separados.

telnet 192.168.1.1 9000
Trying 192.168.1.1...
Connected to 192.168.1.1.
Escape character is '^]'.

    Próxima página

Páginas do artigo
   1. Introdução
   2. Procedimentos para o OpenWRT
   3. Procedimentos para o DD-WRT
Outros artigos deste autor
Nenhum artigo encontrado.
Leitura recomendada

Vamos testar esse tal de Linux?

MP3 no Linux

Qualidade dos profissionais de TI

Como submeter dados de CDDB de um CD de áudio ao Freedb

Logstash + Redis + Elasticsearch + Kibana - Gerenciando logs

  
Comentários
[1] Comentário enviado por fabio em 26/03/2010 - 11:38h

Muito bom! Eu instalei o dd-wrt no meu roteador. Existe alguma diferença considerável entre o dd-wrt e o openwrt? A afirmativa abaixo é correta?

"DD-WRT is slick and fancy, but does not allow for much hacking, while OpenWRT is a very hacker-friendly system"

[]'s

[2] Comentário enviado por vjohn em 26/03/2010 - 12:56h

Acho que sim! O DD-WRT tem uma administração web mais amigável e estável. Você faz praticamente tudo através dela, porém é um projeto que possui versão paga também e não disponibiliza o código fonte. Enquanto que o OpenWRT é totalmente livre, com código fonte, sistema de pacotes, etc. A administração web padrão é a Luci, feita em Lua, e está muito boa, mas ainda não 100% traduzida para o português, o que estamos querendo ajudar também. Há possibilidade de usar outra administração web, o xwrt que não chegamos a testar...

[3] Comentário enviado por valtinho em 26/03/2010 - 15:18h

Cara, estava precisando de um artigo assim... mas estou com um problema. Onde eu encontro os arquivos ap61.ram e ap61.rom?

[4] Comentário enviado por Lisandro em 26/03/2010 - 15:39h

Muito interessante.

[5] Comentário enviado por rtroian em 27/03/2010 - 12:30h

Opa Valtinho, tanto o ap61.rom como o ap61.ram são encontrados no site do dd-wrt, e os arquivos para o OpenWRT se encontram no próprio site deles na pasta para o processador Atheros, que é o do DIR 300.

[6] Comentário enviado por valtinho em 29/03/2010 - 11:23h

Valeu rtroian. Segui os passos para o dd-wrt e deu tudo certo. Ja esta funcionando 100%. Muito intuitivo a interface dele. Obrigado pelo artigo.

[7] Comentário enviado por fmpfmp em 29/03/2010 - 15:34h

Eu fiz no meu logo quando comprei. Mas é um procedimento arriscado, a primeira vez não deu certo e fui obrigado a trocar o equipamento. Só que na segunda foi. A vantagem do DD-WRT é que ele te dá muito mais opções e relatórios que o firmware original, te dá um terminal baseado em Linux pra gerenciamento e aumenta o desempenho do seu equipamento.

[8] Comentário enviado por dolivervl em 31/03/2010 - 18:16h

Caso dê algum problema, tem como voltar ao firmware original ??

[9] Comentário enviado por vjohn em 31/03/2010 - 23:52h

Olá dolivervl e fmpfmp!

Como comentamos no artigo: se houver falta de luz ou interrupção de energia durante o processo de instalação do gerenciador de boot, quando ele for ligado novamente não iniciará sistema algum, ficando "morto". Existem processos para reescrever a flash, mas é necessário abrir o equipamento...

Mas depois que o novo gerenciador de boot estiver funcionando (no caso do dd-wrt), pode até haver problemas durante a instalação do OpenWrt ou do DD-wrt que você conseguirá acessar novamente o gerenciador de boot e recomeçar a instalação/configuração do sistema operacional em si! Casos extraordinários de a instalação do sistema interferir no gerenciador de boot gravado já na flash... Por isto é importante ter atenção durante todo o processo!

Até
Vinicius

[10] Comentário enviado por vjohn em 31/03/2010 - 23:53h

ps: está para sair uma versão 2 deste artigo! Deve ser publicada aqui em breve! Em todo caso, podem acessar direto o pdf:

http://softwarelivre.org/rede-mesh/032010-procedimentos-para-flash-do-dir-300-com-dd-wrt-e-openwrt-0...

Até
Vinicius

[11] Comentário enviado por vjohn em 04/04/2010 - 00:00h

ps2: é possível restaurar o firmware original sim, basta dar uma pesquisada que você acha artigos e fóruns sobre, como este: http://under-linux.org/f105/openwrt-78546/

[12] Comentário enviado por revsouza em 13/08/2011 - 19:45h

Olá amigo, eu fiz o processo do Open-Wwrt, deu tudo certo. Porem meu Router inicia e nao acende o led de wirelles, acende o led de pronto e aparece varias redes do wi-fi chamadas, mesh, open-mesh e my open-mesh. Precisa de ser feito algo a mais, poderia ajudar-me.

Valeuuu tudo excelente.

abracosss


Contribuir com comentário




Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts