Discuta este tópico no fórum

Se este conteúdo te ajudou, deixe um presente!

quarta-feira, 14 de maio de 2014

OpenWRT: Compartilhando um Scanner na rede

No último artigo, mostrei como configurar uma impressora de rede no OpenWRT. É grande a comodidade de uma impressora na rede. Fazê-lo com uma impressora simples e sem custos (considerando que o roteador você já tem) é melhor ainda.

OK, impressora já está configurada e imprimindo pela rede. Mas o scanner?

Atualmente são raras as impressoras puras. Em geral elas agregam outras funções, principalmente um scanner. Neste post vamos configurar o SANE para permitir que máquinas remotas possam digitalizar documentos pela multifuncional na rede.

Instalação

Vou considerar que partimos do ponto onde já existe uma impressora USB configurada no roteador. Se não for o caso, talvez algum passo da impressora fique pendente (talvez a parte do USB). Se alguém estiver nesta situação (quer somente o scanner pela rede e não a impressão) e tiver problemas, comente ai que tentaremos diagnosticar o que falta. O mesmo vale para conectar um scanner (não impressora). Se ele funciona em um Linux (pelo SANE), deve funcionar.

Antes de começar, você vai precisar de alguns mega de espaço em disco. Se não estiver usando uma unidade USB para estender o disco, esta é a sua oportunidade.

Você vai precisar instalar os seguintes pacotes do OpenWRT:
  • sane-backends
  • sane-frontends
Ele vai baixar mais alguns por dependência. Se tudo der certo, o comando "scanimage -L" deverá mostrar sua impressora. Se for uma HP, você vai precisar do pacote hplip. Infelizmente ele traz consigo dependências não desejadas, como o cups (eu avisei que precisaria de espaço...). Após a instalação, o scanimage vai funcionar para scanners HP:
root@router:~# scanimage -L
device `hpaio:/usb/Officejet_J4660_series?serial=BR145GXXXXXXXX' is a Hewlett-Packard Officejet_J4660_series all-in-one
Agora basta colocar o SANE para escutar na rede. Você precisa colocar os endereços (cliente ou de rede) autorizados a usar seu scanner em /etc/sane.d/saned.conf. Se quiser liberar acesso para qualquer cliente da rede, basta adicionar um +:
root@router:~# echo + >>  /etc/sane.d/saned.conf
Podemos testar já neste ponto se os clientes podem alcançar o serviço. Rode o saned manualmente:
root@router:~# /usr/sbin/saned -d
Ele vai funcionar para um único comando, mas é suficiente para testar. Possivelmente ocorrerá um erro:
check_host: getaddrinfo for local hostname failed: Name or service not known
Isto ocorre porque o saned não conseguiu achar o endereço IP pelo nome do roteador. Você precisará adicionar este nome manualmente no /etc/hosts. O nome adicionado deve ser o mesmo que aparece no prompt do shell (após o "@" e antes do ":"):
root@router:~#
No meu caso, basta colocar "router" depois de localhost em /etc/hosts. Ficou assim:
127.0.0.1 localhost router
Pule para a configuração de um cliente e, se funcionar, volte para este ponto e complete a configuração do servidor.

Configuração do servidor

O sane depende de um superserver, um processo que espera por conexões e as repassa aos respectivos servidores. Isto simplifica o desenvolvimento do servidor e pode economizar memória (por poder disparar o serviço apenas quando alguém irá usá-lo).

Neste caso, a sugestão é instalar o xinetd. Instale o pacote xinetd do OpenWRT.

Atualização: para impressoras multifuncionais, o uso do SANE faz com que o módulo usblp remova a entrada /dev/usb/lp0, que é usada para impressão. Desta forma, a impressão não funciona mais após o uso do scanner (até que a impressora ou o roteador sejam reiniciados ou o cabo reconectado). Para contornar o problema, sugiro a criação deste script /usr/sbin/saned.reload_usblp:
#!/bin/sh
#
# When a SANE scanning occurs, /dev/usb/lp0 is lost.
# Reload usblp after the scanjob is finished in order to
# recreate /dev/usb/lp0 
#
/usr/sbin/saned "$@"
rmmod usblp
insmod /lib/modules/$(uname -r)/usblp.ko


Ele precisa ter permissão de execução.
Atualização 3: a nova versão do OpenWRT (14.07) não apresenta este problema. 

Você precisa criar o arquivo de configuração do SANE para o xinetd em /etc/xinetd.d/sane com este conteúdo:
service sane-port
{        
  socket_type = stream
  server = /usr/sbin/saned
  protocol = tcp
  user = root
  group = root
  wait = no  
  disable = no
}      
Basta disparar o xinetd e habilitá-lo para ligar com o roteador:
/etc/init.d/xinetd enable
/etc/init.d/xinetd start
Seu scanner deve estar funcionando!

Clientes

Vou mostrar a configuração de um cliente em Linux. Quando estiver rodando em Windows, eu completo a parte do Windows e atualizo este artigo.

Linux

Em geral, as distribuições Linux já pré-instalam o SANE. Se for seu caso, basta editar /etc/sane.d/net.conf para configurar o SANE a buscar um scanner na rede. Só colocar uma linha que aponte para seu roteador. No meu caso, eu consigo alcançá-lo por router.lan. Pode ser também o IPv4 ou IPv6 dele. Para os mais acomodados, rode como root:
echo router.lan >> /etc/sane.d/net.conf
Lembre-se de ajustar o router.lan apropriadamente. Na sequência, o scanimage vai listar o scanner da rede.
cliente-linux $ scanimage -L
device `net:router.lan:hpaio:/usb/Officejet_J4660_series?serial=BR145GXXXXXXXX' is a Hewlett-Packard Officejet_J4660_series all-in-one
Note que diferentemente do scanimage no roteador, neste existe referência de que ele está na rede e no servidor router.lan. Se isto não funcionar, existe algum problema com seu saned. Para diagnosticar o problema, se estiver rodando manualmente o "saned -d", observe as mensagens na tela. Caso já esteja rodando ele no xinetd, olhe os logs do roteador (logread).

Se estiver rodando manualmente o "saned -d", depois do scanimage, ele irá encerrar. Para utilizar o scanner, você deve completar a configuração do servidor.

Windows

No Windows temos duas alternativas. A que recomendo é o wiasane. Ele cria um scanner virtual que acessa (via SANE) o scanner remoto. As versões atuais funcionam sem problemas em todos os meus testes.

Outra é o SaneTwainPode ser o zip ou o instalador windows. Ele é composto de um driver Twain e um aplicativo independente. Infelizmente, o driver só está preparado para ambientes 32-bit. Contudo, o aplicativo funciona perfeitamente. Depois de instalado ou descompactado, você terá acesso ao programa ScanImage.exe. Ele pode ser usado diretamente como um cliente do scanner. Na primeira execução ele irá permitir a confiuguração do servidor SANE (seu roteador). Ele deve ser suficiente para quem quer digitalizar para um arquivo de imagem. Porém, não consegui fazer o driver TWAIN funcionar possivelmente por estar em um sistema 64-bit (li comentários que funcionou mesmo o desenvolvedor avisando que não iria).



É isso pessoal. Mais um ótimo uso para seu OpenWRT. Até a próxima.

PS: Ainda está na fila a divulgação automática da impressora na rede por ZeroConf.

Atualização: adicionado workaround para problema de impressão após o uso do scanner. Obrigado Felipe por ter avisado da existência do problema.

Atualização 2: driver wiasane está funcioando na versão wiasane-v0.0.0.5-16-gfab7d78-dbg. Logo deve sair uma versão oficial com o problema resolvido. Versões atuais do driver não devem apresentar o problema.

Atualização 3: versão nova do OpenWRT funciona sem o workaround!

sábado, 3 de maio de 2014

OpenWRT: Compartilhando sua impressora na rede

Novamente digo: A porta USB no roteador o torna muito versátil. Em mais um dos usos da USB, vou configurar uma impressora compartilhada na rede. Em resumo, isto vai transformar sua impressora USB comum em uma impressora de rede.

Um servidor de impressão deve receber os pedidos de impressão e repassá-los a uma impressora. Um dos mais avançados que existe no mercado é o CUPS, que faz tudo e mais um pouco: gerencia filas, aplica filtros, usuários, etc. Tenho um servidor de impressão com CUPS sendo utilizado para imprimir milhares de folhas ao dia sem qualquer problema faz anos.

