Discuta este tópico no fórum

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

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!

9 comentários:

  1. Boa noite.
    talvez aqui não seja o lugar certo mais estou com um problema. Estou tentando acessar uma camera remota a partir da minha casa e nao consigo. Contudo quando acesso pelo 3g vai.
    Na configuracao do openwrt parece duas vlans. Uma para wan e outra p lan. Outro detalhe eh que eu acesso a web sem problemas.

    ResponderExcluir
  2. Boa tarde,
    Amigo, instalei uma firmware "nova" que vem com o SIMET e logo depois percebi que haviam sumido as opções de backup de configuração e de atualização do roteador. O q posso fazer pra recuperar isso???
    Segue uma imagem:
    http://imm.io/1fCEX

    ResponderExcluir
    Respostas
    1. Provavelmente é intencional. Eles não querem que você troque a firmware.

      Se você tiver acesso SSH, pode usar o sysupgrade para gravar uma nova firmware.

      Excluir
    2. Não consegui acesso SSH, sempre da o erro: Network error: Connection timed out ... O q posso fazer?

      Excluir
    3. Como falei, eles devem intencionalmente ter desligado os acessos para evitar que alguém troque a função do roteador usado para monitoramento da qualidade da internet. Em última instância, você pode trocar o firmware pela serial. Mas isto depende de um adaptador serial nível TTL e soldar uns fios na placa.

      Excluir
  3. Boa tarde, Luiz
    Sabe se existe a possibilidade do WDR 3600 conectar com um modem 3g/4g do tipo "Hilink" por exemplo o ZTE MF823L?
    Não consigo conectar o modem nesse roteador.

    ResponderExcluir
    Respostas
    1. Primeiro é preciso saber se ele funciona no Linux. Se funcionar com os drivers nativos, deve também funcionar com o OpenWRT. Até onde você chegou?

      PS: acho q vc está no artigo errado.

      Excluir
  4. Boa tarde Luiz,

    Você teria a informação de como eu consigo enviar o log por e-mail do log do RSYNC?

    Abç
    IVan Neto

    ResponderExcluir
    Respostas
    1. Ivan, como você rodaria o rsync? Pela cron? Ela naturalmente envia por email qualquer saída dos comandos executados.

      Nativamente o rsync (e a grande maioria dos programas) não envia email. É a filosofia Unix de fazer uma coisa e deixar outras funcionalidades para outro programa. Um pequeno script faria este trabalho.

      Excluir