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.