Voltemos a realidade do roteador. Como sabemos, o roteador é um dispositivo com recursos limitados. E, dos recursos mais limitados, temos o espaço em disco. Desta forma, não vai aguentar armazenar trabalhos na fila para impressão. Além disto, não é muito saudável escrever dados temporários no disco pois vai reduzir a vida útil da flash. Ao invés de instalar um CUPS com seus gerenciamentos avançados, a sugestão é instalar um servidor de impressão que apenas repassa os trabalhos para a impressora.

Um dos servidores ideias para esta tarefa é o p910nd. Ele escuta em uma porta padrão e aguarda receber os dados. Quando receber um novo trabalho, simplesmente o repassa para a impressora sem qualquer tratamento. Não tem spool local e não escreve no disco. Não tem autenticação de usuário, driver de impressora no servidor, etc. Para clientes residenciais e pequenas empresas, pode ser a solução ideial.
Obs: É provavel que o CUPS rode sem problemas no roteador, desde que você tenha um armazenamento externo e memória suficiente.
A instalação do p910nd é simples. O primeiro passo é instalar o módulo usb-printer do kernel (também possível pela WEB):
opkg update 
opkg install kmod-usb-printer 
Logo ao instalar ele será carregado. Se você conectar a impressora (ou se ela já estiver conectada), vai aparecer esta mensagem no kernel:
[  603.460000] usblp0: USB Bidirectional printer dev 6 if 1 alt 0 proto 2 vid 0x03F0 pid 0x2B12
E também este dispositivo deve aparecer:
router# ls -l /dev/usb/lp0
crw-r--r--    1 root     root      180,   0 May  3 01:36 /dev/usb/lp0
Existe também driver para porta paralela (kmod-lp), mas acho que não se aplica mais nas impressora atuais.

Agora basta instalar o p910nd:
opkg install p910nd
A configuração, como as demais feitas no OpenWRT, é no diretório /etc/config. No meu caso, uma configuração bem simples foi suficiente:
/etc/config/p910nd:
config p910nd
        option device        /dev/usb/lp0
        option port          0
        option bidirectional 1
        option enabled       1

Não esqueça do "enabled 1"! A porta 0 significa porta 9100. A porta 1, 9101 e assim por diante. Na dúvida, para uma impressora, deixe a 0, que é a padrão.


Para quem tem disco sobrando e pouca intimidade com o vi, tem também uma interface WEB para configurá-lo:
opkg install luci-app-p910nd
E, por fim, ative e dispare o serviço (também possível pela WEB):
/etc/init.d/p910nd start/etc/init.d/p910nd enable
A partir deste pronto, a sua impressora está pronta para ser adicionada nos clientes.

Linux 

A configuração da impressora em um Linux é feita no CUPS. Existem algumas interfaces para este fim mas, no geral, vão oferecer estas opções:

Troque o meuroteador por um nome pelo qual você consegue pingar o roteador (ou seu endereço IP). A porta 9100 é a usada para a opção "port 0" do p910nd. Se usar outra, ajuste conforme desejado. Escolha o fabricante e modelo adequado. Pronto!
  1. Selecione a opção para adicionar uma nova impressora.
  2. Escolha o tipo "AppSocket/HP JetDirect".
  3. Na URL da conexão, use:
    1. socket://meuroteador:9100
  4. Troque o meuroteador por um nome pelo qual você consegue pingar o roteador (ou seu endereço IP).
  5. A porta 9100 é a usada para a opção "port 0" do p910nd. Se usar outra, ajuste conforme desejado.
  6. Selecione o fabricante e modelo correto para selecionar o driver correspondente.
  7. Pronto!
Neste ponto, sua impressora será visível como se estivesse conectada pela USB.

Windows

