Manual
do
Maker
.
com
Eu já havia escrito um extenso artigo enquanto implementava o OpenVPN server. Mas aí surgiram problemas; o tempo estava acabando, havia prazo e tive que iniciar outro processo que não a documentação oficial - digo de passagem, não é das melhores, considerando a grandeza do projeto. Mas o projeto é incrível e merece todos os elogios. E não só o projeto, mas a Digital Ocean também, que das 5 ou 6 implementações que fiz, foi a que me passou mais confiança.
Já adianto que essa confiiguração completa funciona no Raspberry e outros embarcados que rodem Linux, mas esse é um artigo da minha área de especialização, não sobre embarcados. A leitura é recomendada, mas não vou ficar triste se tiver poucos views, eu entendo.
Acredito que todas as implementações que fiz estavam certas, no final o sintoma era o mesmo; uma configuração no security group no EC2 da Amazon. Bem, durante décadas fiz backend de operadoras de telecom. Eu que escolhia o hardware, a arquitetura e fazia a implementação, nuvem é coisa nova pra mim, confesso. Mas a partir do momento que coloquei as cartas na mesa, tive o apoio da equipe, que em menos de 5 minutos apontou a configuração e a VPN deu seus primeiros sinais de vida! Então, para quem quiser fazer a configuração do OpenVPN server, visite o link da DigitalOcean. Mas não estou escrevendo artigo apenas para apontar outro artigo; vamos dar uma incrementada.
Não era fundamental, mas fica muito mais elegante iniciar a conexão VPN e as rotas se acertarem sozinhas. Aqui vou exemplificar com uma rede classe C. No arquivo de configuração do OpenVPN (/etc/openvpn/server.conf) inclua a linha :
push "route 192.168.100.0 255.255.255.0"
Nesse exemplo estamos passando a rota para a rede 192.168.100 que, obviamente, trafegará pela interface de túnel.
Resolver nomes é papel do DNS. Mas dá pra ajeitar a coisa.
Em /etc/hosts do OpenVPN server, coloque os hosts. Exemplo:
192.168.100.90 webserver.dominio.com
192.168.100.91 repositorio.dominio.com.br
Agora o servidor já sabe resolver esses hosts. Para que ele resolva para hosts conectados a ele, adicione uma linha apontando a interface que tem a rota ao arquivo /etc/openvpn/server.conf:
push "dhcp-option DNS 192.168.100.40"
Supondo então que a interface do túnel seja da rede 10.10.0.x e a interface ethernet do servidor seja 192.168.100.40, devemos agora editar o arquivo /etc/resolv.conf e adicionar:
nameserver 192.168.100.40
Mas quem está resolvendo nomes? - Por ora, ninguém. Vamos instalar o dnsmasq para cumprir esse papel. Tenha calma, basicamente instalamos e configuramos "1" linha!
sudo su
apt-get update
apt-get install dnsmasq
Edite o arquivo /etc/dnsmasq.conf e adicione a linha:
listen-address=192.168.100.40
Claro, troque o endereço pelo DNS que corresponder à sua rede. Aqui estou usando tudo fictício para não explicitar detalhes da infraestrutura.
Terminando o processo, reinicie o dnsmasq e o OpenVPN. Faça a conexão com o client VPN e repare que a rota para a rede aparecerá tão logo suba a interface tun. Faça um ping ou uma conexão a um host que passará pela interface tun para testar a resolução de nomes. Tudo feito!
Só como dica extra, um POSTROUTING é necessário para fazer o encaminhamento dos pacotes. Vi pessoas fazendo de várias maneiras, até instalando programas que são uma camada sobre o iptables, que é a ferramenta de interação com o netfilter, que é o firewall do kernel Linux. Não precisa usar nada, basta esse conjunto simples de regras. Crie um arquivo, por exemplo, frw.sh e coloque isso:
echo "1" >/proc/sys/net/ipv4/ip_forward
/sbin/iptables -P FORWARD DROP
iptables -t nat -A POSTROUTING -d 192.168.100.0/24 -j MASQUERADE
/sbin/iptables -A FORWARD -s 192.168.100.0/24 -j ACCEPT
/sbin/iptables -A FORWARD -d 192.168.100.0/24 -mstate --state ESTABLISHED,RELATED -j ACCEPT
Mais uma vez, atente-se em trocar o IP para a respectiva rede.
Para iniciar junto com o sistema podemos por exemplo, transformar esse firewall em serviço. Nesse artigo mostro como criar um serviço no Raspberry.
Inscreva-se no nosso canal Manual do Maker no YouTube.
Também estamos no Instagram.
Autor do blog "Do bit Ao Byte / Manual do Maker".
Viciado em embarcados desde 2006.
LinuxUser 158.760, desde 1997.