OpenWRT: Fazendo mágica com linux no roteador – Parte 1
- janeiro 5th, 2012
- Posted in Hardware . Linux . OpenWRT . Redes . Tecnologia
- By rodrigo
- Write comment
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.
É ó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.
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.
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 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
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 possivel acessar o roteador por ssh e instalar o resto dos recursos.
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.
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 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:
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.
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
mas essas partições ainda não estão prontas para serem usadas, primeiro precisamos copiar alguns arquivos para a de sistema.
mkdir /mnt/tempmount -t ext4 /dev/sda2 /mnt/temptar -C /overlay -cvf - . | tar -C /mnt/temp -xf -umount /mnt/temprmdir /mnt/temp/etc/init.d/fstab enable 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:
freeo 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 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):
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
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á.































No comments yet.