Windows é um pouco mais complicado.
  1. Vá no painel de controle/adicionar uma impressora;
  2. Escolha a opção para impressora de rede.
    1. Ele vai tentar detectar mas não vai funcionar. Pode parar;
  3. Selecionar a opção "A impressora que desejo não está na lista". Avançar;
  4. Adicionar uma impressora usando um endereço TCP/IP...Avançar;
  5. Tipo será "TCP/IP";
  6. No nome do host ou endereço IP, coloque a informação do seu rotador;
  7. Nome da porta, qualquer um (como p910nd);
  8. Não marque para ele consultar a impressora para selecionar o driver. Avançar;
    1. Agora ele vai tentar fazer algo por vários segundos e não vai funcionar. Aguarde;
  9. Na parte de mais informações, selecione Personalizado. Clique em "Configurações";
    1. O protocolo é RAW;
    2. Número da porta será 9100 (padrão) se usada a opção "port 0" do p910nd;
    3. O resto deve estar em branco ou desabilitado;
    4. OK
  10. Avançar
  11. Escolha o driver correto que você usaria caso ela estivesse conectada pela USB. Avançar;
  12. Se o driver já estiver instalado, mantenha-o. Avançar;
  13. Escolha um nome para sua impressora. Avançar. Avançar...


Mais adiante vou tentar montar um artigo de como divulgar a impressora por zeroconf. Neste caso, espero que ele detecte de maneira mais simples e até mesmo selecione automaticamente o driver. Mas isto é detalhe e válido para ambientes com diversos equipamentos ou muita rotatividade.

Até a próxima.

domingo, 20 de abril de 2014

OpenWRT: Atualizando o OpenSSL para resolver o Heartbleed

Se você não vive em uma caverna, sabe da existência do bug heartbleed. A melhor explicação que eu vi foi do xkcd:


A questão é: isto afeta o OpenWRT? Sim. Todos sistemas que usam uma versão ligeiramente recente do OpenSSL foram afetados. No caso do OpenWRT 12.09, ele usa a 1.0.1e-1.

Preciso me preocupar? Depende. O primeiro ponto é se você usa SSL no seu roteador. Ele é instalado por meio de um pacote chamado libopenssl. Se ele não existir, você está salvo. Você pode ver os pacotes instalados com o comando:

opkg list-installed

OK. Está instalado. Agora começo a me preocupar? Ainda não. O ataque permite que o outro lado de uma conexão SSL possa capturar pedaços de memória do seu sistema. Se seu roteador não oferece serviços SSL (https, VPN por exemplo), ele não estará vulnerável a ataques iniciados remotamente. Caso você tenha algum serviço com SSL no roteador (SSH não conta), você deve atualizar o OpenSSL.

heartbleed também ataca clientes SSL. Desta forma, se seu roteador também acessar algo com SSL, o provedor deste serviço pode fazer um ataque no seu roteador. Isto depende do provedor do serviço SSL estar interessado em atacar você ou o serviço dele já estar comprometido com um ataque prévio. Para serviços populares, como Google, Facebook, dificilmente seria arriscado. Entretanto, tome cuidado com serviços de terceiros, principalmente rede TOR e VPN.

Agora a parte fácil. Como arrumar o problema?

opkg update
opkg upgrade libopenssl

Você terá algo como:

root@router:~# opkg upgrade libopensslUpgrading libopenssl on root from 1.0.1e-1 to 1.0.1g-1...Downloading http://downloads.openwrt.org/attitude_adjustment/12.09/ar71xx/generic/packages/libopenssl_1.0.1g-1_ar71xx.ipk.Configuring libopenssl.

Pronto! Reinicie os serviços afetados ou o roteador.

Até a próxima.

sábado, 15 de março de 2014

OpenWRT: Lidando com a versão em desenvolvimento

Este é mais um artigo da série sobre o OpenWRT.

Tenho recebido o pedido de ajuda de pessoas que instalaram, intencionalmente ou por engano, a versão em desenvolvimento do OpenWRT (chamada de trunk). Ela é o que será a próxima versão estável, o Barrier Breaker, que ainda não tem data para lançamento.

Dependendo do roteador, se for um modelo novo, a versão trunk pode ser a única alternativa com suporte. Caso não seja o seu caso, recomendo fortemente sempre usar a versão estável.

OK, já estou rodando a versão trunk. O que eu faço agora?

Você tem algumas opções. A primeira é ficar com a versão trunk e viver com ela. Se estiver funcionando para você, ótimo! A segunda é fazer um downgrade para uma versão estável (12.09 - Attitude Adjustment). Por último, você pode voltar ao firmware original.

Vamos a primeira alternativa.

