Mais um artigo da série sobre o OpenWRT.
Uma das características que acho mais fascinante da a internet é a possibilidade de trabalhar de qualquer lugar. Muitas empresas já utilizam esta característica para permitir que seus funcionários trabalhem em viagem, de casa, de onde estiver. Afinal, cada posto de trabalho e o deslocamento custa um bom trocado. Para trabalhar, em geral, é necessário ter acesso as informações e serviços da rede interna da empresa.
Esta necessidade de acesso também é comum para o mundo residencial. Quando temos um serviço na rede interna em casa e que queremos acessar "de fora", a técnica mais comum é o encaminhamento de portas. Ela mapeia uma porta do roteador para um serviço de computador da rede interna. Contudo, isto expõe estes serviços a ataques externos. Normalmente, não é uma boa ideia para serviços muito populares ou sem segurança.
Também podemos fazer este acesso por encaminhamento de portas em uma conexão SSH. Funciona muito bem e, desde que o SSH não seja comprometido, é seguro. Só não é muito prático. Configurar os encaminhamentos individualmente para cada serviço pode ser um tanto trabalhoso. Os acessos não ficam muito práticos pois tudo estará em portas locais (127.0.0.1:xxxx). Não fica transparente para o usuário. Para ter um acesso de forma mais simples e transparente, podemos usar uma conexão VPN.
A VPN (virtual private network) permite a conexão de dois pontos através de uma rede virtual, como se existisse um cabo de rede ligando diretamente as duas pontas. Para os programas que utilizarem este "cabo virtual", não existirá diferença entre estar ligado diretamente na rede local ou estar a milhares de quilômetros (exceto que a velocidade da internet é algumas vezes mais lenta que a rede local). Como a internet não é um meio dos mais seguros para trafegar informações internas (alô Obama!), se tornou quase implícito a utilização de criptografia nas conexões VPN.
Existem algumas formas de prover esta conectividade. As mais comuns são pelo protocolo PPTP, L2TP/IPSEC, ou pelo OpenVPN. O primeiro, apesar de ser um dos mais antigos e mais largamente disponíveis, não é muito seguro e vou deixar de lado. O segundo também é bem comum e disponível nativamente em diversos ambientes, como Windows e Android. O OpenVPN é ótimo mas depende da disponibilidade e da instalação do cliente OpenVPN para seu ambiente. Como é um serviço completo em si, o OpenVPN é mais fácil de implementar o servidor. Vou começar por este.
O OpenVPN é relativamente tranquilo de instalar e possui clientes para diversos ambientes, inclusive plataformas mobile. A parte mais complicada é a autenticação. Esta normalmente é feita através de certificados emitidos por uma CA, que criaremos durante o processo (não precisa comprar certificados).
Você vai precisar de um roteador com OpenWRT (utilizarei o Barrier Breaker - BB - mas o AA também funciona), com 8 MB de flash ou disco expandido via unidade USB. Você também precisará editar alguns arquivos pelo terminal (SSH/Telnet). Seria bom conhecer ao menos o básico do editor vi. A interface WEB não é suficiente.
Na versão Barrier Breaker, existe 3 opções de openvpn:
A primeira é mais enxuta mas não utiliza criptografia, o que normalmente é um requisito de um serviço VPN. Os dois seguintes são equivalentes, variando apenas a implementação de ssl que será utilizada. O polarssl é mais enxuto tanto em funcionalidades como em tamanho. É muito interessante para ambientes com restrição de recursos como o roteador e provavelmente terá tudo que você precisa. Contudo, se você já tem o libopenssl instalado por requisito de outro pacote, não vale a pena instalar o polarssl em paralelo. No meu caso, como tenho outros pacotes que já exigem o openssl, vou instalar o segundo pacote (em destaque).
Também é interessante instalar o openvpn-easy-rsa. Ele cria a infraestutura de uma CA de fácil gerenciamento. Você poderia utilizar o certificado de outra autorizade certificadora. Porém, considero uma CA dedicada ao VPN a solução mais atraente, tanto por simplificar o gerenciamento como para restringir problemas de segurança. Afinal, o comprometimento desta CA dedicada fornecerá ao atacante acesso ao roteador, que já seria previamente um requisito para poder comprometer a CA.
opkg update
opkg install openvpn-openssl openvpn-easy-rsa
Já adiantando, se o roteador fosse utilizado como um cliente OpenVPN, o pacote seria o mesmo (openvpn-{nossl,openssl,polarssl}). Só não seria necessário o openvpn-easy-rsa.
Antes de configurar o openvpn, vamos montar a CA. O easy-rsa trabalha apenas com scripts para fornecer toda a funcionalidade de uma CA necessária para o OpenVPN. Os parâmetros que você deve querer alterar estão em /etc/easy-rsa/vars. Você vai querer alterar estes campos:
# These are the default values for fields
# which will be placed in the certificate.
# Don't leave any of these fields blank.
export KEY_COUNTRY="US"
export KEY_PROVINCE="CA"
export KEY_CITY="SanFrancisco"
export KEY_ORG="Fort-Funston"
export KEY_EMAIL="me@myhost.mydomain"
export KEY_OU="MyOrganizationalUnit"
# (. /etc/easy-rsa/vars; CRL="/etc/easy-rsa/keys/crl.pem"; KEY_CN="" KEY_OU="" KEY_NAME="" $OPENSSL ca -gencrl -out "$CRL" -config "$KEY_CONFIG")
Você vai precisar de um roteador com OpenWRT (utilizarei o Barrier Breaker - BB - mas o AA também funciona), com 8 MB de flash ou disco expandido via unidade USB. Você também precisará editar alguns arquivos pelo terminal (SSH/Telnet). Seria bom conhecer ao menos o básico do editor vi. A interface WEB não é suficiente.
Na versão Barrier Breaker, existe 3 opções de openvpn:
- openvpn-nossl (sem criptografia)
- openvpn-openssl
- openvpn-polarssl
A primeira é mais enxuta mas não utiliza criptografia, o que normalmente é um requisito de um serviço VPN. Os dois seguintes são equivalentes, variando apenas a implementação de ssl que será utilizada. O polarssl é mais enxuto tanto em funcionalidades como em tamanho. É muito interessante para ambientes com restrição de recursos como o roteador e provavelmente terá tudo que você precisa. Contudo, se você já tem o libopenssl instalado por requisito de outro pacote, não vale a pena instalar o polarssl em paralelo. No meu caso, como tenho outros pacotes que já exigem o openssl, vou instalar o segundo pacote (em destaque).
Também é interessante instalar o openvpn-easy-rsa. Ele cria a infraestutura de uma CA de fácil gerenciamento. Você poderia utilizar o certificado de outra autorizade certificadora. Porém, considero uma CA dedicada ao VPN a solução mais atraente, tanto por simplificar o gerenciamento como para restringir problemas de segurança. Afinal, o comprometimento desta CA dedicada fornecerá ao atacante acesso ao roteador, que já seria previamente um requisito para poder comprometer a CA.
opkg update
opkg install openvpn-openssl openvpn-easy-rsa
Já adiantando, se o roteador fosse utilizado como um cliente OpenVPN, o pacote seria o mesmo (openvpn-{nossl,openssl,polarssl}). Só não seria necessário o openvpn-easy-rsa.
Antes de configurar o openvpn, vamos montar a CA. O easy-rsa trabalha apenas com scripts para fornecer toda a funcionalidade de uma CA necessária para o OpenVPN. Os parâmetros que você deve querer alterar estão em /etc/easy-rsa/vars. Você vai querer alterar estes campos:
# These are the default values for fields
# which will be placed in the certificate.
# Don't leave any of these fields blank.
export KEY_COUNTRY="US"
export KEY_PROVINCE="CA"
export KEY_CITY="SanFrancisco"
export KEY_ORG="Fort-Funston"
export KEY_EMAIL="me@myhost.mydomain"
export KEY_OU="MyOrganizationalUnit"
Existem outros campos como tamanho de chave e expiração do certificado que você pode querer aumentar ou desativar:
export KEY_SIZE=2048
# In how many days should the root CA key expire?
export CA_EXPIRE=3650
# In how many days should certificates expire?
export KEY_EXPIRE=3650
Agora é só criar a CA:
# clean-all # opcional para primeira execução
# build-ca # (com o /etc/easy-rsa/vars configurado, só seguir)
# build-dh # vai demorar...
Não é necessário mas gosto de sempre gerar a lista de certificados revogados e configurá-la no OpenVPN. Caso precise revogar um certificado, tudo está pronto. Porém, a versão do easy-rsa do OpenVPN só gera o crl.pem ao revogar um certificado. Você pode gerá-lo manualmente com este comando:
# (. /etc/easy-rsa/vars; CRL="/etc/easy-rsa/keys/crl.pem"; KEY_CN="" KEY_OU="" KEY_NAME="" $OPENSSL ca -gencrl -out "$CRL" -config "$KEY_CONFIG")
Agora podemos criar o certificado do servidor VPN e dos clientes:
# build-key-server server
# build-key cliente1
# build-key cliente2
# ...
Crie quantos clientes quiser e a qualquer tempo. Escolha nomes informativos como cliente-tablet-luiz. Quanto ao certificado do servidor, normalmente teremos apenas um durante toda a validade do certificado. Se trocar o nome de server para outra coisa, irá afetar os campos cert e key da configuração do OpenVPN.
Depois podemos configurar o servidor VPN. O arquivo de configuração fica em /etc/config/openvpn:
config 'openvpn' 'lan'
option 'enable' '1'
option 'port' '1194'
option 'proto' 'udp'
option 'dev' 'tun'
option 'ca' '/etc/easy-rsa/keys/ca.crt'
option 'cert' '/etc/easy-rsa/keys/server.crt'
option 'key' '/etc/easy-rsa/keys/server.key'
option 'dh' '/etc/easy-rsa/keys/dh2048.pem'
option 'crl_verify' '/etc/easy-rsa/keys/crl.pem'
option 'ifconfig_pool_persist' '/tmp/ipp.txt'
option 'keepalive' '10 120'
option 'comp_lzo' 'no'
option 'persist_key' '1'
option 'persist_tun' '1'
option 'status' '/var/log/openvpn-status.log'
option 'verb' '3'
option 'server' '192.168.2.0 255.255.255.0'
option 'client_to_client' '1'
list 'push' 'redirect-gateway def1'
list 'push' 'dhcp-option DNS 192.168.1.1'
list 'push' 'route 192.168.1.0 255.255.255.0'
Os destaques tem as opções que você provavelmente quer alterar. A porta 1194 é a padrão e pode ser interessante trocá-la para evitar que uma varredura simples de rede achem seu OpenVPN. O crl_verify deve estar presente caso você tenha gerado o crl.pem que comentei anteriormente. Caso não deseje revogar certificados, remova-o.
O ifconfig_pool_persist permite que os endereços atribuídos a um cliente se mantenham na próxima conexão. Isto é equivalente ao arquivo leases do DHCP. Contudo, ao colocá-lo em /tmp, você irá perder este arquivo a cada reboot do roteador. Mude para /etc/openvpn/ipp.txt para manter mesmo após desligar o roteador ou remova a linha caso não queira manter os endereços.
A opção comp_lzo habilita a compactação do tráfego antes da criptografia. Isto poupa a quantidade de dados trafegados mas aumenta a carga sobre o roteador e também deixa a conexão um pouco mais lenta.
A opção server indica a faixa de endereços utilizada pelos clientes VPN. Ela não será a mesma da sua rede local. Procure escolher algo que não conflite com a rede local do servidor VPN e nem dos clientes (contudo algumas vezes não é possível conhecê-la previamente).
Os push finais são usados para enviar configurações ao cliente. As apresentadas criam a rota para seu cliente VPN falar com a LAN do servidor VPN. Caso contrário, ele somente irá ver o servidor VPN e não os clientes. Remova estas linhas se quer apenas acessar os serviço do roteador onde o servidor VPN está.
É hora de disparar o serviço:
/etc/init.d/openvpn start
Acompanhe pelo logread por possíveis erros. Isto é uma execução normal:
Tue Jan 20 16:07:20 2015 daemon.notice openvpn(server)[7991]: OpenVPN 2.3.6 mips-openwrt-linux-gnu [SSL (OpenSSL)] [LZO] [EPOLL] [MH] [IPv6] built on Jan 6 2015
Tue Jan 20 16:07:20 2015 daemon.notice openvpn(server)[7991]: library versions: OpenSSL 1.0.1j 15 Oct 2014, LZO 2.08
Tue Jan 20 16:07:20 2015 daemon.notice openvpn(server)[7991]: Diffie-Hellman initialized with 2048 bit key
Tue Jan 20 16:07:20 2015 daemon.notice openvpn(server)[7991]: Socket Buffers: R=[163840->131072] S=[163840->131072]
Tue Jan 20 16:07:20 2015 daemon.notice openvpn(server)[7991]: TUN/TAP device tun0 opened
Tue Jan 20 16:07:20 2015 daemon.notice openvpn(server)[7991]: TUN/TAP TX queue length set to 100
Tue Jan 20 16:07:20 2015 daemon.notice openvpn(server)[7991]: do_ifconfig, tt->ipv6=0, tt->did_ifconfig_ipv6_setup=0
Tue Jan 20 16:07:20 2015 daemon.notice openvpn(server)[7991]: /sbin/ifconfig tun0 192.168.xx.1 pointopoint 192.168.33.2 mtu 1500
Tue Jan 20 16:07:20 2015 daemon.notice openvpn(server)[7991]: /sbin/route add -net 192.168.xx.0 netmask 255.255.255.0 gw 192.168.xx.2
Tue Jan 20 16:07:20 2015 daemon.notice openvpn(server)[7991]: UDPv4 link local (bound): [undef]
Tue Jan 20 16:07:20 2015 daemon.notice openvpn(server)[7991]: UDPv4 link remote: [undef]
Tue Jan 20 16:07:20 2015 daemon.notice openvpn(server)[7991]: MULTI: multi_init called, r=256 v=256
Tue Jan 20 16:07:20 2015 daemon.notice openvpn(server)[7991]: IFCONFIG POOL: base=192.168.xx.4 size=62, ipv6=0
Tue Jan 20 16:07:20 2015 daemon.notice openvpn(server)[7991]: Initialization Sequence Completed
Já está funcionando? Sim, mas não para os clientes externos. Disparamos o serviço neste ponto para o OpenVPN criar o dispositivo tun0. Isto permite que seja utilizado o Luci (interface web) para configurar o firewall. Você pode visualizar esta interface pelo "ifconfig" ou "ip add show".
No firewall, abra a porta 1194 UDP ou a que você definiu anteriormente para receber conexões externas. Está em "Rede/Firewall/Regras de Tráfego/Abrir portas no roteado".
Neste momento, os clientes já podem conectar ao serviço. Todavia, ao conectarem, existirá um cabo virtual entre o cliente e o dispositivo tun0 do roteador (versão simplificada da topologia). O problema é que tun0 não pertence a nenhuma interface do OpenWRT (e consequentemente, a nenhuma zona do firewall). Por padrão, este tráfego será descartado.
Pela interface Luci, adicione uma nova interface (sugestão de nome: vpn) no OpenWRT em Rede/Interfaces. Configure-a para ser não gerenciada e escolha o dispositivo tun0. Nesta mesma interface, você já pode atribuir uma zona do firewall. Se os clientes VPN terão privilégios iguais aos da rede local, basta adicionar a interface vpn à zona lan. Se quiser algo diferenciado, crie uma nova zona e defina a vontade as regras de filtragem.
Está pronto. Seus clientes devem estar prontos para conectar ao seu novo serviço.
Para isto, eles vão precisar:
Para isto, eles vão precisar:
- /etc/easy-rsa/keys/<cliente>.crt
- /etc/easy-rsa/keys/<cliente>.key
- /etc/easy-rsa/keys/ca.crt
- O endereço internet do seu roteador (pode ser o FQDN de um DNS dinâmico)
- Saber se está usando a compactação (lzo) ou não
Para alguns clientes você vai precisar de um profile xxx.opvn. Existem algumas alternativas para criá-lo. Uma seria fazê-lo manualmente. É um arquivo texto neste formato
client
remote-cert-tls server
remote endereco-internet porta
comp-lzo yes
<ca>
conteúdo de ca.crt
</ca>
<key>
conteúdo de <cliente>.key
</key>
<cert>
conteúdo de <cliente>.crt
</cert>
Retire o comp-lzo se não usar a compactação no servidor. Também existem ferramentas para Linux e Windows que geram o .ovpn. Alternativamente, use este script diretamente no roteador.
Caso a conexão de um cliente não funcione, observe os logs tanto do OpenWRT (logread) como do cliente OpenVPN. Um sniffer de rede escutando na interface externa também ajuda. Testes de clientes VPN vindos da rede local para o endereço IP do roteador externo não irão funcionar automaticamente pois ele irá responder com o endereço IP interno e o cliente recusará a resposta vinda de outro endereço. É um problema muito parecido ao apresentado em um post antigo. Se for testar de dentro da sua rede, use o IP interno do roteador (por padrão, 192.168.1.1).
Mas eu queria ter um endereço de dentro da rede (LAN) e não em uma faixa diferente (VPN). Tem como? Sim. Neste caso, o modo do túnel deve ser tap e não tun. Além disto, a interface tap0 teria que ser adicionada a br-lan. Porém, isto faz com que todas as mensagens broadcast da LAN sejam enviadas pelo túnel. Normalmente isto resulta em um bom desperdício de rede. Outro problema é que alguns clientes não suportam tap, como o android, devido a limitação da API VpnService (reclamem com o Google).
No próximo post mostro como fazer o outro lado configurando um cliente OpenVPN no roteador.
Atualizando: Alguma dúvida? Criei um fórum para o blog e vou criar um tópico para cada novo artigo.
Até a próxima.
client
remote-cert-tls server
remote endereco-internet porta
comp-lzo yes
<ca>
conteúdo de ca.crt
</ca>
<key>
conteúdo de <cliente>.key
</key>
<cert>
conteúdo de <cliente>.crt
</cert>
Retire o comp-lzo se não usar a compactação no servidor. Também existem ferramentas para Linux e Windows que geram o .ovpn. Alternativamente, use este script diretamente no roteador.
Caso a conexão de um cliente não funcione, observe os logs tanto do OpenWRT (logread) como do cliente OpenVPN. Um sniffer de rede escutando na interface externa também ajuda. Testes de clientes VPN vindos da rede local para o endereço IP do roteador externo não irão funcionar automaticamente pois ele irá responder com o endereço IP interno e o cliente recusará a resposta vinda de outro endereço. É um problema muito parecido ao apresentado em um post antigo. Se for testar de dentro da sua rede, use o IP interno do roteador (por padrão, 192.168.1.1).
Mas eu queria ter um endereço de dentro da rede (LAN) e não em uma faixa diferente (VPN). Tem como? Sim. Neste caso, o modo do túnel deve ser tap e não tun. Além disto, a interface tap0 teria que ser adicionada a br-lan. Porém, isto faz com que todas as mensagens broadcast da LAN sejam enviadas pelo túnel. Normalmente isto resulta em um bom desperdício de rede. Outro problema é que alguns clientes não suportam tap, como o android, devido a limitação da API VpnService (reclamem com o Google).
No próximo post mostro como fazer o outro lado configurando um cliente OpenVPN no roteador.
Atualizando: Alguma dúvida? Criei um fórum para o blog e vou criar um tópico para cada novo artigo.
Até a próxima.
Excelente!! Esse já virou pdf e está salvo permanentemente na lista!!
ResponderExcluirRecente eu usei uma caixinha, GLinet, e coloquei um firmware prontinho para o openwrt. Ele cria duas redes wifi, uma normal e outra rede TOR.
Tentei reproduzir no tplink WDR4300 e não tive muito sucesso.
Adoraria se vc pudesse nos brindar com um dos seus incríveis tutoriais abordando esse assunto!!
Muito obrigado e Parabéns pelo blog!
abraçuu ;-)
Olá Anônimo,
ExcluirTOR é interessante sim, assim como o I2P. Nunca configurei um roteador cebolão por não ter necessidade dos seus serviços. Além disto, se você pretente visitar o Tio Sam, talvez não seja uma boa ideia usá-lo: http://www.techtimes.com/articles/9779/20140708/nsa-might-tag-you-as-extremist-when-you-use-tor-other-privacy-online-services.htm
Marcado como extremista.. boa.. nunca ouvira sobre isso! Vlw pela dica. Uma pena que vc não nos brinde com esse tutorial... em todo caso, muito obrigado!!
ExcluirQuem sabe um dia eu acorde com um humor mais extremista e escreva um artigo sobre TOR ;-)
ExcluirBom dia Luiz.
ResponderExcluirQual seria um programa cliente via Windows que funcionaria pra conectar nesta VPN criada pelo Roteador ?
GRato.
Você pode perguntar ao google ;-) Existe uma seleta de clientes que oferecem interfaces distintas.
ExcluirA "oficial" é esta:
https://openvpn.net/index.php/open-source/downloads.html
Muito bom , Você sabe me dizer se configurando o VPN corretamente, conseguirei acessar o aplicativo torrent pela rede interna? Pergunto isso pq onde trabalho, todas as portas são bloqueadas, apenas a de internet que funciona, então não tenho acesso algum ao torrent do roteador via rede externa, seja a porta que for, a um tempo atrás usava a porta 20 mais foi fechada recentemente.
ExcluirGrato.
André,
ExcluirNão ficou claro mas acho que você quer acessar o torrent da sua casa a partir do trabalho, certo?
Neste caso, deve funcionar configurar a VPN na porta 443 (https) e você conectar de um cliente interno no trabalho. Uma vez a vpn estabelecida, não existe qualquer restrição ao tráfego: pode acessar seu gerenciador de torrent.
Isso mesmo que queria saber , então vou providenciar a instalação e os testes.
ExcluirObrigado .
Luiz, no caso gostaria de usar OpenWrt como client OpenVpn... teria alguma luz..
ResponderExcluirAnônimo, não tem muita diferença entre servidor e cliente. O que muda é que a entrada server e port são trocadas por remote. se usar autenticação por certificados, é bom que os clientes verifiquem que o certificado da outra ponta seja de um servidor (remote-cert-tls). Fora e outras coisas que fazem sentido apenas no servidor mas que não devem atrapalhar.
ExcluirAs configurações do OpenVPN no OpenWRT são as mesmas. Só precisa trocar - por _ e usar dentro de uma option ou list ( quando é uma opção que aceita repetições)
Luiz, muito bom seu tutorial, mas acabei me enrolando, meu conhecimento de Linux é básico.Acabei optando instalar o VPN Server (OpenConnect) para poder gerenciar meus torrents remotamente. Segui esse tutorial https://wiki.openwrt.org/doc/howto/openconnect-setup e só consegui conectar a VPN de dentro da minha rede rs, de fora a solicitação é descartada pela porta 443, parece que é o encaminhamento das portas que está errado. Tô quebrando a cabeça, já tentei configurar o Openvpn, porém sem sucesso. Utilizo o luci cc 15.05. ou então quero configurar vpn server pptp, só que não acho o pacote do server para instalação. Será que pode me ajudar? Muito obrigado
ResponderExcluirAnônimo,
ExcluirTeste o encaminhamento com algo que não a VPN como um servidor http. Eu tentaria outras portas, pois a https(443) é as vezes bloqueada pelo provedor de internet. Se for só o encaminhamento de porta, não precisa de vastos conhecimentos em linux pois você faz tudo na configuração de firewall pela interface web.
Pptp não é lá muito seguro e também foge do tema da postagem
oi luiz blz estou com um problema no openvpn, o problema que tenho é que ele autentica tudo pega o ip mas não consigo acessar nada na rede nem acessar internet a partir dele. fiz tudo conforme o tutorial baixei os pacotes, criei ca server e cliente, configurei o arquivo openvpn, criei a interface, firewall, configurei a chave no cliente oque pode ser ?
ResponderExcluirCaique, parece sintoma de problema no roteamento. Você criou.a i terface vpn para o dispositivo tun0? E colocou esta interface em uma zona do firewall que está autorizada para acessar a internet?
Excluirsim criei a interface e coloquei na zona do firewall da lan como também já testei criando uma zona no firewall a parte, abrir também a porta necessária para a comunicação. vou fazer o teste com porta diferente estou achando que é a operadora que esta bloqueando a porta, vou fazer os testes e depois te falo se solucionou o problema.
ExcluirEstou com o mesmo problemas! Conecta na VPN, porém não tenho acesso a internet. O que poderia ser?
ResponderExcluirMSS,
ExcluirSe a VPN conectou e você consegue pingar o roteador, o problema é roteamento ou firewall.
Para navegar na internet, os clientes devem receber uma nova rota padrão ao conectar na internet saindo pela VPN. No roteador, o dispositivo tun0 (ou a que você está usando) deve estar configurada em uma interface do OpenWRT e esta ter acesso de encaminhar pacotes para a internet. Se tudo isto estiver certo, a configuração padrão do firewall não deve atrapalhar.
Ah, claro, tem o DNS. Se você usa um DNS na intranet e seu cliente dependia dela para acessá-lo, não vai funcionar.
Recomendo:
verificar a conectividade com o roteador (ping 192...)
verificar a conectividade com a internet (ping 8.8.8.8)
verificar quais são seus DNS (originalmente ou fornecidos pela VPN)
verificar a conectividade com os DNS
Olá Luiz, tenho 2 roteadores com as configurações iguais, com 2 redes wireless (interno e visitante), ambos conectados num mesmo switch. Tem como conectar o 2º roteador ao primeiro de modo a ser visto como uma unica rede?
ResponderExcluirSim. Por um mesmo cabo você pode passar quantas redes quiser usando etiquetas de VLAN.
ExcluirPrimeiro, se estão em um switch, estão operando como AP? Não recomendo usar nat nestes casos. Não vejo como o switch liga os dois sem usar Nat.
Interno e visitante são redes distintas? Se é para isolar as redes, é entre as duas wifi ou entre estas e os outros equipamentos ligados no switch?
Preciso ter uma visão melhor da sua rede para ajudar. Seria bom abrir um tópico no fórum do blog (links no topo e rodapé)
Luiz como fica a configuração como TCP na Porta 443 é só trocar UDP pra TCP ou tem alguma configuração adicional?
ResponderExcluirSim, protocolo para tcp e porta para 443. Só que algumas operadoras bloqueiam estes porta (alô NET!). Só não sei onde fica a neutralidade da rede neste caso 😀
ExcluirOlha com um sniffer de rede (ex: tcpdump) se chega os pacotes.
Boa tarde!
ResponderExcluirLuiz primeiramente quero te agradecer pelo tutorial e pela ajuda que me deu em um tópico que abri. Queria tirar umas duvidas, eu consegui configurar tudo certinho consigo acessar meu HD no caso minha rede. A primeira duvida e se tem cliente para android, se sim como funciona,e a outra é, além de poder acessar minha rede com a vpn o que mais eu posso fazer estando na minha rede, por exemplo poderia acessar a o luci do meu roteador, ou terminal ssh se sim como funciona. E queria deixar uma dica não sei se é interessante, mas vi pessoas procurando na net, mas la vai. Eu instalei o ADBLOCK aquele app de navegador que bloqueia span, funciona muito bem apesar de sr feito para o projeto LEDE, segue o link https://github.com/openwrt/packages/tree/master/net/adblock/files.
Fabiano,
ExcluirVocê pode fazer qualquer coisa que quiser na sua rede. Basta a configuração do firewall permitir (ou colocar na zona LAN). A única coisa que não funciona é os recursos que dependem de mensagem broadcast na rede (ex: localizar os tocadores de UPnP, cameras IP, etc...). E sim, ssh/luci deve funcionar.
O adblock deve estar pronto para a próxima versão do LEDE, já que o OpenWRT tende a desaparecer. Quando sair uma versão oficial do LEDE, devo comentar melhor essa separação.
Ok entendi vou fazer testes aqui, e sobre um cliente openvpn para android saberia se é possível, por que não achei nada na internet?
ResponderExcluirSim, tem algumas alternativas. O mais tradicional é o OpenVPN connect.
ExcluirLuiz eu não consigo conectar a vpn na faculdade da timoout, nem mesmo o cliente transmission conecta, sabe me dizer o que pode ser e que testes ou ferramenta posso usar para verificar, utilizo o opensuse. Porta não é porque na empresa funciona e nos testes de porta sempre da fechada mas funciona.
ResponderExcluirDevem estar bloqueando a porta ou serviços udp. Você pode tentar identificar uma porta que a faculdade libera. Gosto de testar com comandos básicos como o netcat/nc. Libera temporariamente acesso completo no firewall do seu roteador para dados vindos do IP da faculdade. Depois rode um netcat em modo servidor e teste diferentes portas com tcp ou udp.
ExcluirSugestão: portas 1194, 8080, 8443, 443, 80
A porta 443 provavelmente está liberada mas seu provedor pode bloqueá-la para liberar somente com contrato empresarial (ex:net)
Teste o netcat antes localmente e do trabalho para ficar familiarizado.
O tcpdump com os filtros adequados também é uma mão na roda
Boa noite! Luiz vlw pela resposta, eu entendi esta parte de descobrir porta aberta, e isso e tranquilo, o problema e que la no meu roteador eu configurei uma porta xxxx fixa para o openvpn ok, o problema e que o aplicativo do openvpn que tenho no note e no smartfone quando tenta fechar conexão com a vpn, ele escolhe uma porta src aleatória la faculdade ok, então como faço para ele utilizar uma porta fixa.
ResponderExcluirAcho que é a porta de origem, não de destino. TCP e UDP trabalham com um par de portas. A de destino sempre é "conhecida", enquanto a de origem é alta (>1024) e aleatória. Não é necessário fixá-la.
ExcluirLuiz,
ResponderExcluirMinha conexão de internet esta atrás de uma rede CGNAT, não sei se você tem informações a respeito desse tipo de topologia, mas ela trás algumas limitações. Uma dessas limitações é que eu não consigo fazer o redirecionamento de portas para acesso externo. Gostaria de acessar a rede da minha casa de onde eu estiver, mas não tenho como.
Eu assino um serviço de VPN, e como esse serviço é baseado no OpenVPN eu estava pensando em configura-lo diretamente no OpenWRT. Caso eu consiga realizar com sucesso essa configuração, seria possível eu ter acesso a minha rede externamente e fazer os ports forwarding que eu preciso?
Carlos,
ExcluirTudo depende do que o serviço VPN seu vai entregar. Se for um IP real, sim, poderá fazer os encaminhamentos diversos, liberação da porta ou mesmo criar o seu serviço VPN sobre a VPN contratada para evitar encaminhamentos de porta. Se também for um IP falso, o serviço VPN não é melhor do que seu CGNAT.
Sinto em dizer mas CGNAT é realmente um problema complicadíssimo. A solução é só uma: IPv6. Normalmente o CGNAT aparece junto com o IPv6. Se não for seu caso, reclame com sua telecom para ela migrar logo para IPv6. Com IPv6, todos os dispositivos terão um IP real (normalmente vários) e o que vai limitar o acesso externo é o firewall do roteador.
Luiz,
ExcluirPoderia me ajudar na configuração do client VPN no OpenWRT? Tenho um arquivo .ovpn de uma região que posso me conectar e não estou conseguindo importa-lo para dentro do openvpn do roteador.
A configuração do arquivo é a seguinte:
client
dev tun
proto udp
cipher AES-256-CBC
remote 162.243.109.84 1194
resolv-retry infinite
nobind
tun-mtu 1500
tun-mtu-extra 32
mssfix 1450
persist-key
persist-tun
block-outside-dns
auth-user-pass
comp-lzo
reneg-sec 0
verb 3
Consegue me ajudar?
Obrigado!
Carlos,
ExcluirO modo cliente é em outro artigo ;-)
http://luizluca.blogspot.com.br/2015/02/openwrt-cliente-vpn-com-openvpn.html
Enfim, você precisa traduzir cada linha. Ex para a última linha:
option 'verb' '3'
Só o '-' fica um '_':
option 'persist_tun' '1'
E olhe e artigo do OpenWRT como cliente. Se estiver com mais dúvida, pode perguntar lá ou crie um tópico no fórum (links no começo e fim desta página)
Valeu, obrigado.
ExcluirLuiz,
ResponderExcluirPode me dar uma ajuda, eu não consigo conectar o meu vpn na faculdade porque o protocolo udp é bloqueado. Então quero configurar o servidor vpn com udp e tcp mas no mesmo ele não aceita os dois protocolos. Tentei configurar dois server diferentes um com udp e outro com tcp mas da erro, nao aceita, sabe me dizer como pode ser feito isso?
Fabiano,
Excluirse não tiver conflitos nos nomes, nas faixas de endereços e nos dispositivos, deve funcionar.
Luiz,
ResponderExcluirtenho uma duvida de leigo em linux. Como Salvar as ediçoes feitas no putty?
Edições onde? Na configuração do Putty? Não estou captando a dúvida.
ExcluirNão seria meio fora do tema "Servidor VPN com OpenWRT"?
Olá Luiz, achei muito interessante essa possibilidade de fazer do roteador servidor com OpenVPN para conseguir acessar a rede interna remotamente, parabéns pelo Tutorial, mas no meu caso eu queria tentar fazer uma coisa um pouco diferente:
ResponderExcluirTeria como eu configurar um cliente VPN no roteador para toda vez que algum dispositivo da minha rede tentasse acessar um determinado endereço exemplo: (http://77.81.234.244:55452/user/live/...) que esse acesso fosse através da VPN e para os demais acessos fosse normal, sem VPN.
(Isso seria o endereço de um servidor IPTV que é bloqueado pelo meu provedor local de internet, já falei várias vezes com o administrador do provedor de internet mas ele não sabe o que está bloqueando e não deu jeito, pensei que fosse o roteador mas na casa de todos os clientes que usa o mesmo provedor o serviço não funciona).
Eu uso um cliente OpenVPN no celular android, outro no computador, mas para assistir na SmartTV tenho que usar o computador ou fazer uma gambiarra na rede, eu queria me livrar de clientes nos meus dispositivos e deixar que o roteador se encarregasse de se conectar com o servidor e direcionar o acesso na VPN quando fosse acessar o IPTV, pensei em algo como criar uma nova interface wan(wan-openvpn) que recebesse internet da mesma do mesmo roteador mas que ficasse conectada em um servidor OpenVPN e utilizando o pacote mwan3 usado para load balance, fazer com quê em alguma regra de acesso todos que tentassem acessar determinado ip(no caso o servidor IPTV) fosse direcionado o acesso para a interface "wan-openvpn".
Não sei se deu pra enteNder direito, mas se sim, por favor me dá uma força de como pode ser feito e como fazer, tenho só alguns conhecimentos básicos de Linux e OpenWRT, já instalei uma vez o OpenVPN como servidor no Linux, criei certificados, chaves, fiz acesso e tal, mas no openWRT é um pouco diferente.
Outra coisa esse roteador que uso OpenWRT já está com mwan3 instalado, mas não o client VPN, não sei quanta memória será necessário mas vê como está a situação da memória atual, se é possível instalar algum client OpenVPN ou outro.
ExcluirMemory
Total Available 13048 kB / 28860 kB (45%)
Free 3636 kB / 28860 kB (12%)
Cached 7316 kB / 28860 kB (25%)
Buffered 2096 kB / 28860 kB (7%)
se a memória for pouca poderia até remover algum pacote que não é utilizado ou não fará falta.
Pierre,
ExcluirNormalmente o "bloqueio" é culpa nossa. Se o outro lado for exposto na internet por encaminhamento de porta, pode ser que o serviço não esteja preparado para isso. As vezes o servidor coloca referência ao próprio IP ao invés da URL (http://192.168.9.1...) e isso quebra ao encaminhar porta. O wireshark nos dois lados diria com certeza.
Bem, vamos ao seu problema. Como você está considerando OpenVPN, creio que você tem acesso aos dois lados da solução. Ou você quer fazer uma "ponte" (ex: sua casa conecta no servidor no trabalho que, então, acessa o serviço IPTV)?
Se você gerencia os dois lados, o mais fácil é simplesmente rotear a rede interna. Se você configurá-las de forma a não conflitar, (ex: 192.168.1.0/24 e 192.168.3.0/24), você pode informar que a rede remota está alcançável por tal cliente VPN.
Meu uso do OpenVPN é primariamente para interligar 4 redes privadas. Só esporadicamente uso a VPN para acessar de um dispositivo isolado (Road Warrior).
Quanto a memória, parece estar tranquila. Cached e buffered podem ser consideradas "livre". Assim, quase metade da RAM está disponível. O OpenVPN vai usar só uns 5MB. Ele é bem econômico.
Olá Luiz,
ResponderExcluirQuando vou rodar o serviço, me deparo com esse erro, o que poderia ser?
Obrigado
[EPOLL] [MH/PKTINFO] [AEAD]
Tue Nov 7 21:15:35 2017 daemon.notice openvpn(lan)[4465]: library versions: OpenSSL 1.0.2k 26 Jan 2017, LZO 2.09
Tue Nov 7 21:15:35 2017 daemon.notice openvpn(lan)[4465]: Diffie-Hellman initialized with 2048 bit key
Tue Nov 7 21:15:35 2017 daemon.err openvpn(lan)[4465]: OpenSSL: error:0906D06C:lib(9):func(109):reason(108)
Tue Nov 7 21:15:35 2017 daemon.err openvpn(lan)[4465]: OpenSSL: error:140AD009:lib(20):func(173):reason(9)
Tue Nov 7 21:15:35 2017 daemon.err openvpn(lan)[4465]: Cannot load certificate file /etc/easy-rsa/keys/server.crt
Tue Nov 7 21:15:35 2017 daemon.notice openvpn(lan)[4465]: Exiting due to fatal error
Tue Nov 7 21:15:40 2017 daemon.notice openvpn(lan)[4469]: OpenVPN 2.4.3 mips-openwrt-linux-gnu [SSL (OpenSSL)] [LZO] [LZ4] [EPOLL] [MH/PKTINFO] [AEAD]
Tue Nov 7 21:15:40 2017 daemon.notice openvpn(lan)[4469]: library versions: OpenSSL 1.0.2k 26 Jan 2017, LZO 2.09
Tue Nov 7 21:15:40 2017 daemon.notice openvpn(lan)[4469]: Diffie-Hellman initialized with 2048 bit key
Tue Nov 7 21:15:40 2017 daemon.err openvpn(lan)[4469]: OpenSSL: error:0906D06C:lib(9):func(109):reason(108)
Tue Nov 7 21:15:40 2017 daemon.err openvpn(lan)[4469]: OpenSSL: error:140AD009:lib(20):func(173):reason(9)
Tue Nov 7 21:15:40 2017 daemon.err openvpn(lan)[4469]: Cannot load certificate file /etc/easy-rsa/keys/server.crt
Tue Nov 7 21:15:40 2017 daemon.notice openvpn(lan)[4469]: Exiting due to fatal error
O openvpn não consegue ler /etc/easy-rsa/keys/server.crt.
ExcluirPode ser por permissão de leitura ou o formato está errado.
Faz o cat no arquivo para testar a permissão e ver se tem cara de certificado
O arquivo server.crt estava vazio. Gerei novamente e agora rodou, vou continuar para ver se consigo fazer funcionar a vpn desta vez. Obrigado!
ExcluirBoa noite , seu artigo me deu um grande apoio , obrigado ! Tem alguma novidade da re-unificacao do openwrt e lede ?
ResponderExcluirO projeto foi reunificado, como a página inicial do openwrt.org já declara. O lede-project agora redireciona para OpenWrt.
ExcluirNa prática, o OpenWrt está morto e o LEDE foi renomeado para OpenWrt, tomando o controle dos ativos no nome do finado projeto.
Ele continua vivo e forte e devemos ter uma nova versão em breve. Era para ser lançado as versões de teste por agora, mas ainda estão acertando os últimos patches de kernel. Tem alguns dispositivos com problemas com o kernel mais recente (4.14).
Quando tiver o lançamento da prévia da próxima versão eu escrevo sobre.
Olá Luiz, excelente post. consegui montar tanto o servidor openvpn quanto o cliente, mas ´so consigo pingar do cliente para o servidor, não do servidor para o cliente, li aquele seu post de roteamento entendi, basicamante criar uma tabela de roteamento que podemos escolher o a origem do ping, se é pela wan ou pela lan, então tentei fazer a mesma coisa com pfSense, pois não sei fazer o escripty no openwrt.
ResponderExcluirSó que mesmo escolhendo a origem do ping pela lan, também não pinga. com certeza é alguma configuração de rota.
No openwrt criei uma rota estática pela Luci, mas também não pinga. Fui na interface openvpn e criei a rota também, mas não pinga.
Cara estou quebrando a cabeça.
Ah, estou pingando de dentro do roteador, não de um cliente conectado
Wellio, Wireshark é seu amigo.
Excluirhttp://luizluca.blogspot.com/2017/05/openwrtlede-capturando-pacotes-de.html
As versões atuais já fazem captura pelo ssh diretamente na interface gráfica.
Se não conseguir resolver, compartilha mais dados, como as tabelas de roteamento e conf do openvpn. Mas tudo isso seria melhor em um tópico próprio no fórum.
https://luizluca.blogspot.com/p/forum.html
Luiz Boa tarde!!
ResponderExcluirTenho um cenário que tenho um PFSENSE como servidor de openvpn e então para uma das pontas cliente tenho um openwrt configurado.. Ate o momento tudo ok.. a VPN fecha tudo certinho.. ele fecha cliente servidor numa boa, mais gostaria que este cliente openwrt após conseguir conectar ao servidor também tivesse comunicação com outros cliente conectados a esse pfsense. Tento jogar as rotas mais não vai só consigo chegar até ao servidor .. meu openwrt é 10.100.0.0/28 , meu servidor pfsense é 10.0.0.0/24 - TUNEO VPN É 172.4.0.0/30. e quando conseguir conectar gostaria de comunicação também com outras redes conectada a esse pfsense como por exemplo 10.10.0.0/24.
Está um pouco offtopic (OpenWrt) mas vamos lá. Existe um roteador virtual dentro da VPN que precisa saber qual rede é para qual cliente. No servidor e nos clientes, você precisa criar rotas para as redes de destino direcionando à interface tun. Porém, o OpenVPN precisa criar internamente rotas para cada uma dessas redes para o seu respectivo cliente. Isso é feito pela configuração iroute no ccd. O OpenVPN normalmente é executado com ums porta de gerenciamento (para um cliente texto como Telnet) ou escreve seu estado interno em arquivo (no caso do OpenWrt em /var/run). Lá você consegue ver as rotas internas do roteador virtual do OpenWrt.
Excluir