Há um tempo atrás eu postei sobre o NAS que comprei e todas as facilidades que ele me proporcionou, mas o fato é que aquele modelo é meio fraquinho e não ter acesso direto ao sistema para customizar ou configurar é algo que me incomoda bastante.
Isso somado ao fato de precisar fazer uma rede meio maluca para um evento e eu estar reestruturando toda a rede da minha casa para suportar um servidor de media do Linux MCE (muitos posts por vir) me forçou a largar a preguiça e instalar o OpenWRT no meu roteador, se eu soubesse que aumentaria tanto o leque de possibilidades eu já teria feito antes. O OpenWRT é um software alternativo para o seu roteador que permite adicionar várias funções e melhorar a performance dele.Em primeiro lugar, para aqueles que já devem estar cheios de perguntas, uma noção básica da brincadeira.

 

Se você tem um roteador em casa você provavelmente já configurou ele, você acessou pelo navegador e definiu algumas coisas básicas como o nome da sua rede e a senha. O seu roteador tem uma série de funções que um HUB ou Switch (barato) não tem, como firewall, controle de tráfego, controle de endereços IP e outras coisas que quase ninguém usa, ele consegue cuidar de tudo isso porque na prática seu roteador é um computador, sim, um computador com memória processador e armazenamento, obviamente com placa de rede também. Hoje em dia todo eletrônico é um computador, sua TV, seu celular, o rádio de seu carro.
É óbvio que por ser tão pequeno, ser barato, consumir tão pouca energia e ter um papel tão simples como o de pegar um pacote de dados daqui e jogar para lá, esse computador é bem fraco, no meu caso eu uso vários roteadores mas vou pegar como cobaia o TP-Link TL-WR1043ND que tem um processador de 400MHz, 32MB de RAM e 8MB de armazenamento. Pode parecer pouco, mas esse é o hardware equivalente há um computador de 15 anos atrás ou um Smartphone básico de hoje.
Como qualquer computador ele tem um sistema operacional, normalmente no caso dos roteadores chamamos de Firmware mas esse termo não está completamente certo, um Firmware é um software normalmente pequeno e que não sofre constantes atualizações e que controla um dispositivo simples, como um controle remoto ou um drive de dvd. No caso do roteador e do seu celular estamos falando mesmo de um Sistema Operacional, mas como antigamente esses dispositivos eram realmente simples e evoluíram muito rápido continuamos usando o termo, isso não faz nenhuma diferença mas eu queria enfatizar que o Software do seu roteador não é tão diferente do que está sendo executado no seu computador nesse exato momento, e ele provavelmente é um Linux modificado.
Xbox Clássico rodando Linux

Xbox Clássico rodando Linux

O Linux é o sistema operacional livre mais popular do mundo e isso torna ele muito bom para essas coisas como roteadores e tvs, que precisam executar uma função muito especifica e muito bem (normalmente chamados de sistemas embarcados), porque ele pode ser modificado facilmente para atender a sua necessidade e é incrivelmente leve. Esse fato sozinho anula o mito de que o market share mundial do linux é 1% mas eu discutirei isso em outro post. Seu roteador provavelmente já roda um sistema Unix-Like como o Linux ou o BSD, então qual a vantagem de trocar o Software? O Sistema que está instalado hoje no seu roteador não te da acesso a diversas coisas como os arquivos internos, e isso é muito bom porque a maioria dos consumidores faria besteira se tivesse esse acesso, mas com isso você pode modificar o que quiser e, se tiver um conhecimento básico de programação, pode até escrever seus próprios programas para rodar no roteador.

 

Ainda não viu vantagem? então eu vou direto ao ponto: Você pode colocar o seu roteador para baixar os seus torrents 24h enquanto o seu computador está desligado…
Por que eu não disse antes não é mesmo? agora que você foi convencido vamos ao que interessa.

 

Eu ia explicar como configurar impressoras, scanners, servidor de mídia e outras coisas, mas o post ficou muito grande, então já estou providenciando uma continuação, por enquanto vou me limitar ao torrent, FTP e compartilhamento de rede.

 

Meu roteador suporta OpenWRT?

 

Não sei, veja se ele está na lista: http://wiki.openwrt.org/toh/start
TP-Link WR1043nd

TP-Link WR1043nd