A versão trunk é, por definição, instável. Pode estar com os recursos que você precisa suficientemente estável. Pode estar com aquele bug que te atrapalha da versão estável corrigido. Pode ter um recurso novo que você não vive sem. Mas pode também resultar em uma firmware que simplesmente não funciona (raramente). Use-a por sua conta e risco.

O problema que mais escuto do pessoal que instalou a versão trunk é a ausência da interface WEB. Você inicia somente com um telnet ativo:
$ telnet 192.168.1.1
Trying 192.168.9.1...
Connected to 192.168.1.1.
 === IMPORTANT ============================
  Use 'passwd' to set your login password
  this will disable telnet and enable SSH
 ------------------------------------------

BusyBox v1.19.4 (2014-03-13 15:14:57 MST) built-in shell (ash)
Enter 'help' for a list of built-in commands.
  _______                     ________        __
 |       |.-----.-----.-----.|  |  |  |.----.|  |_
 |   -   ||  _  |  -__|     ||  |  |  ||   _||   _|
 |_______||   __|_____|__|__||________||__|  |____|
          |__| W I R E L E S S   F R E E D O M
 -----------------------------------------------------
 BARRIER BREAKER (Bleeding Edge, r39913)
 -----------------------------------------------------
  * 1/2 oz Galliano         Pour all ingredients into
  * 4 oz cold Coffee        an irish coffee mug filled
  * 1 1/2 oz Dark Rum       with crushed ice. Stir.
  * 2 tsp. Creme de Cacao
 -----------------------------------------------------
root@OpenWrt:/# 
Note o "BARRIER BREAKER (Bleeding Edge, r39913)". Isto significa que você está rodando uma versão instável ("Bleeding Edge") e na release r39913O aviso logo no começo indica que seria bom você definir uma senha pelo passwd (que desabilitará o telnet e habilitará o SSH), mas nada de interface WEB. O problema é que a versão em desenvolvimento não tem o Luci instalado.
root@OpenWrt:/# opkg list-installed | grep luci
root@OpenWrt:/# 
Mas não impede de você mesmo instalar.
root@OpenWrt:/# opkg update
root@OpenWrt:/# opkg install luci 
root@OpenWrt:/# /etc/init.d/uhttpd start
root@OpenWrt:/# /etc/init.d/uhttpd enable
A partir deste ponto, você já deve ter uma interface web funcional. Só entrar em http://192.168.1.1/. Agora, grande parte dos usuários terão capacidade de lidar com o OpenWRT, mesmo na versão trunk.

Algumas vezes isto não funciona pois o luci não configurou um tema. A interface web vai aparecer uma página de erro. Neste caso, você deve adicionar uma linha em /etc/config/luci (em destaque):

config internal 'themes'

option Bootstrap '/luci-static/bootstrap'

E a interface WEB estará funcionando.

A segunda alternativa é equivalente a um upgrade. Primeiro, localize a URL correta da firmware que você que gravar. Nesta situação, ela deve ter a palavra sysupgrade no nome. Vou usar o modelo TL-WR740N-v1 como exemplo. A URL da versão estável deste modelo na data da publicação deste artigo é:
http://downloads.openwrt.org/attitude_adjustment/12.09/ar71xx/generic/openwrt-ar71xx-generic-tl-wr740n-v1-squashfs-sysupgrade.bin
O processo pode ser realizado pelo telnet/SSH ou pela interface web (se fez o procedimento da primeira alternativa para ativá-la). Na interface web é só enviar o arquivo pelo navegador. Pelo telnet/SSH, estes são os procedimentos:
root@OpenWrt:/# cd /tmp/
root@OpenWrt:/# wget  http://downloads.openwrt.org/attitude_adjustment/12.09/ar71xx/generic/openwrt-ar71xx-generic-tl-wr740n-v1-squashfs-sysupgrade.bin
root@OpenWrt:/# sysupgrade -n openwrt-ar71xx-generic-tl-wr740n-v1-squashfs-sysupgrade.bin
O wget é na mesma linha do http://... e o sysupgrade do openwrt-ar... (mas faltou espaço aqui). Os comandos acima baixam a firmware no /tmp do roteador (que fica apenas na memória RAM), e gravam a firmware sem preservar as configurações. Claro, troque a URL e o nome do arquivo para o respectivo do seu modelo.

