Configurando OpenVPN no RouterOS: Versões 6 e 7
Hoje, vamos aprender a configurar o OpenVPN no RouterOS, tanto na versão 6 quanto na 7. 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
# Adicione o IP à interface que comunica com sua HE /ip address add address=10.7.7.1/30 comment="WAN" interface=ether1 # Cria rota estática dizendo que seu IP público está atrás do endereço "tal" /ip route add comment="Rota_HEX" dst-address=250.250.250.250/32 gateway=10.7.7.2
Hex RB750Gr3
# 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:
/certificate add name=CA common-name=CA key-usage=crl-sign,key-cert-sign
Após criar o certificado CA, você deve assiná-lo. Substitua 250.250.250.250 pelo seu IP público:
/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:
/certificate add name=SERVIDOR common-name=SERVIDOR key-usage=digital-signature,key-encipherment,tls-server /certificate sign SERVIDOR ca=CA /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:
/certificate add name=CLIENTE common-name=CLIENTE key-usage=tls-client /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:
/certificate export-certificate CA type=pem file-name=CA /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
/file print
# NAME TYPE SIZE CREATION-TIME 0 CA.crt .crt file 1180 apr/12/2024 14:33:11 1 CLIENTE.crt .crt file 1143 apr/12/2024 14:33:16 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.
/ip pool 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.
/ppp profile 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:
:local callerId $"caller-id" /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:
:local callerId $"caller-id" /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)
/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
Para RouterOS v7 (Recomendado) ✅
/interface ovpn-server server set auth=sha1 certificate=SERVIDOR cipher=aes256-cbc,aes256-gcm default-profile=OPEN_VPN \ enabled=yes netmask=24 redirect-gateway=def1,ipv6 require-client-certificate=yes port=61194
Para RouterOS v6 (Não recomendo) ❌
/interface ovpn-server server set auth=sha1 certificate=SERVIDOR cipher=aes256 default-profile=OPEN_VPN \ enabled=yes require-client-certificate=yes port=61194
Crie seus usuários, vou criar um de exemplo:
/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:
/ppp aaa set interim-update=5m use-radius=yes /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.
/interface ovpn-server server export-client-configuration \ server-address=250.250.250.250 ca-certificate=CA.crt \ client-certificate=CLIENTE.crt \ client-cert-key=CLIENTE.key
Se estiver utilizando o ip em blackhole vc precisa fazer o redirect para porta que irá utilizar ex.: “61194”
/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.
/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.
# NAME TYPE SIZE CREATION-TIME 0 CLIENTE.key .key file 1858 2024-04-06 10:53:13 1 client1712413538.ovpn .ovpn file 4393 2024-04-06 11:25:38 2 CLIENTE.crt .crt file 1090 2024-04-06 10:53:13 3 CA.crt .crt file 1123 2024-04-06 10:53:07
Para versão 6 do RouterOS você ira precisar baixar os arquivos CA.crt CLIENTE.crt CLIENTE.key para criar o arquivo de configuração do OpneVPN.
Abra os arquivos CA.crt CLIENTE.crt CLIENTE.key em um editor de texto (recomendo o sublime-text, ou VS code) em seguida crie um novo arquivo e adicione as seguintes informações, fazendo a alteração do seu IP público bem como a porta, e pegando o que tem dentro de cada arquivo CA.crt CLIENTE.crt CLIENTE.key e adiconao aos respectivos
client dev tun remote 250.250.250.250 61194 tcp nobind user nobody group nogroup persist-tun persist-key tls-client remote-cert-tls server verb 4 mute 10 cipher AES-256-CBC auth SHA1 pull auth-user-pass connect-retry 1 reneg-sec 3600 remote-cert-tls server redirect-gateway def1 <ca> -----BEGIN CERTIFICATE----- CA.crt -----END CERTIFICATE----- </ca> <cert> -----BEGIN CERTIFICATE----- CLIENTE.crt -----END CERTIFICATE----- </cert> <key> -----BEGIN ENCRYPTED PRIVATE KEY----- CLIENTE.key -----END ENCRYPTED PRIVATE KEY----- </key>
Vai ficar um arquivo parecido com esse:
client dev tun remote 250.250.250.250 61194 tcp nobind user nobody group nogroup persist-tun persist-key tls-client remote-cert-tls server verb 4 mute 10 cipher AES-256-CBC auth SHA1 pull auth-user-pass connect-retry 1 reneg-sec 3600 remote-cert-tls server redirect-gateway def1 <ca> -----BEGIN CERTIFICATE----- MIIDNzCCAh+gAwIBAgIIEa583zOzhvEwDQYJKoZIhvcNAQELBQAwDTELMAkGA1UE AwwCQ0EwHhcNMjQwNDEyMTUyNDM1WhcNMjUwNDEyMTUyNDM1WjANMQswCQYDVQQD DAJDQTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAMIYmmWcnfNemX4y qoMtDdHC38QKisZm9STkEAA2O5mt+5MXOLabl/EaQ7d6A/2VdErfLmtrFJawMe9d t17MIR5zx21kiU517oYP/N8kGAnBaS9T7ykm+0QADoCNkwvY3QgLaPlQ+zqxdLRs GQazmVZs56WuVs+dMw3xFaLfRQ0Uo6f06ZNvkNb8cwwWgYmNvtsu1bVoC5Qze7tN 7cFFITzP/9bZ+PDI7MXOGu4+TdtvdXqkwoT+xIDJWyrtltGf12kpnug68wImuULB hj20xUu7JIriC548fiITsCuCQMXrDqmD198uO1vua1bT5TG66MUoOt4JlNpA3lDE GkEVmTsCAwEAAaOBmjCBlzAPBgNVHRMBAf8EBTADAQH/MA4GA1UdDwEB/wQEAwIB BjAdBgNVHQ4EFgQUQc5chT+ppPMFLhJzgHG1IpI/n4wwLwYDVR0fBCgwJjAkoCKg IIYeaHR0cDovLzE5Mi4xNjguODcuNzgvY3JsLzQuY3JsMCQGCWCGSAGG+EIBDQQX FhVHZW5lcmF0ZWQgYnkgUm91dGVyT1MwDQYJKoZIhvcNAQELBQADggEBADM/SWAb hr92v8HPSN16X+OpW+UeECfW3AgrhvKQS+fND3Q9prpaDkjoT4nDjrJugQDoUYPk /lS8JYNtYJTD4TZCkBWP+MuU28f5LauPEts6SVPDZtYULyzhucUEMc2jOlfvEG7A Gwsx7A7u4rpPqxosc+hsIKmQH76ek9Z28mehqMJy9DBovsiXX1r1CVwXkLWDh7jd djSAZtGoFectyi6+o8An9apgowZNZ+JCWVBmrYTO4qK92+IxHADQjvaEzOCxCtyg QgQbPjAKOvm24ula5oBklkiZm2Rm0Yoz+7L80MOIa6TR1OjhxO5GyiD18P31hDOQ e6HtZo2SNOZzCdY= -----END CERTIFICATE----- </ca> <cert> -----BEGIN CERTIFICATE----- MIIDHjCCAgagAwIBAgIIN0BpgvHnwhUwDQYJKoZIhvcNAQELBQAwDTELMAkGA1UE AwwCQ0EwHhcNMjQwNDEyMTUyNDUyWhcNMjUwNDEyMTUyNDUyWjASMRAwDgYDVQQD DAdDTElFTlRFMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAv4bHxnI/ yXgt9YZPm3PFXqIRrPp6uQ/LMtIKzRDzNLIwvaYt/CCG5IJhypCQ5RRwJT4mXgfZ EAZMFheAxSpicMW+PMPb1wxsaY5ScLHadFZAjTr6jX03DcHYNTYbp7vjmwub2l2i H5uspiNVd8vfhDbWLHWWVF7AQr3JhvpfqfwuQOumKS2YMgclm8gvS6xOK3yzjbJN haInSxW/dZ+K5TvHQoWI0Sed1CnwclqaNlZ3ZnBEo+AQsmZAdPIGMBAUzSce0IWG gdJ5aJcLGyyBFtD7dKiu6Edw3VXYPYL5BxYZZmuCxRBrMsF/pn7PysL8c+zQHVMG G0N+2CNl2QMvswIDAQABo30wezATBgNVHSUEDDAKBggrBgEFBQcDAjAdBgNVHQ4E FgQU+BGSwQZzquO78TqnOuVThda5rBMwHwYDVR0jBBgwFoAUQc5chT+ppPMFLhJz gHG1IpI/n4wwJAYJYIZIAYb4QgENBBcWFUdlbmVyYXRlZCBieSBSb3V0ZXJPUzAN BgkqhkiG9w0BAQsFAAOCAQEAtBx/v0gK77wfZ9FF8HRamSq+AlFVfhG/U1F7QFet 7lFuUFaHVsthuZd0hl+5ROGg6PYY3hBqlxSRTIpIJbc1SagYN/VWQII4WmSbOsH9 JJ+acT7/50jP6lupGgm3D7NWA4TuAgj4zM6JGGs3mSZC5wopcTaNHQdYWEcgTxTZ sLdGdqed6uwhzgd2WJkHodw/VBWZY3DCEhdSQrL28EdUTTL5GPjL808XYDmZxNY1 i/ETg1rgqRCyVK4PxTsv9Q+Uojm5VCrtFE9RbhOOJ6mQbc2A89jUJjOePyiibNrR O9Grbfxs7X+McwFY2L3brEhvVOXcCYSlvPwAeVMrfoMBnQ== -----END CERTIFICATE----- </cert> <key> -----BEGIN ENCRYPTED PRIVATE KEY----- MIIFHzBJBgkqhkiG9w0BBQ0wPDAbBgkqhkiG9w0BBQwwDgQIKvlmN1xHRN0CAggA MB0GCWCGSAFlAwQBKgQQ0p5lAo+C1IcQl5tWd6V/0wSCBNC5KBKl3fXKbE39nPKP 09W1bx5E5HIjQsTFvZ42hMVq26tSj6uAnwSkclb2C1AMbsUq+f/39n4ljOyc7cIh H8ekZuMiUEwXORj5slJtL/XfaelsWFC23jSwJa+DOzMTW9NKY0yCRjhV8DWHlHbu ykfmELXTBQ1AKavjijpF2PBo0KGBzVM/osmMUtTBmUG4NxUKeFndncgDFAm3BZXZ gqRsntzB9YlWujVh6VLaBOoZMs3w7kctPLsXb76k6MHszXGEQSUGelRQf4rzwbem aO8hb/UVpZsOZBuR1bBDxY8gVlfaAl7qM8Wqa7xT5joq2YfbJkmK7z33JxFdqF5E FVkEEulX0BhklPPzxa7XTO1Cf+AWTp2J1AGA+zX23kiGOoQHCuQUjxapLcLnjgni ySqPKgTjKKM8gH/G+2OiUSew5Pev0pCwSKxXYI1Mih+2dT2dn4aQ6C7RqCyacs5t lKsWk++FuBu9yjdht59OGfYnqw3NC7Drj5HtTupHA1KhMWAPSA/8Pf0Qht3Dyxtb 4OtpqZWig26Iuj5rYvFEQuUaIsHARkLFS9a2CCDziv0w1bMYqCXvTEHuK8Ur/ilr zmLxYvd5G5DQxro9LO7/Y5tZViTXNXbbprq0/EM6eq103y3ihe1PLKLOivnHYqTI +yx3wER+Q4aCuTka38PnYI1U2Vtg+YYVcKSiihSboZjXaZgQt3BMf+ImuKpYs9tL oKkVG/R0Ox1o/2zfD7QkBa7eKhloX4h7/1bMmzfFxSI1BTCAHYx1LsvLqLskxEiI oE1EDGmho+B/Y6q37V5vYilXNBeYPgHlK1xa+zJIBT1q0OWGGy41jKmp8EVUNt5v 2D3Eq03Mn75WCKk4lWnYTYGXREFpymHmdgyj8W4WsEnOF3YHsummGDfQC8xiforj JJ+kJYVDALhAFlNsUH2tg6e2Y6mzkoBB6nNftEwymBPTT4fLJ17+cw8uCQGnPS7f +ESSpTv0UVudkkh5BNLxFaFgbBR+KlZzrhofidgul3QxwEjG0euLnFhxayWTYPyp 7lPtaDyqQr/3Ugr004UtyW6ke7pdifXaMSy3RgMB8FGucXsulrMs1rXH5L3oo0WE j9l9YhVlSXRVT4v3SX0qhenBSeqM0wRyzQ7WkXtSoDhvxB+Aq9e643ukTr8i0CVX uIsahiZDRne2ZQjABdl6wH405kLNNyHLllxt+Zq/DR8K32bzX2M7Z4tHGsDfUKQA 7xul6vy6C2fDcysIwQ063HX20ijgsz6J5JUOUksvmxlWvo+QNrd6I83AMd5txth7 IWIxkxa1/Pg5MnZDgU4xE98k4daDyZZhP4bukgwNh6I8XTpUhJJ1pGJBTcJGhtOE 6106QzFZmFJmYfNzipJLj9VYT3gg0BZ+RvdnI/ys9AuDwStHHTYL4PVyviTCFiEK 7Ht9fE7ZbJIN7Wn1GHtblBHN6UfMo8LrOKjc6Mwd72xgt31y/yvu6GJ8ogrE6Eld Jut0hQFe56DUUZGypT60V6FhicMpmGITV7rWerqi1dUOjxtnu/0qjmFSNh9BkO8D R6/Hu/sO0NQ3DEoFfBsvFEJEoKE42bu/77bmf/fRAlSVlkkCACfadriWsnAgsPpN Bx9ydlEvJUDqxyfgA1jbK3c5/A== -----END ENCRYPTED PRIVATE KEY----- </key> </key>
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