Se você pretende trocar de roteador, independente de instalar o OpenWRT ou não, eu recomendo fortemente os da TP-Link, eu tive problemas com várias marcas e essa é uma que nunca me deu dor de cabeça, todos os meus roteadores, switches e hubs em uso são da TP-Link, eu realmente gosto da qualidade da marca e na minha opinião só perde para hardware da Cisco ou 3COM, mas ai estaríamos falando de coisa bem cara e para uso empresarial, para redes domesticas e pequenas empresas o melhor custo-beneficio é (na minha opnião) o TL-WR1043ND: Wireless B/G/N 300Mbps, Rede Gigabit e uma porta USB (muito útil) por cerca de 100 reais.
O software da TP-Link normalmente atende qualquer usuário comum, permite criar compartilhamento de arquivos a partir de um HD no USB, compartilhar a impressora e tudo que você precisa em termos de rede, se você vai instalar o OpenWRT de uma olhada na lista de hardware acima pois talvez você ache algum com processador e memória superiores e um preço convidativo, só não se esqueça da importância do USB (para ligar o HD externo), mas quase todos da TP-Link já possuem versões prontas do OpenWRT.

 

Instalando

 

A instalação do OpenWRT não tem grandes segredos na maioria das vezes, mas dependendo do modelo e versão do software você pode ter que instalar manualmente e configurar diversos pacotes, em versões antigas por exemplo eu tinha que instalar manualmente o WiFi, se tiver problemas de instalação procure o procedimento para o seu modelo especifico. Muito do que faremos não pode ser feito pela interface gráfica, então se você nunca usou linux eu recomendo que você pesquise um pouco e compreenda pelo menos os comandos cd e vi antes de prosseguir. Existem várias versões do OpenWRT mas a mais popular parece ser a Backfire, baixe a última versão para o seu roteador aqui: http://downloads.openwrt.org/backfire/ procure pela versão com factory no nome, as da tp-link estão em ar71xx/ , a minha por exemplo é o arquivo openwrt-ar71xx-tl-wr1043nd-v1-squashfs-factory.bin

 

ATENÇÃO!!! DRAGÕES A FRENTE!!!
normalmente é fácil reverter para o firmeware original, basta instalar a versão do fabricante, que normalmente você acha fácil no site do fabricante, mas dependendo da besteira que você fizer o processo para arrumar pode envolver desmontar e fazer hacks malucos de hardware, estou assumindo que você tem alguma noção de Linux para pelo menos não apagar o sistema, a chance de você fazer isso é baixa, mas vai que… alguém sempre consegue, melhor avisar… hehe.

 

Com o arquivo do OpenWRT em mãos acesse seu roteador e digite o usuário e senha, essa é a tela padrão do router que estou usando:

WR1043ND Firmware Default

Em System Tools / Firmware Upgrade escolha o arquivo do Firmware prossiga:

WR1043ND Firmware Update

Normalmente ele pedirá algum tipo de confirmação, aceite.

WR1043ND Firmware Update Confirm

O software será instalado e ele reiniciará.

WR1043ND Firmware Update Reboot

Apos o reboot o OpenWRT estará instalado e ao acessar o roteador a tela deverá ter mudado para essa interface:

OpenWRT

A primeira coisa que você deve fazer é criar uma senha para que seja possivel acessar o roteador por ssh e instalar o resto dos recursos.

OpenWRT

Nesse momento você deve ter acesso a uma interface administrativa similiar à que voce tinha no Firmware anterior, se desejar pare o tutorial agora e configure a sua rede, uma dica: o Wifi está desabilitado por padrão… você provavelemente vai precisar ativa-lo em Network / Wifi.

OpenWRT

Agora você deve ser capaz de acessar o roteador por SSH, se estiver no windows baixe o Putty, se utiliza Linux apenas digite “ssh root@ip”:

OpenWRT SSH

 

Aumentando o espaço em disco

 

Como você pode ver abaixo o roteador tem recursos muito limitados, principalmente em armazenamento que não aparece na imagem, apenas 8 MB, então será necessário estender o sistema para um HD externo, primeiro vamos preparar o HD.

OpenWRT

Você pode usar o sistema de arquivos que preferir, mas como normalmente precisamos conectar esse HD a uma maquina que rode windows, o único jeito é usar NTFS, você poderia usar a mesma partição NTFS para extensão do sistema, mas o desempenho fica horrível, então criaremos 3 partições no disco: uma SWAP para estender a memória, uma EXT4 para extensão o sistema de arquivos e uma NTFS para armazenamento, recomendo o uso do programa GParted para particionamento do disco, o meu ficou assim:

GParted

Eu recomendo 1GB para Swap, 1GB para o sistema e o resto para armazenamento, sabendo que isso ja é um exagero.

