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.

Rudimar Remontti

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

Você pode gostar...

8 Resultados

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

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

  3. 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

  4. 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 *