E se não tiver internet no roteador? Baixe na sua máquina e copie por scp (winscp no windows) para o /tmp do roteador. O scp é a cópia por SSH e, portanto, vai exigir que você defina uma senha no roteador (comando passwd) para ativá-lo antes da cópia. Com o arquivo em /tmp, execute o sysupgrade como mostrado anteriormente.

E para a última alternativa? Já escrevi sobre isto anteriormente. Depende de cada modelo/fabricante.

Se encontrar algum bug, seja na versão em desenvolvimento ou mesmo na versão estável, você pode reportar em https://dev.openwrt.org/newticket (somente em inglês). Só não esqueça de informar a release que você está usando (como r39913).

Até a próxima.

domingo, 29 de dezembro de 2013

OpenWRT: Recuperação de desastre em vídeo

Este é mais um artigovídeo da série sobre o OpenWRT

Depois de diversas dúvidas na postagem sobre recuperação do OpenWRT, resolvi mostrar os procedimentos em vídeo. Assim ficam menos dúvidas de como apertar o botão, quando, e o que é esperado.





Até a próxima! E feliz 2014!

sábado, 24 de agosto de 2013

OpenWRT: Conectando um modem 3g no seu roteador

Este é mais um artigo da série sobre o OpenWRTDentre os diversos usos de uma USB em um roteador com OpenWRT, um dos mais interessantes é a possibilidade de utilizá-la para conectar um modem 3g.

A rede de dados móvel já possui uma cobertura bem interessante, ao menos nos grandes centros. Em alguns casos, já contamos com a disponibilidade até de redes 4g. Já não é raro a situação onde a conexão de dados móvel tem maior velocidade de transferência do que a conexão cabeada. Contudo, em geral, a latência da rede de dados móvel é bem pior.

Os modem 3g tem um caráter individualista: você conecta diretamente no seu PC e somente ele usa a conexão de dados. Claro que existe a possibilidade de compartilhar a internet através de um outro computador, mas não é nada prático. Um roteador para esta função seria o ideal. É ótimo! Na infraestrutura, você só precisa de uma tomada e pode fornecer internet para um grupo PEQUENO de pessoas. Existe alguns produtos no mercado com o slogan de "roteador 3g" ou "roteador para modem 3g". Eles são roteadores wireless com uma porta USB ou mesmo, nos casos de um modem embutido, uma entrada para SIM Card. Alguns até contam com uma porta Ethernet para aumentar as possibilidades.

Mas qual a diferença destes roteadores "3g" e o que eu tenho aqui? Ele também tem uma porta USB! Por que não funciona conectar um modem 3g nele? A diferença é somente software. Os fabricantes, por ser interessante para seu negócio, limitam as funcionalidades do software do seu roteador. Com OpenWRT, o que você vai fazer com a USB é problema seu. Não temos qualquer limitação artificial.

O primeiro passo para a utilização do modem é a instalação dos drivers e programas para seu modem. Sempre tome cuidado no uso de disco pois colocar muitas funções no seu roteador irá acabar com o seu limitado espaço em disco (que você pode resolver com uma unidade externa USB). Se precisar de mais de uma porta USB, para usá-las também para conectar HD, impressora, você pode precisar de um Hub USB. Só lembre-se que, se for usar um Hub USB, seu modem 3g pode necessitar de um Hub com alimentação externa. O roteador, normalmente, não tem potência suficiente para alimentar mais dispositivos em conjunto com um dispositivo pesado como um modem 3g. Sem o Hub  normalmente, o roteador dá conta.

Considerando que você tem espaço, os pacotes necessários são:
  • comgt
  • kmod-usb-serial
  • kmod-usb-serial-option
  • kmod-usb-serial-wwan ou kmod-usb-acm (depende do seu modem)
  • usb-modeswitch
  • usb-modeswitch-data (Atualizando 3: não necessário para versão BB ou superior)
  • luci-proto-3g (para permitir a configuração pela interface WEB)
Atualizando 4: Atualmente existe uma nova classe de modems 3g que não são CDC-ACM. Usam o padrão QMI. São outros pacotes e a configuração é ainda apenas via arquivo de configuração. Atualizarei sobre estes modens no futuro.

