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.
O Linux é o sistema operacional livre mais popular do mundo e isso o torna 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 à 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 dá 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.
Meu roteador suporta OpenWRT?
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, dê 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
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:
Em System Tools / Firmware Upgrade escolha o arquivo do Firmware prossiga:
Normalmente ele pedirá algum tipo de confirmação, aceite.
O software será instalado e ele reiniciará.
Apos o reboot o OpenWRT estará instalado e ao acessar o roteador a tela deverá ter mudado para essa interface:
A primeira coisa que você deve fazer é criar uma senha para que seja possível acessar o roteador por ssh e instalar o resto dos recursos.
Nesse momento você deve ter acesso a uma interface administrativa semelhante à 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.
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”:
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.
Você pode usar o sistema de arquivos que preferir, mas como normalmente precisamos conectar esse HD à uma máquina 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:
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
Se você pretende usar algum outro sistema de arquivos você vai precisar instalá-lo. A lista completa dos sistemas de arquivo está 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 está 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 número do disco. É Y um número, contando a partir de 1, que representa a partição, por exemplo: sda1 = primeira partição do primeiro disco.
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 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
o resultado deve ser esse:
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 ser 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):
O Transmission é um ótimo programa de torrent e existem diversos programas para controlá-lo remotamente, eu recomendo o .torrent to transmission para o Chrome e o Remote Transmission para o Android
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 possível 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 aí, 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 referência.
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 máquinas 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 máquina 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, dê 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 rápido de configurar)
O arquivo de configuração, como você ja deve imaginar, está em /etc/config/pure-ftpd e a única 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 o 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 uma 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 uma impressora de rede e Scanner no roteador e alguns truques com scripts na pasta de torrents. Até lá.