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

# 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 days-valid=36500

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 days-valid=36500
/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 days-valid=36500
/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

/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:

/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 \
  server=open-vpn-server 

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

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.

Rudimar Remontti

Trabalho atualmente como Gerente de Redes em um Provedor de Internet no Rio Grande do Sul.

Você pode gostar...

10 Resultados

  1. Alison Matheus disse:

    Remontti como faço pra conectar meu mikrotik em um OVPN?

  2. Rafael disse:

    Rudimar, consigo fechar o tunel da VPN porém o client no caso um windows perde a navegação na internet, seria alguma configuração no arquivo do client ou regras e filtros no Mikrotik?

  3. No meu caso consegui fazer rodar criando a CA sem ip publico no ROS 6.46.7 – funcionou em blackhole com redirect!!

  4. Seu Remontti, teria alguma “solução” para quem não tem ip publico mas usando algum serviço com no-ip ou duckdns?

  5. Jonas disse:

    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

  6. Iuri Silveira Santos disse:

    e é possivel fazer funcionar não só com ipv4, mas com ipv6 também

Deixe um comentário

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *