DD-WRT no D-Link Dir-300 Rev A

Segue um tutorial de instalação da firmware DD-WRT em um roteador D-Link Dir-300 Rev. A.

[ Hits: 21.915 ]

Por: ANDRE NUNES BATISTA em 06/07/2010


Tutorial



Segue um tutorial de instalação da firmware DD-WRT em um roteador D-Link Dir-300 Rev. A (chipset Atheros AR2317).

Embora eu já tivesse instalado essa firmware no Linksys WRT54G v. 8.2, eu sabia que o procedimento para a instalação no Dir-300 era absolutamente diverso e bem mais complicado, sendo de pouca valia a minha experiência anterior. Pior. O tutorial disponível no site do projeto, embora preciso, era um pouco cru e, vasculhando pela rede, não encontrava nada que fosse "baby steps" (absolutamente essencial quando se pensa na possibilidade de brickar o aparelho por algum descuido).

Resumo da ópera, fui obrigado a me guiar por quatro tutoriais diferentes (mais duas páginas man) para me sentir seguro de que compreendia bem os passos necessários. Ainda assim, tive alguns problemas para me comunicar com o aparelho, de modo que senti que seria útil escrever este tutorial, cujo objetivo é tornar tão claro quanto possível o procedimento de instalação da firmware usando um sistema Debian Squeeze (provavelmente válido também para o Ubuntu).

AVISO: Este tutorial serve apenas para o DIR-300 Rev. A. A D-Link lançou uma nova versão denominada DIR-300 Rev. B, com um chipset distinto. Também é possível instalar a firmware nestes novos aparelhos, porém as instruções são diferentes, não use este tutorial. Para descobrir a versão do seu equipamento, confira o adesivo que se encontra na parte inferior do aparelho.

Acrescento que este é um procedimento arriscado, vez que qualquer erro durante a sua execução (como uma simples queda de energia ou desligamento de cabo) pode "brickar" (quebrar) o seu aparelho. É possível recuperá-lo, mas o procedimento envolve manipulação do hardware e se você está seguindo este tutorial, provavelmente não possui experiência para tanto.

Assim sendo, siga as instruções abaixo por sua conta e risco. Tudo o que eu posso garantir é que eu realizei o procedimento abaixo e tive sucesso na instalação, nada além disso.

O primeiro passo é baixar os arquivos necessários à instalação da firmware, incluindo ela própria, diretamente no site do projeto. Os arquivos necessários são:
  • ap61.ram
  • ap61.rom
  • linux.bin

Usaremos o telnet para nos comunicar com o roteador. Ele vem pré-instalado na maior parte das distribuições GNU/Linux. Para verificar se ele está instalado na sua máquina, informe:

# which telnet

Se estiver instalado, o terminal informará uma linha com o nome completo do comando. Do contrário, será preciso instalá-lo, o que pode ser feito adicionando "telnet" ao final do comando abaixo.

Usaremos também um servidor TFTP:

# apt-get install atftpd

Para que ele funcione da maneira que necessitamos, é preciso que um diretório funcione como base para os arquivos que enviaremos. O padrão do atftpd é que o /tftpboot seja este diretório. O programa, contudo, não o cria automaticamente, de modo que deve-se fazê-lo manualmente:

# mkdir /tftpboot

Este diretório precisa ter amplas permissões de leitura, escrita e execução para todos, já que será acessado pelo roteador:

# chmod 777 /tftpboot

Certifique-se de colocar os arquivos que usaremos dentro deste diretório.

Conecte o cabo de rede à porta ethernet do seu computador e à porta WAN (ou Internet) do seu roteador.

Configure a interface ethernet do seu sistema para o IP estático 192.168.20.80, gateway 255.255.255.0. Se você estiver usando o network manager, isso pode ser feito no menu "Editar Conexões". Do contrário, na linha de comando basta informar:

# ip a add 192.168.20.80/24 dev eth0

Certifique-se também de que a interface eth0 é a que está em uso:

# ip link set dev eth0 up

Note que os comandos acima não irão funcionar adequadamente se o network manager estiver gerenciando as conexões.

Aperte e segure o botão de reset do roteador com um lápis ou equivalente. Ligue-o enquanto segura o botão pressionado e continue a segurá-lo por 30 segundos, enquanto o roteador é inicializado.

Usando o telnet, conecte-se ao endereço 192.168.20.81 porta 9000 do roteador:

# telnet 192.168.20.81 9000

Esse passo deve ser executado rapidamente porque o Redboot fica acessível por pouco tempo após a inicialização, se for necessário, repita o passo acima até que o prompt apresente a seguinte tela:

RedBoot>

Informe então:

RedBoot> load ap61.ram
Using default protocol (TFTP)
Entry point: 0×800410bc, address range: 0×80041000-0×800680d8
RedBoot> go

Sua conexão com o roteador irá cair e o terminal parecerá congelado. Finalize o telnet pressionando ^] (Ctrl + ]), mas NÃO desligue o roteador.

Altere o endereço de IP fixo da sua interface ethernet para 192.168.1.2, gateway 255.255.255.0. No network manager, basta seguir as instruções acima. Na linha de comando:

# ip a add 192.168.1.2/24 dev eth0 label eth0:0

Usando o telnet, conecte-se novamente ao roteador, agora ao endereço 192.168.1.1 porta 9000:

# telnet 192.168.1.1 9000

Pode acontecer de o roteador recusar a sua conexão (aconteceu comigo). Nesse caso, desconecte o cabo de rede da porta WAN (Internet) e coloque na porta de rede (LAN) número 1.

O roteador deverá então apresentar um prompt do DDWRT. Por enquanto ainda não realizamos nenhuma alteração permanente no seu roteador. Se ele for reinicializado nesse momento tudo volta ao normal e o procedimento deve ser reiniciado.

O passo a seguir é crítico. Em hipótese alguma desligue o roteador enquanto ele é executado, pois isto poderá quebrá-lo. Se algo der errado, e você perder a comunicação com o seu roteador em meio ao processo, existe um modo de salvá-lo (link). O que faremos agora é tornar permanente a alteração do inicializador (bootloader):

DD-WRT> fconfig -i
Initialize non-volatile configuration – continue (y/n)? y
Run script at boot: false
Use BOOTP for network configuration: true
Default server IP address:
Console baud rate: 9600
GDB connection port: 9000
Force console for special debug messages: false
Network debug at boot time: false
Update RedBoot non-volatile configuration – continue (y/n)? y
… Erase from 0xbffe0000-0xbfff0000: .
… Program from 0×80ff0000-0×81000000 at 0xbffe0000: .
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 0×807f0000-0×80800000 at 0xbffe0000: .
DD-WRT> ip_address -h 192.168.1.2
Default server: 192.168.1.23
DD-WRT> load -r -b %{FREEMEMLO} ap61.rom
Using default protocol (TFTP)
Raw file loaded 0×80080000-0×800a8717, assumed entry at 0×80080000
DD-WRT> fis create -l 0×30000 -e 0xbfc00000 RedBoot
An image named ‘RedBoot’ exists – continue (y/n)? y
… Erase from 0xbfc00000-0xbfc30000: …
… Program from 0×80080000-0×800a8718 at 0xbfc00000: …
… Erase from 0xbffe0000-0xbfff0000: .
… Program from 0×807f0000-0×80800000 at 0xbffe0000: .
DD-WRT> reset

O roteador será reinicializado, tornando permanentes as alterações. Pode acontecer de alguns endereços de memória finais do seu equipamento serem levemente diferentes dos apresentados acima. Isso provavelmente se deve a diferenças de tamanho entre as versões do arquivo bin e não deve preocupá-lo.

Depois que a reinicialização terminar, use novamente o telnet para se conectar ao roteador:

# telnet 192.168.1.1 9000

Novamente, se você tiver problemas de conexão, tente mudar o cabo de rede da porta WAN para a porta LAN.

Outro passo crítico. Não desligue o aparelho em meio à execução dos comandos abaixo.

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
DD-WRT> fis init
About to initialize [format] FLASH image system – continue (y/n)? y
*** Initialize FLASH Image System
… Erase from 0xbfc30000-0xbffe0000: …………………………………………………..
… Erase from 0xbffe0000-0xbfff0000: .
… Program from 0×80ff0000-0×81000000 at 0xbffe0000: .
DD-WRT> load -r -b 0×80041000 linux.bin
Using default protocol (TFTP)
Raw file loaded 0×80041000-0×803cffff, assumed entry at 0×80041000
DD-WRT> fis create linux
… Erase from 0xbfc30000-0xbffbf000: …………………………………………………
… Program from 0×80041000-0×803d0000 at 0xbfc30000: …………………………………………………
… Erase from 0xbffe0000-0xbfff0000: .
… Program from 0×80ff0000-0×81000000 at 0xbffe0000: .
DD-WRT> fconfig boot_script true
boot_script: Setting to true
Update RedBoot non-volatile configuration – continue (y/n)? y
… Erase from 0xbffe0000-0xbfff0000: .
… Program from 0×80ff0000-0×81000000 at 0xbffe0000: .
DD-WRT> fconfig boot_script_timeout 4
boot_script_timeout: Setting to 4
Update RedBoot non-volatile configuration – continue (y/n)? y
… Erase from 0xbffe0000-0xbfff0000: .
… Program from 0×80ff0000-0×81000000 at 0xbffe0000: .
DD-WRT> fconfig bootp false
bootp: Setting to false
Update RedBoot non-volatile configuration – continue (y/n)? y
… Erase from 0xbffe0000-0xbfff0000: .
… Program from 0×80ff0000-0×81000000 at 0xbffe0000: .
DD-WRT> fconfig
Run script at boot: true
Boot script:
.. fis load -l vmlinux.bin.l7
.. exec
Enter script, terminate with empty line
>> fis load -l linux
>> exec
>>
Boot script timeout (1000ms resolution): 4
Use BOOTP for network configuration: false
Default server IP address:
Console baud rate: 9600
GDB connection port: 9000
Force console for special debug messages: false
Network debug at boot time: false
Update RedBoot non-volatile configuration – continue (y/n)? y
… Erase from 0xbffe0000-0xbfff0000: .
… Program from 0×80ff0000-0×81000000 at 0xbffe0000: .
DD-WRT> fconfig bootp_my_ip 192.168.1.1
DD-WRT> fconfig bootp_my_ip_mask 255.255.255.0
DD-WRT> fconfig bootp_my_gateway_ip 0.0.0.0
DD-WRT> reset

O roteador será novamente reinicializado e voilà, está pronto o seu novo roteador with lasers.

O endereço padrão para o acesso à interface gráfica por meio do seu navegador é 192.168.1.1. O usuário é admin e a senha root.

   

Páginas do artigo
   1. Tutorial
Outros artigos deste autor

MS Coldplot

Marketing, o mal necessário

Programando um mundo livre

Firmware dd-wrt em Linksys WRT54G

Leitura recomendada

Librix 4.0 - Uma distro que não é para inglês ver - primeiras impressões

Instalando um servidor Openfire no Debian para liberação de MSN via Spark em uma rede Windows

Instalando SAGU-PRO no Debian Squeeze

Instalando GLPI + OCSINVENTORY no CentOS 7

Como controlar todas as mídias da sua casa somente com 1 controle remoto e 1 Linux

  
Comentários
[1] Comentário enviado por dolivervl em 12/09/2010 - 15:07h

Fiquei algumas horas tentando fazer essa atualização no meu DIR-300. Consegui com muito custo.
Na segunda parte de atualizações, quando pede para fazer "fis create linux" o modem trava e so volta quando eu crio um "bug" com os ips. Eu coloco meu ip para 192.168.1.1 igual ao do roteador, por algum tempo e depois volto para 192.168.1.2. Ai consigo acessar novamente o roteador. Esse comando "fiz create linux" sempre trava o roteador, depois da 20º tentativa eu pulei esse comando ai ferrou de vez, não conseguia mais acessar nada. Foi quando tentei acessar pelo navegador e vi que funcionou.
So um detalhe, conseguir acessar o redboot é quase impossível. No site do dd-wrt tem um tutorial com um script para windows que faciliar e muito a vida.
No tutorial diz o seguinte:
crie um arquivo chamado redboot.bat com o seguinte conteúdo
rem echo off
:start
rem ------------------------------------------------
ping 192.168.20.81 -n 1 -w 1 > NULL
IF ERRORLEVEL 1 goto start

rem putty
rem ------------------------------------------------
break
putty.exe telnet://192.168.20.81:9000 -m redboot.txt
exit

depois crie um arquivo chamado redboot.txt com o seguinte conteúdo
^C
Copie o putty.exe para o diretório que vc salvou esses 2 arquivos.

Agora a parte minha que não diz no tutorial, lembrando que é para quem está usando windows.
Como hoje a maioria está usando windows vista ou 7, lembre de executar o cmd como administrador.

Execute pelo cmd com direito administrativo o script redboot.bat e depois é so ligar o roteador.
lembre-se que é somente para a primeira parte do tutorial, onde vc acessa pelo ip 192.168.20.81
Outra coisa é lembrar de baixar o firewall do windows ou adicionar regra para tftp.

Só isso.

Obrigado pelo seu tuto!!!!

[2] Comentário enviado por SrTunes em 21/03/2013 - 15:18h

Ótimo post!
Estou precisando de uma ajuda. Tenho um D-link também, com o firmware DD-WRT v24 e estou precisando criar uma regra para bloquear tudo e só deixar liberado a porta 80 e a 443. Como faço isso via interface web?

[3] Comentário enviado por tagesuhu em 22/03/2013 - 13:01h

Olá Tunes!

Creio que não seja possível configurar o firewall do dd-wrt pela interface web, mas somente pela linha de comando (http://www.dd-wrt.com/wiki/index.php/Firewall). Não obstante, o padrão da firmware é deixar fechadas todas as portas que você não quiser explicitamente abrir (excetuando as portas 22 e 80, talvez). Se você não configurar nenhum serviço, as portas permanecerão fechadas. Você pode usar o nmap para certificar-se de que as portas estão efetivamente fechadas...

Abraços!


Contribuir com comentário