Configurando OpenVPN no RouterOS v7
Hoje, vamos aprender a configurar o OpenVPN no RouterOS v7. Com vasta experiência junto a ISPs, percebo que muitos ainda utilizam protocolos como PPTP, SSTP e L2TP, que oferecem menor segurança. Optar pelo OpenVPN é uma escolha superior, pois ele não só fornece criptografia robusta e configurações altamente personalizáveis, mas também garante uma proteção mais eficaz contra as vulnerabilidades comuns nesses protocolos menos seguros.
Para configurar nosso servidor OpenVPN, precisaremos de um IP público para acessar o servidor. Uma vantagem interessante é que esse IP pode estar em “blackhole“, o que significa que ele não responderá a nenhuma porta indiscriminadamente, economizando recursos da CPU ao evitar a criação extensiva de regras de firewall. Vou ilustrar essa configuração com um exemplo prático:
Imagine que você adquiriu um MikroTik Hex RB750Gr3 para gerenciar sua rede interna. Você conecta esse dispositivo ao seu roteador de borda. Para configurar a comunicação, você estabelece um segmento de rede /30, por exemplo, 10.7.7.0/30. No roteador de borda, você configura o IP 10.7.7.1/30, e no seu Hex RB750Gr3, você configura o IP 10.7.7.2/30. Em seguida, você adiciona um gateway padrão com o IP 10.7.7.1 e configura na tabela de rotas o IP 250.250.250.250 em balckhole.
No roteador de borda, você cria uma rota estática com destino a 250.250.250.250 com gateway 10.7.7.2. Com isso, você estabelece um caminho direto para o seu IP público, mas sem responder a nenhuma solicitação de conexão externa.
Se você precisar acessar o dispositivo via Winbox, basta criar uma regra de redirecionamento (redirect) para essa porta específica, permitindo o acesso externo somente por ela. Usar um IP em “blackhole” é como ter um firewall que automaticamente descarta qualquer pacote não solicitado, proporcionando uma camada extra de segurança e eficiência.
Exemplo acima ficaria da seguinte forma:
Borda
1 # Adicione o IP à interface que comunica com sua HE 2 /ip address add address=10.7.7.1/30 comment="WAN" interface=ether1 3 4 # Cria rota estática dizendo que seu IP público está atrás do endereço "tal" 5 /ip route add comment="Rota_HEX" dst-address=250.250.250.250/32 gateway=10.7.7.2
Hex RB750Gr3
1 # Adicione o IP à interface que comunica com sua Borda /ip address add address=10.7.7.2/30 comment="WAN" interface=ether1 # Adiciona um gateway /ip route add comment="Gateway" dst-address=0.0.0.0/0 gateway=10.7.7.1 # Adiciona seu IP público em blackhole /ip route add blackhole comment="Blackhole" dst-address=250.250.250.250/32 # Redirect para winbox (Não use porta padrão para segurança, ex: 61000) /ip firewall nat add action=redirect chain=dstnat comment="Winbox" \ dst-address=250.250.250.250 dst-port=61000 protocol=tcp to-ports=8291
Configurando o Servidor OpenVPN
Para a criação do servidor OpenVPN, será necessário gerar três certificados distintos. Seguem os passos detalhados:
Crie o certificado CA (Certificado de Autoridade)
Para iniciar, crie o certificado da Autoridade Certificadora (CA), que será a base da confiança dos certificados subsequentes:
1 /certificate add name=CA common-name=CA key-usage=crl-sign,key-cert-sign days-valid=36500
Após criar o certificado CA, você deve assiná-lo. Substitua 250.250.250.250 pelo seu IP público:
1 /certificate sign CA ca-crl-host=250.250.250.250
Crie e assine o certificado SERVIDOR
Este certificado será usado para autenticar o servidor durante as conexões:
1 /certificate add name=SERVIDOR common-name=SERVIDOR key-usage=digital-signature,key-encipherment,tls-server days-valid=36500 2 /certificate sign SERVIDOR ca=CA 3 /certificate set SERVIDOR trusted=yes
Crie e assine o certificado CLIENTE
Em seguida, crie o certificado do cliente, que será utilizado pelos clientes para estabelecer uma conexão segura com o servidor:
1 /certificate add name=CLIENTE common-name=CLIENTE key-usage=tls-client days-valid=36500 2 /certificate sign CLIENTE ca=CA
Exportação dos certificados
Por fim, exporte os certificados para arquivos PEM, o que facilitará a importação em diferentes clientes. Não se esqueça de substituir sup3s3nha0p3nvpn pela senha que protegerá o certificado do cliente:
1 /certificate export-certificate CA type=pem file-name=CA 2 /certificate export-certificate CLIENTE type=pem file-name=CLIENTE export-passphrase=sup3s3nha0p3nvpn
Este processo garante que tanto o servidor quanto os clientes possam estabelecer uma conexão VPN segura através do uso de certificados confiáveis.
Irá ser criado 3 arquivos CA.crt, CLIENTE.crt e CLIENTE.key
1 /file print
1 # NAME TYPE SIZE CREATION-TIME 2 0 CA.crt .crt file 1180 apr/12/2024 14:33:11 3 1 CLIENTE.crt .crt file 1143 apr/12/2024 14:33:16 4 2 CLIENTE.key .key file 1858 apr/12/2024 14:33:16
Pelo menu FILE do winbox faça download do mesmo se você estiver utilizando a versão 6 do RouterOS, para versão 7 não é necessário baixar, pois o mesmo tem um gerador que iremos ver mais a frente.
Agora vamos as configurações que serão entregues ao cliente. Crie uma pool qual será entregue.
1 /ip pool 2 add name=POOL_OpenVPN ranges=192.168.250.128/25
Crie um o profile especifico para OPEN_VPN, no exemplo estou definindo também uma velocidade de 50MB de upload e download.
1 /ppp profile 2 add change-tcp-mss=yes local-address=192.168.250.1 name=OPEN_VPN rate-limit=50m/50m remote-address=POOL_OpenVPN use-encryption=yes
Se você deseja ser notificado via Telegram sempre que alguém se conectar ao seu servidor VPN (algo que eu recomendo e costumo fazer), você pode facilmente configurar essa integração editando o perfil no servidor e incluindo um script para enviar alertas. Para isso, siga os passos abaixo:
1. Acesse o perfil do servidor VPN (OPEN_VPN) e localize a aba “Scripts”.
2. Insira o script fornecido, substituindo `XXXXXXXXXXXXXXXXXXXXXX` pelo token do seu bot no Telegram, e `-10000000000` pelo ID do seu grupo ou usuário do Telegram.
# On Up:
1 :local callerId $"caller-id" 2 /tool fetch url="https://api.telegram.org/botXXXXXXXXXXXXXXXXXXXXXX/sendMessage\?parse_mode=HTML&chat_id=-10000000000&text=%E2%9D%8E%20OpenVPN%20ON%20USUARIO:%20<code>$user</code>%20ORIGEM:%20<code>$callerId</code>&disable_web_page_preview=true" keep-result=no
# On Down:
1 :local callerId $"caller-id" 2 /tool fetch url="https://api.telegram.org/botXXXXXXXXXXXXXXXXXXXXXX/sendMessage\?parse_mode=HTML&chat_id=-10000000000&text=%E2%9D%8C%20OpenVPN%20OFF%20USUARIO:%20<code>$user</code>%20ORIGEM:%20<code>$callerId</code>&disable_web_page_preview=true" keep-result=no
Esse ajuste permitirá que você receba uma notificação imediata sempre que ocorrer uma conexão, aumentando o controle e a segurança da sua rede.
Faça uma regra de NAT (src-nat) para fornecer internet ao cliente, onde 250.250.250.250 é nosso querido IP que está em blackhole, e ether1 seria minha interface WAN (Upstream)
1 /ip firewall nat add action=src-nat chain=srcnat comment="NAT_OpenVPN" out-interface=ether1 \ src-address=192.168.250.128/25 to-addresses=250.250.250.250
Iremos ativar o servidor OpenVPN agora, a porta padrão é a 1194, porem estarei adotando a boa pratica de utilizar outra como a 61194
1 /interface ovpn-server server add name=open-vpn-server \ auth=sha1 \ certificate=SERVIDOR \ cipher=aes256-cbc \ default-profile=OPEN_VPN \ require-client-certificate=yes \ port=61194 \ redirect-gateway=def1 \ /interface ovpn-server server print /interface ovpn-server server enable 0
Crie seus usuários, vou criar um de exemplo:
1 /ppp secret add comment="Key: sup3s3nha0p3nvpn" name=remontti@remontti.vpn profile=OPEN_VPN service=ovpn password=su4senhAparaL0gar
Você pode também utilizar os usuários via Radius, basta fazer a integração. Exemplo:
1 /ppp aaa set interim-update=5m use-radius=yes 2 /radius add address=10.10.10.10 secret=senha service=ppp
Na versão 7 do routerOS podemos criar nosso arquivo.ovpn direto pelo botão Export .ovpn
Altere server-address para seu endereço de ip público.
1 /interface ovpn-server server export-client-configuration \ server-address=170.79.148.39 \ ca-certificate=CA.crt \ client-certificate=CLIENTE.crt \ client-cert-key=CLIENTE.key \ server=open-vpn-server
Se estiver utilizando o ip em blackhole vc precisa fazer o redirect para porta que irá utilizar ex.: “61194”
1 /ip firewall nat add action=redirect chain=dstnat comment="OpenVPN" \ dst-address=250.250.250.250 dst-port=61194 protocol=tcp to-ports=61194
Veja os arquivos novamente.
1 /file print
Perceba que temos agora um novo arquivo client1712413538.ovpn, faça donwload do mesmo e pule a próxima etapa da versão 6 direto para configuração do cliente OpenVPN.
1 # NAME TYPE SIZE CREATION-TIME 2 0 CLIENTE.key .key file 1858 2024-04-06 10:53:13 3 1 client1712413538.ovpn .ovpn file 4393 2024-04-06 11:25:38 4 2 CLIENTE.crt .crt file 1090 2024-04-06 10:53:13 5 3 CA.crt .crt file 1123 2024-04-06 10:53:07
Cliente OpenVPN
Acessando https://openvpn.net/client/ voce encontra cliente para Windows, MacOS, Linux, Android, iOS e ChromeOS.
Com o cliente instalado basta você importar o arquivo .ovpn e infomar seu usuário e senha, ao conectar pela primeira vez irá solicitar a chave do certificado.
No linux você pode configurar também automaticamente nas configurações de rede sem a necessidade de instalar nenhum programa.
Gostou? Quer ajudar manter o blog?
Se quiser fazer uma doação para o café ficarei muito feliz pelo seu reconhecimento!
Se não puder doar pode deixar seu agradecimento nos comentário também ficarei feliz em saber que ajudei. Se tiver qualquer pergunta deixe-a também. Se preferir entrar em Contato clique aqui.
show
No meu caso consegui fazer rodar criando a CA sem ip publico no ROS 6.46.7 – funcionou em blackhole com redirect!!
Seu Remontti, teria alguma “solução” para quem não tem ip publico mas usando algum serviço com no-ip ou duckdns?
Você pode fazer normalmente, usando o domínio cadastrado no duckdns. Funciona também
aqui deu certo com o cloud do próprio mikroik em ipv6
Remontti, eu estou usando gnome 43.9 , e ao importar o arquivo .ovpn preenche tudo certo, mas a hora de conectar fica pedindo autenticação em loop, não passa disso e não conecta
e é possivel fazer funcionar não só com ipv4, mas com ipv6 também
sim é possivel