Para instalar, pode ser feito pela interface gráfica (sempre rodando um update antes para baixar a lista de pacotes) ou pela linha de comando:
opkg update

opkg install comgt kmod-usb-serial ...
Se estiver com dúvidas quando ao uso do kmod-usb-serial-wwan ou kmod-usb-acm, você pode instalar todos os pacotes (se tiver espaço). Se quiser descobrir qual é o correto, pode também conectá-lo em um desktop Linux e ver qual módulo é carregado (acm ou wwan). Algo como:
linuxdesktop:$ lsmod | grep acm
Vai listar se o módulo cdc-acm foi carregado.

Atualizando 3: Para a versão BB, é necessário ativar o serviço usbmode.

Instalado os módulos e programas, ao conectar o modem, você encontrará alguns dispositivos novos em /dev/. Eles podem ser /dev/ttyUSB{0,1,3} ou /dev/ttyACM. Isto indicará que seu modem foi reconhecido. Se não aparecer, tende reiniciar ou remover/reconectar o modem. Depois do dispositivo presente, basta adicionar uma nova interface. Você também poderá ver a criação destes dispositivos pelos logs na interface WEB.

Vou limitar a configuração pela interface WEB, que é mais simples e atende um público maior. Em "Rede/Interfaces", clique para adicionar uma nova interface. Escolha o nome que quiser, mas costumo seguir um padrão como wwan (wireless wan). No protocolo  escolha "UMTS/GPRS/EV-DO". Ao prosseguir, você poderá configurar os demais parâmetros.

Nesta configuração, o dispositivo do modem vai ser um dos dispositivos que apareceram com o modem (/dev/ttyUSB0 ou /dev/ttyACM). O tipo de serviço, APN, e usuário e senha depende do seu provedor mas, se não souber, pergunte para quem sabe. O PIN só é necessário se seu cartão foi protegido por senha. Se não souber o que é isso, provavelmente não precisa. Por padrão, o roteador irá conectar pelo modem assim que o roteador ligar ou quando o modem for conectado. Se quiser fazer isto manualmente, desative a opção de conexão na inicialização em "Opções Avançadas". Ainda falta a configuração da zona do firewall, que é fundamental para o funcionamento. O mais simples é simplesmente configurar esta nova interface na zona WAN. Assim, a mesma conectividade que você teria pela porta WAN, você terá na conexão 3g. Se tudo der certo, após aplicar as configurações, seu modem irá conectar em breve.