Se você não pretende retirar o HD do roteador nunca e só acessar os arquivos pela rede (Recomendado) use EXT4 para o armazenamento também, pois NTFS consome muito processamento.

depois de particionado o disco vamos instalar os módulos para o funcionamento do USB:

opkg update
opkg install kmod-usb-storage
opkg install block-mount
opkg install block-extroot
opkg install block-hotplug
opkg install ntfs-3g
opkg install kmod-fs-ext4<code>

se você pretende usar algum outro sistema de arquivos você vai precisar instalar ele, a lista completa dos sistemas de arquivo esta aqui http://wiki.openwrt.org/doc/howto/usb.storage

Plugue o HD e verifique se ele é reconhecido:

cd /dev
ls

Você deve ver os arquivos sda, sda1, sda2 e sda3, se não estiverem ai, algo esta errado.

Para quem não está acostumado com essa numeração, o linux reconhece os dispositivos no formato sdXY em que X é uma letra (normalmente a ou b) que indica o numero do disco, é Y um numero, contando a partir de 1, que representa a partição, por exemplo: sda1 = primeira partição do primeiro disco.

Devices

Agora vamos criar uma pasta para a partição de arquivos dentro de /mnt

cd /mnt
mkdir storage

Aqui ficarão todos os arquivos do torrent, agora vamos configurar as partições:

vi /etc/config/fstab

Abaixo como exemplo meu arquivo de configuração, verifique se o numero das partições (sdaX) é o mesmo que você utiliza.
config global automount
      option from_fstab 1
      option anon_mount 1

config global autoswap
      option from_fstab 1
      option anon_swap 0

config mount
      option device /dev/sda2
      option fstype ext4
      option options rw,sync
      option enabled 1
      option enabled_fsck 0
      option is_rootfs 1
      option target /errorinrootfs
config mount
      option target /mnt/storage
      option device /dev/sda3
      option fstype ntfs-3g
      option options rw,sync
      option enabled 1
      option enabled_fsck 0

config swap
      option device /dev/sda1
      option enabled 1

 

Repare que eu mudei todos os "option enable" para 1, o mount com a propriedade target é o que será montado para armazenamento e o com is_rootfs é o que estenderá o sistema,
mas essas partições ainda não estão prontas para serem usadas, primeiro precisamos copiar alguns arquivos para a de sistema.
mkdir /mnt/temp
mount -t ext4 /dev/sda2 /mnt/temp
tar -C /overlay -cvf - . | tar -C /mnt/temp -xf -
umount /mnt/temp
rmdir /mnt/temp
agora ative a montagem do hd durante o boot:
/etc/init.d/fstab enable 
e reinicie o roteador:

reboot

Se após o boot o fstab não estiver marcada como enable em "System / Startup" na interface web, o que aparentemente é comum, marque-o por ali:

uma coisa que você pode observar é que por algum motivo o fstab está com uma prioridade menor do que o USB, acredito que isso tem causado a instabilidade que alguns usuários comentaram comigo, e eu mesmo verifiquei problemas com o carregamento da memória swap, precisamos diminuir o valor em USB, altere a linha em /etc/init.d/usb de

START=39

para

START=15

por algum motivo depois disso os dois aparecem desabilitados, habilite-os:

ao reiniciar caso a pasta /errorinrootfs tenha aparecido isso indica um erro nas configurações, caso contrário deve estar funcionando, para verificar o espaço livre no seu roteador use o comando df que deve te mostrar algo parecido com isso:

Free Space

Para ver se a extensão da memória está funcionando digite:
free
o resultado deve ser esse:
Free

A unica coisa que não funcionou no meu roteador foi e led do USB na parte frontal, que até então eu nem sabia que ele tinha, como a configuração era muito complicada eu simplesmente ignorei isso e duvido que você sinta falta.

Para remover o HD pare todos os downloads e processos que usam o HD, mais para frente adicionaremos mais alguns, os processos podem ser parados pelo ssh ou pela interface web em "System/startup", se possível desligue o roteador antes de remover, para inseri-lo pode inserir ligado, mas a maior parte das coisas instaladas só funcionará após um reboot

 

Torrent

 

Agora que seu HD está plugado e funcionando você pode começar a instalar coisas mais interessantes, como o Transmission, um cliente de torrent que você administra pelo navegador.

Instale os pacotes necessários:

opkg update
opkg install transmission-cli
opkg install transmission-web

