No cenário atual das redes, ainda é comum encontrar provedores de internet utilizando protocolos como PPTP, SSTP e L2TP, que possuem limitações significativas em termos de segurança. No entanto, a adoção do OpenVPN no RouterOS v7 representa um avanço considerável, proporcionando criptografia robusta, maior flexibilidade na configuração e proteção reforçada contra vulnerabilidades.
Requisitos para Configuração
Para implementar um servidor OpenVPN, é necessário um IP público acessível. No entanto, uma abordagem estratégica consiste em configurar esse IP em blackhole, garantindo que ele não responda a requisições indiscriminadas, reduzindo o consumo de CPU e simplificando as regras de firewall.
Exemplo Prático
Suponha que você adquiriu um MikroTik Hex RB750Gr3 para gerenciar sua rede interna. Esse dispositivo será conectado ao roteador de borda, e a comunicação entre eles será estabelecida utilizando um segmento de rede /30. A configuração ficaria da seguinte forma:
- Roteador de borda: IP 10.7.7.1/30
- MikroTik Hex RB750Gr3: IP 10.7.7.2/30
- Gateway padrão no MikroTik: 10.7.7.1
- Rota de IP público (exemplo: 250.250.250.250) configurada em blackhole
No roteador de borda, uma rota estática deve ser criada para direcionar o tráfego destinado ao IP público 250.250.250.250, utilizando o gateway 10.7.7.2. Com isso, o IP permanecerá acessível, mas sem responder a solicitações externas não autorizadas.
Acesso Seguro via Winbox
Caso seja necessário acessar remotamente o dispositivo pelo Winbox, basta criar uma regra de redirecionamento (redirect) para a porta específica, permitindo a conexão somente através dela.
Utilizar um IP em blackhole funciona como uma camada extra de segurança, pois todo tráfego não solicitado é automaticamente descartado, eliminando tentativas de escaneamento e ataque, tornando a rede mais segura e eficiente.
Exemplo acima ficaria da seguinte forma:
# 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=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”
/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.

Referência: https://blog.remontti.com.br/7921
Comments are closed