Sentiu falta de alguma coisa? Ah, não tem opção de configurar o número do telefone pela configuração do OpenWRT. :-( E, para alguns casos, isto é fundamental (Vivo). Para mudar o número de discagem, edite o arquivo /etc/chatscripts/3g.chat e mude o número do comando ATDT. Ex:
/etc/chatscripts/3g.chat:

OK      "ATDT*99#"
No roteador, você tem o editor vi. Para novatos ele é bem estranho mas fundamental saber trabalhar com ele para se virar neste mundo UNIX. Também pode copiar o arquivo, editar no desktop e copiar de volta. Só cuidado para usar um editor que não troque o "nova linha" de UNIX para Windows. Não use o notepad!

Atualizando 1: a versão Barrier Breaker (14.07) já consta com uma opção na configuração para definir o número de discagem: dialnumber. Entretanto, ela não está ainda disponível na interface Luci (WEB). Desta forma, ainda será necessário editar um arquivo de configuração (/etc/config/network) ou usar comandos uci.

Atualizando 2: a futura versão do Luci que acompanhará o OpenWRT Caos Calmer (em desenvolvimento) terá suporte a configuração do dialnumber pela interface web.

Mas ainda não funcionou! Observe as mensagens do sistema (pela interface WEB ou comando logread). Lá estará o motivo de não ter funcionado.

Se a conexão 3g é a sua "segunda conexão", você pode estar interessado também no artigo sobre balanceamento de conexões.

Até a próxima.

PS: Depois que acabar alguns projetos prioritários que estão em fase de conclusão, vou ver se gasto um tempo para adicionar a opção do número de discagem na interface WEB.

sábado, 13 de julho de 2013

OpenWRT: Cópia de arquivos de/para o roteador

Mais um artigo da série sobre o OpenWRT.

Um dos problemas comuns dos novatos no OpenWRT é como fazer a cópia de arquivos de e para o roteador. Em geral, não existe grande diferença entre copiar de um computador com Linux ou de um roteador com OpenWRT. Afinal, ele também é um Linux. Porém, pode ser um pouco diferente para usuários acostumados com o ambiente Windows.

Nativamente, o OpenWRT vem com o servidor SSH Dropbear. Tendo um servidor SSH, já podemos realizar a cópia simples de arquivos pela entrada e saída padrão. Basta que seu ambiente seja um UNIX, como um Linux, BSD ou um MacOSX. Ex:
# copiando o /etc/passwd do roteador

# para /tmp/passwd.router na máquina local
ssh root@router cat /etc/passwd | cat > /tmp/passwd.router 
# copiando o /etc/resolv.conf do computador

# para /tmp/resolv.conf.exemplo no roteador
cat /etc/resolv.conf | ssh root@router "cat > /tmp/resolv.conf.exemplo"
O primeiro "| cat" poderia ser otimido mas deixei para uniformizar os dois comandos.

Claro, dificilmente se usa este recurso para cópias. Uma alternativa mais simples é utilizar o scp. Para este, ao menos, temos uma alternativa para usuários do Windows: o winscp. A partir de ambientes UNIX como o Linux ou o Mac OSX, podemos fazer:
# copiando o /etc/passwd do roteador

# para /tmp/passwd.router na máquina local
scp root@router:/etc/passwd /tmp/passwd.router 
# copiando o /etc/resolv.conf do computador

# para /tmp/resolv.conf.exemplo no roteador
scp /etc/resolv.conf root@router:/tmp/resolv.conf.exempl 
Se a ideia é copiar vários arquivos, você pode usar a opção "-r". Alternativamente a opção '-r', você pode utilizar a primeira solução mas com o comando tar. O tar cria arquivos em formato usado para fitas mas, atualmente, é mais usado como um arquivador. Em conjunto com um compactador de arquivo, ele é similar a um zip. Fica assim:
# copia o conteúdo de /overlay do 

# roteador para o diretório atual
ssh root@router tar -cz /overlay | tar -xzv
Inclusive, pode trocar o "tar -xz" por um "cat > overlay.tar.gz" para criar um tar diretamente pela rede, sem criar o arquivo no roteador. Uma ótima forma de fazer um backup de conteúdos do roteador.

Até este ponto, não era necessário instalar qualquer programa no roteador. Agora vamos as alternativas instaláveis.

Um grande software de cópia de arquivos é o rsync. É um programa de sincronização de diretórios, podendo ser ambos locais ou um deles remotos. Na maioria dos casos, eu o uso como ferramenta de cópia no lugar do scp pois você pode "continuar" a cópia de um diretório com grande números de arquivos e, usando as opções corretas, continuar a cópia de um arquivo grande. Para utilizá-lo no OpenWRT, é necessário instalá-lo.
opkg install rsync
E copie de forma similar ao scp
rsync -av root@router:/overlay /tmp/overlay
Outra opção é usar o SFTP, um FTP sobre o SSH. Pelo fato do servidor SSH do OpenWRT ser desenvolvido para ambientes embarcados, alguns recursos foram suprimidos. Como temos o scp, o sftp ficou de fora. Contudo, ele está preparado para utilizar o servidor sftp do openssh. Isto vai exigir, no mínimo uns 700 Kbytes de espaço de disco livre:
opkg install openssh-sftp-server
Depois de instalar, você já pode usá-lo. Não precisa reiniciar o roteador ou mesmo o dropbear. A vantagem do sftp é poder utilizar navegadores gráficos clássicos como o filezilla ou o suporte nativo dos gerenciadores de arquivos no Linux (gnome nautilus e kde dolphin) para o protocolo sftp://root@router/.

Um ponto interessante de todas as opções que foram listadas aqui é que todas operam sobre o canal do SSH e, portanto, utilizam somente a porta do serviço SSH (22). Tudo criptografado e seguro, desde que a sua senha esteja segura. Se quiser fazer o acesso de fora da rede interna, basta liberar a porta 22 do firewall do OpenWRT.

Até a próxima!