Como sempre, o limitador do que pode ser feito em um roteador com OpenWRT é o seu hardware. Quanto ao processador, não temos o que fazer mas, em geral, ele é suficiente, exceto se você quiser fazer transcoding de vídeo em tempo real (não, não dá para fazer no seu roteador). O disco é um dos problemas mais incômodos e já foi tratado em um outro post. Neste foi apresentar a alternativa para contornar a falta de memória RAM.
Se você leu o artigo sobre fazer download de torrents no roteador, pode estar enfrentando problemas com a falta de memória. O sintoma é de processos que desaparecem e avisos de "out of memory" nas mensagens do kernel (dmesg). Pessoalmente, não tive problemas com memória e torrent pois meu roteador tem 64 MB de RAM, o dobro do normalmente disponível em modelos anteriores. Porém, enfrentei a falta de memória ao utilizar um servidor DLNA, enquanto ele varria os arquivos de vídeo.
A solução para a pouca disponibilidade de memória é a mesma faz muito tempo: jogar informações menos usadas em uma memória mais lenta, como o disco. No Linux, chamados esta área em disco de memória swap, ou área de troca. Alguns também chamam de "memória virtual", mas não gosto do termo por confundir a técnica de utilizar endereçamento virtual para regiões de memória.
Para configurar a swap, em primeiro lugar, você precisa de um local para armazená-la. Ele pode ser um disco montado remotamente (NFS), uma unidade remota (NBD) ou simplesmente uma unidade de armazenamento conectada na USB. Nem pense em usar a swap na flash interna do roteador. Além de ser mais escaço que a própria memória RAM, ela não é feita para ser reescrita um grande número de vezes e, se der problema, não é facilmente substituível. Por isto, o primeiro passo é ter acesso a esta unidade externa.
A swap no Linux pode ser implementada em qualquer coisa que se assemelha, na filosofia UNIX, a um arquivo: um arquivo no sistema de arquivos, uma partição, um disco inteiro. A forma mais simples é utilizar uma partição dedicada para esta função.
Reparticione seu disco e deixe uma pequena partição para a swap. Faça com sua ferramenta de particionamento favorita (partition magic, gparted). Pode, inclusive, ser pequena, como 128 MB. Se quiser exagerar, 1 GB é muito mais do que o seu roteador um dia pensou em usar. O problema de ter muita memória swap é quando um processo se perde e começa a usar indefinidamente memória. Quanto maior a memória, mais tempo até o processo conseguir encher a memória e ser morto pelo kernel.
A partição tem que ter o identificador de uma partição swap. Em hexadecimal, é o valor 0x82. Isto é feito com as ferramentas de particionamento, mas pode também ser feito mais adiante com o fdisk, inclusive se instalado no roteador. A saída de um comando "fdisk -l" deve ter uma linha similar a em destaque abaixo:
Agora é a hora de testar a swap. Ative-a com o comando swapon:
Note que o "label" é o mesmo que foi definido ao formatar a partição. Assim como o caso de uma partição de arquivos, também poderia referenciar o disco pela opção "device" ou "uuid". Alternativamente, existe também a opção autoswap, que ativará qualquer partição com identificação 0x82 e formatada como swap.
Reparticione seu disco e deixe uma pequena partição para a swap. Faça com sua ferramenta de particionamento favorita (partition magic, gparted). Pode, inclusive, ser pequena, como 128 MB. Se quiser exagerar, 1 GB é muito mais do que o seu roteador um dia pensou em usar. O problema de ter muita memória swap é quando um processo se perde e começa a usar indefinidamente memória. Quanto maior a memória, mais tempo até o processo conseguir encher a memória e ser morto pelo kernel.
A partição tem que ter o identificador de uma partição swap. Em hexadecimal, é o valor 0x82. Isto é feito com as ferramentas de particionamento, mas pode também ser feito mais adiante com o fdisk, inclusive se instalado no roteador. A saída de um comando "fdisk -l" deve ter uma linha similar a em destaque abaixo:
Device Boot Start End Blocks Id System/dev/sdb1 63 123758591 61879264+ 7 HPFS/NTFS/exFAT/dev/sdb2 125853210 2928904191 1401525491 f W95 Ext'd (LBA)/dev/sdb3 123758592 125851647 1046528 82 Linux swap
Com a partição pronta e com a identificação correta, é o momento de "formatar" a partição. O formatar para uma partição swap é basicamente escrever uma assinatura no começo do disco. É bem rápido. Também é interessante definir o nome da partição, que pode ser usado para referenciá-la mais adiante (no exemplo, "minhaswap").
mkswap -L minhaswap /dev/sdb3O /dev/sdb3 é o dispositivo da sua partição, como listado na saída do comando "fdisk -l". Para utilizar a swap no seu roteador, você precisará dos utilitários básicos para swap, como o mkswap. Instale o pacote swap-utils.
opkg updateopkg install swap-utils
Agora é a hora de testar a swap. Ative-a com o comando swapon:
swapon /dev/sdb3Você poderá ver o espaço disponível pelo comando free:
# free total used free shared buffersMem: 61700 60480 1220 0 1160-/+ buffers: 59320 2380Swap: 1046524 18884 1027640
Se a linha swap estiver zerada, não está funcionado. Caso contrário, você já estará usando sua nova swap. Contudo, esta configuração feita pelo swapon é volátil. Ao reiniciar o roteador, ela será perdida. Para ativar automaticamente, vamos usar o mesmo recurso que usamos para montagem de disco externo: o arquivo /etc/config/fstab. No arquivo, é possível configurar a montagem de uma swap. A configuração é um pouco mais simples do que partições de arquivos pois não precisa especificar onde será montada. Basta adicionar:
/etc/config/fstab:
config swap
option label "minhaswap"
option enabled 1
Note que o "label" é o mesmo que foi definido ao formatar a partição. Assim como o caso de uma partição de arquivos, também poderia referenciar o disco pela opção "device" ou "uuid". Alternativamente, existe também a opção autoswap, que ativará qualquer partição com identificação 0x82 e formatada como swap.
/etc/config/fstab:
config global autoswap
option from_fstab 0
option anon_swap 1
Reinicie o roteador para garantir que tudo funciona após reiniciar. Observe se o espaço da swap estará disponível pelo comando free.
Pronto! Pode abusar de seu roteador que agora ele terá memoria extra, mas mais lenta, para suas tarefas.
Peraí, mas não quero mexer com partições! Tem como fazer com um arquivo simples? Tem sim. Em primeiro lugar, crie um arquivo com o tamanho da swap desejada. Use o dd para isto. O tamanho é passado pela opção "count" e é em blocos de 512. Sendo assim, por exemplo, escolha 2 par 1K, 2000 para 1M, 200000 para 100M, e assim por diante. Para uma swap de 50 MB, use:
dd if=/dev/zero of=/mnt/meudisco/swap count=100000
O arquivo /mnt/meudisco/swap deve ficar no disco externo e será, incialmente, completamente zerado. Vai demorar um pouco se for feito no roteador. Depois, você poderá usar os comandos "mkswap" e "swapon" diretamente sobre o arquivo:
mkswap /mnt/meudisco/swapswapon /mnt/meudisco/swap
O problema desta abordagem é que, por não poder usar o /etc/config/fstab, vai se perder ao reiniciar o roteador. Você precisará executar o swapon toda vez que o roteador foi ligado, ou colocar em alguns script como o "/etc/rc.local".
Até a próxima.
Olá, será que você poderia fazer um tutorial pra instalar o squid transparente? Muito bom os seus tutoriais.
ResponderExcluirOlá Jônatas,
ExcluirQual seria o uso do proxy transparente? Filtragem? Monitoramento? Cache?
O objetivo principal seria utilizar cache e depois utilizar o SARG pra monitoramento.
ResponderExcluirEu até instalei o Squid, e percebi que as regras de redirecionamento da porta 80 para a 3128 é feito de uma forma diferente por causa da versão do iptables do OpenWrt. Deu uma olhada na documentação do OpenWrt e fiz, mas por alguma razão quando o squid ta rodando, a internet fica MUITO, MUITO lenta mesmo.
Não sei por que razão.
Bem .. a configuração do squid é a seguinte:
http_port 3128 transparent
visible_hostname bekaserver
acl all src 0.0.0.0/0.0.0.0
cache_mem 12 MB
maximum_object_size_in_memory 64 KB
maximum_object_size 100 MB
minimum_object_size 0 KB
cache_swap_low 90
cache_swap_high 95
cache_dir ufs /squid/spool/squid 400 16 256
cache_access_log /squid/log/squid/access.log
refresh_pattern ^ftp: 15 20% 2280
refresh_pattern ^gopher: 15 0% 2280
refresh_pattern . 15 20% 2280
error_directory /usr/share/squid/errors/English
cache_store_log /squid/log/store.log
acl manager proto cache_object
acl localhost src 127.0.0.1/32
acl SSL_ports port 443 563
acl Safe_ports port 80 # http
acl Safe_ports port 21 # ftp
acl Safe_ports port 1863 # MSN
acl Safe_ports port 5223 # MSN
acl Safe_ports port 443 563 # https, snews
acl Safe_ports port 70 # gopher
acl Safe_ports port 210 # wais
acl Safe_ports port 1025-65535 # unregistered ports
acl Safe_ports port 280 # http-mgmt
acl Safe_ports port 488 # gss-http
acl Safe_ports port 591 # filemaker
acl Safe_ports port 777 # multiling http
acl Safe_ports port 901 # SWAT
acl purge method PURGE
acl CONNECT method CONNECT
http_access allow manager localhost
http_access deny manager
http_access allow purge localhost
http_access deny purge
http_access deny !Safe_ports
http_access deny CONNECT !SSL_ports
acl redelocal src 192.168.1.0/24
http_access allow localhost
http_access allow redelocal
http_access deny all
Informações adicionais:
Roteador: TP-LINK WR1043ND.
USB: Leitor de cartão microSD com um cartão de 2GB
Partições: sda1 => /home (800MB) EXT4
sda2 => 256MB Swap
sda3 => /overlay (800MB) EXT4
Na verdade a lentidão é na quando o redirecionamento está ativado e não quando o squid ta rodando, necessariamente.
ResponderExcluirAs regras de redirecionamento que foram inseridas foram essas (no /etc/config/firewall)
config redirect
option src lan
option proto tcp
option src_dport 80
option dest_port 3128
option dest_ip 192.168.1.1
Estranho a lentidão somente quando em proxy transparente. Pode ser algo que não está funcionando bem e está esperando um timeout. Em geral, para roteadores, o squid pode ser um pouco maior que o necessário. As alternativas, tinyproxy e polipo devem ser mais econômicas.
ExcluirSinceramente, proxy transparente não é lá muito útil. Todo o tráfego HTTPS passa direto. Mesmo o proxy como cache está cada vez menos interessante pois com conexões mais rápidas e com conteúdo cada vez mais dinâmico, você perde mais guardando a informação do que se acessasse diretamente. Hoje em dia, o proxy é mais usado somente para filtragem e monitoramento.
To pensando em voltar para o DD-WRT, rodou bem no meu WR1043N mas reiniciava muito, talvez pela questão do swap. Mas pelo que andei vendo no wiki do DD-WRT parece que a nova versão já tem suporte à swap, você sabe alguma coisa em relação a isso?
ResponderExcluirPessoalmente nunca usei o DD-WRT. Ele possui uma arquitetura fechada que não se encaixava com o que eu queria fazer com o meu roteador. Por exemplo, até onde eu olhei, você não conseguia baixar o fonte e gerar uma imagem dd-wrt. O foco deles é outro. Essa história de "ativação", mesmo não necessária para o meu roteador, não é para mim. Também eles estão meio devagar em lançamentos. A última estável faz mais de 5 anos.
ExcluirBlz Luiz,
ResponderExcluirSou um curioso desse assunto, eu fiz as alterações no meu TP-LINK WR1043ND apenas lendo alguns tutos pela net; instalei um HD de 500gb, com 128mb swap, 512mb overlay e o resto para dados; instalei o torrent, samba, ddns, e gostaria de aprofundar ainda mais: instalei o pack minidlna mas não to conseguindo fazê-lo funcionar. Um amigo quer que eu faça a mesma coisa na casa dele, achou muito legal, e ele tem uma TV que queria acessar os baixados diretamente via dlna na TV.
Um dia será que teremos aqui um tuto sobre isso? outra coisa também que tentei é o FTP, mas não sei por que só conseguia o acesso pela minha rede interna apenas, mas pela net necas... A propósito, muito legais os seus tutos.
Anderson,
ExcluirDLNA está na fila. Eu já uso faz um tempo. E realmente é muito legal.
Quanto ao FTP, o protocolo é um pouco chato para funcionar, principalmente a parte de firewall. Em modo normal o servidor tentará conectar no cliente para enviar os dados, coisa quase impossível com os NATs que existem por ai. No ativo, você terá uma porta dinâmica no servidor para liberar. Nunca usei mas tem um módulo do iptables (firewall do linux e, consequentemente, do openwrt) que pode ler a sessão do FTP e abrir dinamicamente esta porta. Contudo, o melhor mesmo é não usar o FTP.
Para servidores, em geral, recomendo o SFTP, o WEBDAV ou o próprio SAMBA.
O webdav é o mais "comum" e pois qualquer sistema operacional já tem cliente nativo (o windows que nunca tem nada já tem desde o win9x). É fácil de usar mas um pouco complicado de configurar, principalmente para o openwrt. Como o webdav é sobre um servidor HTTP, teria que trocar o nativo do openwrt ou colocá-lo em outra porta. Não sei se você teria espaço e memória para tanto.
SAMBA também tem suporte de todos os SOs nativamente. Este terá o melhor desempenho de qualquer outro. A preocupação maior é com a segurança.
O último, SFTP, é tão seguro quanto o SSH e já tem espera no dropbear (servidor SSH do OpenWRT). Só precisa instalar o servidor sftp do openssh. O problema é o espaço em disco. Ele, em si, é pequeno (22k) mas depende do libopenssl que tem 632k. Se no seu caso já tiver estendido a raiz usando o disco externo, não será problema. O pacote é "openssh-sftp-server". Ai você pode usar o filezilla, porta 22, que conecta numa boa. Vou escrever sobre isto no futuro...
Beleza Luiz, vou aguardar. Vou também tentar o servidor ftp que mencionou.
ExcluirBoa tarde,
ResponderExcluirQuando digito o comando fdisk -l aparece isso:
http://oi41.tinypic.com/4vlm2x.jpg
O que devo fazer???
Obrigado.
http://imageshack.us/a/img546/4431/eqsr.jpg
ExcluirOlá Anônimo,
ExcluirOs /dev/mtdblock* referem-se as "partições" da sua flash interna. Pode ignorá-las.
O que você está interessado são em entradas do tipo /dev/sd* como esta:
Disk /dev/sda: 128 MB, 128974848 bytes
16 heads, 32 sectors/track, 492 cylinders, total 251904 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x445a2183
Device Boot Start End Blocks Id System
/dev/sda1 * 32 251903 125936 83 Linux
Se não apareceu, seu disco externo não foi reconhecido.
Opa.. apesar de não ter conseguido expandir o espaço interno pelo seu método, a parte da swap foi um sucesso.. agora vou para o seu próximo tutorial! (cronologicamente) Valeu!
ResponderExcluirWillian,
ExcluirSempre é bom ler feedback de sucesso. Obrigado.
Contudo, sem mais espaço interno você não vai longe. Reveja os para expandir o disco com uma unidade externa.
Abs,
Você precisará executar o swapon toda vez que o roteador foi ligado, ou colocar em alguns script como o "/etc/rc.local".
ResponderExcluirSou muito crú no openWRT, Como seria este script Luiz? Obrigado
Ivan, swapon é para habilitar manualmente em uma execução. O /etc/config/fstab faz este serviço para você.
ExcluirAh, e existe o serviço fstab que lê o /etc/config/fstab.
ExcluirEste deve estar habilitado para disparar ao ligar o roteador.
Amigo, poderia fazer um tutorial para open-wrt sendo utilizado em bridge repeater? Não consegui fazer funcionar sem utilizar ip fixo no PC. Meu router principal tem ip 192.168.1.1, fiz tudo certo, desativei o dhcp no open-wrt, coloquei ele em outra faixa 192.168.1.2 e mesmo assim não rolou. Já segui todos os tutoriais que encontrei e nada de funcionar. Att Alexandre
ExcluirCaro anônimo, já tem:
Excluirhttp://luizluca.blogspot.com.br/2013/05/openwrt-utilizando-conexoes-wireless.html
http://luizluca.blogspot.com.br/2013/05/openwrt-utilizando-conexoes-wireless_18.html