Crie a pasta para armazenar os arquivos e os temporários:

mkdir /mnt/storage/torrent /mnt/storage/torrent/complete /mnt/storage/torrent/incomplete /mnt/storage/torrent/config

E configure o transmission editando o arquivo config:

vi /etc/config/transmission

Altere as seguintes linhas:

option enabled 1
option config_dir '/mnt/storage/torrent/config'
option download_dir '/mnt/storage/torrent/complete'
option incomplete_dir '/mnt/storage/torrent/incomplete'
option incomplete_dir_enabled true
option ratio_limit 2.0000
option ratio_limit_enabled true
option rpc_authentication_required true
option rpc_password 'passwd'
option rpc_username 'user'

option rpc_whitelist_enabled false


Você provavelmente pretende acessar o programa do trabalho ou celular para adicionar novos arquivos, então abra a porta no arquivo de configuração do firewall:

vi /etc/config/firewall

Adiciona a seguinte regra:

#Allow Torrent Administration

config rule
option src               *
option proto            tcp
option dest_port     9091
option target           ACCEPT

habilite o transmission:

etc/init.d/transmission enable

e inicie ele:

/etc/init.d/transmission start

e reinicie o firewall para que as alterações tenham efeito:

/etc/init.d/firewall restart

Agora voce deve ser capaz de acessar ele pelo navegador digitando o ip do seu roteador e aporta 9091 (provavelmete http://192.168.1.1:9091):

Transmission

O Transmission é um ótimo programa de torrent e existem diversos programas para controla-lo remotamente, eu recomendo o .torrent to transmission para o Chrome e o Remote Transmission para o Android

.torrent to Transmission

Remote Transmission

O programa funciona muito bem, mas depois de brincar um pouco com vários arquivos baixando simultaneamente eu comecei a ter problemas de corrupção das partes do torrent:

 

Para evitar isso, vamos diminuir um pouco o uso da CPU, sempre que damos um "verify local data" ou algum comando assim no torrent vemos que o uso da CPU chega ao limite, com o comando top  vemos que o coitado está fazendo o possivel e a culpa é do torrent:

Você pode ver pelo segundo item na lista que o consumo para manter uma partição NTFS é a segunda coisa que mais consome processamento ai, então se não for usar o HD em outro maquina use EXT4 que você já ganha uma folga, mas só isso não resolve, infelizmente teremos que sacrificar um pouco o desempenho do torrent, é isso ou perder os arquivos, ou pior, comprometer o desempenho da rede.

No arquivo de configuração do transmission (/etc/config/transmission) eu alterei as linhas de:
option open_file_limit 32
option peer_limit_global 240
option peer_limit_per_torrent 60

Para:
option open_file_limit 16
option peer_limit_global 160
option peer_limit_per_torrent 40

Isso diminuiu muito o uso da CPU e continuo fazendo downloads com a mesma velocidade, aproximadamente 1 MB/s, depois disso meus arquivos pararam de corromper, se o seu modelo de roteador é diferente tente números compatíveis com o hardware dele, o processador do meu é de 400MHz, só para referencia.

Compartilhamento de Arquivos: SMB e FTP

 

Agora que você colocou o torrent para funcionar você precisa ter acesso ao HD para pegar os arquivos baixados sem precisar desconecta-lo do roteador, afinal seu computador e o roteador estão em rede, não faria muito sentido não transmitir esses dados pela rede.

*SMB é o protocolo de rede que o Windows usa, Samba é implementação open source desse protocolo que permite que maquinas windows e linux se falem.

Para o compartilhamento de rede funcionar direito a primeira coisa que você precisa fazer é abrir essas portas:

  • TCP 137 - NetBIOS Name Service
  • TCP 138 - NETBIOS Datagram Service
  • TCP 139 - NETBIOS Session Service
  • TCP 445 - Microsoft Directory Services

para isso adicione as seguintes regras no seu arquivo /etc/config/firewall

#SAMBA Network Share
config 'rule'
option 'src' 'lan'
option 'proto' 'udp'
option 'dest_port' '137-138'
option 'target' 'ACCEPT'
config 'rule'
option 'src' 'lan'
option 'proto' 'tcp'
option 'dest_port' '139'
option 'target' 'ACCEPT'
config 'rule'
option 'src' 'lan'
option 'proto' 'tcp'
option 'dest_port' '445'
option 'target' 'ACCEPT'

Agora instale os pacotes necessarios:

opkg update
opkg install samba3 luci-app-samba

e reinicie

reboot

Se o luci-app-samba instalou corretamente você pode configurar o compartilhamento pela interface gráfica:

Mas se preferir, como eu, o arquivo de configuração está em /etc/config/samba. Eu recomendo mudar o campo "Share home-directories" (ou "homes"  no arquivo de configuração) para 0, para evitar problemas, não gosto da ideia de usuários tendo acesso a pastas que não estão na partição de storage do HD.

No meu caso o arquivo de configuração ficou assim:

config 'samba'
option 'name' 'MainRouter'
option 'description' 'TL-WR1043ND'
option 'workgroup' 'Home'
option 'homes' '0'

config 'sambashare'
option 'read_only' 'no'
option 'create_mask' '0700'
option 'dir_mask' '0700'
option 'name' 'Storage'
option 'path' '/mnt/storage'
option 'guest_ok' 'yes'

o que visualmente resulta nisso:

depois de configurado inicie o processo e habilite seu inicio automático:

/etc/init.d/samba enable
/etc/init.d/samba start

Depois disso a pasta estará visível na rede como se o reteador fosse um outra maquina com compartilhamento habilitado:

 

Agora vamos configurar o FTP para você poder acessar os arquivos do trabalho, ou de qualquer outro lugar, diferente do SMB o FTP estará protegido por senha, então a ideia aqui é para apenas você utilizar, por isso eu utilizarei o usuário root mesmo, se você precisar criar outros usuários com permissões diferentes de uma olhada na documentação nesse link: http://wiki.openwrt.org/doc/uci/pure-ftpd

Primeiro instale o servidor FTP:

opkg update
opkg install pure-ftpd

(aparentemente existem outros servidores ftp, mas esse me pareceu o mais simples e rapido de configurar)

O arquivo de configuração, como você ja deve imaginar, está em /etc/config/pure-ftpd e a unica linha que voce precisa alterar é essa:

option enabled '1'

para que o enable fique '1', dependendo da empresa que fornece a sua conexão a porta 21 estará bloqueada (meu caso com a virtua), você pode mudar a porta na primeira linha do arquivo para um que esteja liberada.

depois disso basta habilita-lo e iniciar o processo:

/etc/init.d/pure-ftpd enable
/etc/init.d/pure-ftpd start

já está funcionando, o problema é que quando você se conectar ou ftp estará na pasta home do seu usuário, ou seja, a pasta /root, uma solução rápida e simples para isso é criar um link simbólico dentro da pasta para a pasta de storage:

ln -s /mnt/storage/ /root/storage

você até poderia entrar a pasta na mão no programa de ftp que preferir, mas esse link realmente ajuda bastante.

Acessando Remotamente

Agora que configuramos todos os serviços vamos abrir as portas do firewall e configurar portas alternativas para os programas que algumas empresas de internet bloqueiam:

Web Admin / Luci:

no arquivo /etc/config/uhttpd altere a linha

list listen_http 0.0.0.0:80

trocando o 80 pela porta que preferir.

FTP:

em /etc/config/pure-ftpd altere:

option port '21'

Para uma porta livre.

Torrent

em /etc/config/transmission aletere

option rpc_port 9091

para a porta que preferir.

SSH

O ssh pode ser configurado pela interface gráfica (System/Administration), que inclusive permite habilitar para LAN (rede local), WAN (internet) ou ambos:

Firewall

Nós já abrimos uma porta no firewall durante a configuração do torrent e samba, o processo é basicamente o mesmo, basta criar um regra como o modelo abaixo para cada porta que você quiser abrir no arquivo /etc/config/firewall:

 

config rule
option src               *
option proto            tcp
option dest_port        PORTA_QUE_DESEJA_ABRIR
option target           ACCEPT

DNS Dinâmico

Como seu IP frequentemente, o ideal é usar um gerenciador de dns dinâmico, como o No-IP ou o DynDNS para não precisar saber o ip, no lugar disso usar um endereço fácil de lembrar, a primeira coisa que você precisa é se cadastrar em um gerenciador suportado pelo OpenWRT, ou seja um desses:

Agora instale o pacote luci-app-ddns e reinicie o roteador:

opkg update
opkg install luci-app-ddns
reboot

Depois de instalado acesse a interface web e configure os dados fornecidos pelo sistema de dns dinâmico em que você cadastrou, essa parte deve ser auto explicativa:

Pronto! Tudo instalado e configurado, na próxima parte explicarei como instalar um impressora de rede e Scanner no roteador e alguns truques com scripts na pasta de torrents, até lá.