Mikrotik RouterBoard como Cliente Open VPN y Switch.

A. Referencia.

Toda esta entrada está basada en el manual publicado en la siguiente URL:

Mikrotik router as OpenVPN Client | mikrotik-openvpn-client (missinglink.github.io)

Todas las configuraciones entregadas en el link también funcionaron en mi caso.

B. Contexto.

En la entrada anterior configuré una Raspberry PI como router y cliente OpenVPN para poder mantener mi computador permanentemente conectado a las redes corporativas de la compañía en la que trabajo, mediante una tarjeta de red adicional a la que está conectada directamente a mi red casera.

El actual diagrama de red es así:

Ahora, tengo un equipo Mirkotik Routerboard HapAC que pretendo utilizar como cliente OpenVPN y Siwtch, buscando juntar 2 componentes en uno.

B. Preparación de certificados.

1. Es necesario preparar los certificados necesarios para la conexión OpenVPN. Generalmente, cuando se utiliza el cliente oficial, se requiere un archivo con extensión .ovpn . En este caso, la Routerboard necesita 3 certificados para realizar la conexión y que están contenidos dentro del archivo .ovpn.

Ejemplo de un archivo (certificados falsos):

dev tun
client
proto tcp
<ca>
-----BEGIN CERTIFICATE-----
QkZMODBkRTpnJi5vc1NOIDQyT0dVNyYnY316eF9JZlskeHZKUit7V2NNXyx8IXtDe
z5OLTliaWQrcENNPDcieScrTmFUWGRQOj4iVA==dWsnPHU6XzhKXFlXWCg5dDxhOy
BIKGt3c18nYEZPVDIrMVA8cTlFWXJYI3U2a3tqYCRQNUBJLiMxWCkgcUo4STQ/NHB
9IDVCInExLjdIJnEjcnImKFJVVV9HPi4zMl5UVzM3XWRcS3F5OTZ+Jz4lU3QsSGBJ
SU5LZ1QubDA0fVF6Yk5nRzBYbVFdaW96LCosc3lYdkVPM30pTDZlQS5NLTg8cHB4f
Hd0KFRyWGcgWUU1Ijl7KUtkMWpAOSJtT2BZMllzPHBBJn5zMSdySFZTSno7WXJ2OX
1MfkltOk0hc3o8Jkp9JllcMU5McUN8T3EsRi0sKicmNC5UND5QXHRgZl1tMmFPbSx
2LFtVR35mWFxPXCFPYEw1YUpYXW9NfV4gVUFJanBiLTttZU55bjFgNngkaFtqNFpX
O1wnIyNEU1NiUnglUkBEK3k/JFhaajVmR1Y1T3krS2c8ekJkXFdpQGVVSW05O2EmJ
WJmSm54LSVyZ05RMWNDdTglVjI4dmhRKUluKVgkPUtlZD96MVhSSUhacz9JMiQlYF
ArQWdeXXBfQ0t1TTUqZGt5XWdFeiAyayt4TyskeX1tIWlefXhQKi5gWHZ2ZT9bPGF
wQXp8NEsgJ359XX1GZV49JSQvdV5qNFloKVFuQz98V29SWU0jfVlzQSo1KUQgLTcr
R1xhOENUI3wmZnQvXCAoO3N4XjArXyhUYEc9PTk9cyg7Pj19NFVSWVUwOE4pJ3t2a
nglRD9SSEgzMGM/YjtNfi9nV1g2ezlVL2JnT08yMSR1MTFvXyJoek9MLWZkOipMez
d3Ij1HJWguUEVeOzFFLyM5WmRlfDpWMm8lSEVtNEMrPVJnUDFJTkRAVF90IXUma19
IMj5XQ1IoXFxpTzRyS2FwPHl6RShlWFA6OFxiLC1Sa2coZUFRcFZYcDZeOSB8cCdb
dFFPNGFOTWovKyZfNDsiQzdZbTdjMD08LntnNE5gKE1HRkwyI2cxSXpVRChhWn4kI
C1deT54c0AkK0Z4U2RoLnZENjFYQnRuZi55LUt4Li99TmpxLF1ULDIvWlhhcVEvXF
xLXXlBYCw1aXdcKixyX3VNJnplbjp0aXtyMVwpQ2VVbE55TTlMdk9XNks0UXhfL==
-----END CERTIFICATE-----
</ca>
<cert>
-----BEGIN CERTIFICATE-----
sdGooTjl8c0YmL1JdXnkjVDBuPFozTS9DOCNLNjQxWFZXNSIsNGxBMnw3aG9YdUk0
LCxkME0wI2syJEYgMUE5RThGZls5fjIjR0h+IndcSDdcW0pic1tXREUwO3JGIUUiU
TlJMEJPQ3AqWTkkLmM3dj1IODpZeXM8Kl44JGtRQjUlXW1gcEUnUno6XUxHW1JlT3
5UZiRZcU5QOVI6P3xGfjZsKUx6NzchIFZHJT5Rb2slK0VZOT9TODVdQVVaPDdvNUY
xXGVqaCo0fkg2IVBxP0RwRmw0MncnTjRrdnZKIzhUeml8TjgrLVRJVExSVj5kcFhE
QkF8SCg5RzRMSzlibHolcElxPExxSCNXZTs0IUdnJCddJGA4cURzPkB8TlMmbT1xM
kFsPV1PLyV0K0pkMnI6XydcSF92Q01SKXcgYVpCZyR8Xmk0bC5HYXVMLXVHeFJ1Iz
8tbCNFUUZcIWxYUT1kVDg3Qzlwe0kgbiJeS0s6QVo1dFshMlE7WWBEIURGVF9aOCl
IRl5JVm9JSzM9aUdNSS1QXCheJlljR1krLjYpYGtdYnhFcnxnPVM2XiI3MVEuMH1B
RmJUTTwhejo4WyxCekdLUE5teXtcZnVfWC53MDhCU2ZZWD9KfjUoSW1dak1yNXlsS
Ewtdi5wNHBHbkE7fVZ1JmoqcS02YHohflxVciBCbkckSDk2b1EvVjNPXmdlQSBiXj
w/OD53Rw==W0xAZ0hmQ2V9Jixoez4taER7bm97aWRtK281JiZja3VrZnElbH14YEc
7RTVOYiYtPWZlUWdNcT4hKEwuN0RoeEtfIUIlX3cnS15YPVcgJDJBNWU/Wj1NdUhM
PSl9PkxyeVw1fTBCaFxBLSRENUckXEp4aXFZX1d0c3YqemdeJm5VKDBfLzphZXtfY
WsoVXpJQik+IEJRTm1UTV8tNW9NOXJJdX5kNjU+LSNCM3AwT3I1KUhsaEMjOFQufX
h+OEQxTnRWIi9IY1p1QXVnX31JXm5IPTViQ3h5Km1pLjl4di95dXBaN1klV3VZJ0U
yPVt2WlN3LjJ7IEJ0Xm4gfSgvbFo4U04sciw0QSVaQmR7SiJjYU9Ud0tYKGxBJng9
PDkmVmxgYyhAXm1VNDRpICYuUyJ7bi43RlAuOVFVaFozV0FdKmFBbCV1TSdsMnA==
-----END CERTIFICATE-----
</cert>
<key>
-----BEGIN PRIVATE KEY-----
i1kVjBcXjYvMCNGNWR3UTpQT1lDWCtbaiIrc1BXRFFwVTYzIDZUcmUlSCAhWHoyN3
1RdEQySmFiVUtCMiBpPCpMUmtSbXFqfTVHRE5NYCxVZzklTk91Q0oyfCcsUTEnaHp
LI08lMDtGMH0tJ3o7dUgwLi5ZfmgqR2RaaVA6fSEvOVFmXjZhVn17OH5ANHdROzQi
ejM6cSNwNFRTTnsnJHFqKGVIXVRIejxZJW5balMjRExrQXxOaT8uQG9gMjlYMEdlR
WwoJkJzTlN8T3RgfF9HbC11R0B+IEA5d1ktYDBZOV5iQX1bZUJHKUlidytMbn5SQk
AxI0VDXCh0R0UjU3gkRls4bV1fRm9XdSotKjNMeTJhQlBOdnwwWHo9M2QuMjpMe0J
Mfml6KnBCYFhtdCdKK3d8ZSNmUiJ3WXtdQ1pwTHNVck5dODZZQW5PMEpOZ3RYJ3Nf
Zj1EbGVRJjY2eVtOZEJIIUcxLkt4KFBBNTJSLWRJLUJSL0tlNU1rT1U3I1tEZSlyc
nAtUHRaMDZIJ2ZnXGJ0NigwKT9YXD5BRy94QTNBKUciYi4mRysibDJMZXBfXjdkcG
Q8ViYxWFxPQg==bHN3KGxjYF8pIzNub0RDZkNTbnZFfU5tcFVRPCs2U19KZTVLeW1
2cmU7VCh9N2I7OXl9WH1FWSxQd2ppTUwtdlczTTRJPktOUD19blZaek80XCpAKTc+
KmNDQFgqTyIqNEp9Uk9VNCghTVRBXTZhdiJtN2wyNy9qOkUmKV49fWF7WSV5OCI5U
WlBPnQzQyNFJ3EjcHh4Wk9iek8kKWMyflV9Iz4oNG4oMS0sZm5wdlBPPElxM3JGej
dWb34vQHVyZkhvfkpcJyhNJFZfRTNoVVErcmRQNC93ID9zSVlpKkUxdFZAL1RYRV0
gS1ckMyMva089P0RkZyFGV1czcm4nZ15TUTQmQlRQQH1HTkQ0bnhIT29CK2x4djx6
fSpSZCZQXWhnNHk2K1otO3kpOHpwOHlCPU4qNXkuJXkgZi1gWXV9VnhEe0MqZyJJT
kc1XE0hQSszYUZMT0UtajVOa21KOGJwKzN4WCcuJUNoW2orJEJ5azk9ZjhcbyM0WV
wufFhhVy9fSVd0OGBoJXNQV0B8InBNOmx2S0FtQjhWLm9SYy1PLzNTXEdmO3s8VHJ
GXUVRZUB4ZmpAcGpWOihTQWkyZE17NnQtT3p0L2VbNz1ldylpK2hoTlgwOTNXaS10
diJvLQ==
-----END PRIVATE KEY-----
</key>
remote-cert-eku "TLS Web Server Authentication"
remote 1.1.1.1 443
remote 1.1.2.2 443
redirect-gateway def1
persist-key
persist-tun
verb 3
mute 20
keepalive 10 60
cipher AES-256-CBC
auth SHA1
float
reneg-sec 28800
nobind
mute-replay-warnings
auth-user-pass
tls-version-min 1.2
;remember_connection 1
;auto_reconnect 1

Ejemplo de como quedarían los 3 archivos separados:

ca.crt

-----BEGIN CERTIFICATE-----
QkZMODBkRTpnJi5vc1NOIDQyT0dVNyYnY316eF9JZlskeHZKUit7V2NNXyx8IXtDe
z5OLTliaWQrcENNPDcieScrTmFUWGRQOj4iVA==dWsnPHU6XzhKXFlXWCg5dDxhOy
BIKGt3c18nYEZPVDIrMVA8cTlFWXJYI3U2a3tqYCRQNUBJLiMxWCkgcUo4STQ/NHB
9IDVCInExLjdIJnEjcnImKFJVVV9HPi4zMl5UVzM3XWRcS3F5OTZ+Jz4lU3QsSGBJ
SU5LZ1QubDA0fVF6Yk5nRzBYbVFdaW96LCosc3lYdkVPM30pTDZlQS5NLTg8cHB4f
Hd0KFRyWGcgWUU1Ijl7KUtkMWpAOSJtT2BZMllzPHBBJn5zMSdySFZTSno7WXJ2OX
1MfkltOk0hc3o8Jkp9JllcMU5McUN8T3EsRi0sKicmNC5UND5QXHRgZl1tMmFPbSx
2LFtVR35mWFxPXCFPYEw1YUpYXW9NfV4gVUFJanBiLTttZU55bjFgNngkaFtqNFpX
O1wnIyNEU1NiUnglUkBEK3k/JFhaajVmR1Y1T3krS2c8ekJkXFdpQGVVSW05O2EmJ
WJmSm54LSVyZ05RMWNDdTglVjI4dmhRKUluKVgkPUtlZD96MVhSSUhacz9JMiQlYF
ArQWdeXXBfQ0t1TTUqZGt5XWdFeiAyayt4TyskeX1tIWlefXhQKi5gWHZ2ZT9bPGF
wQXp8NEsgJ359XX1GZV49JSQvdV5qNFloKVFuQz98V29SWU0jfVlzQSo1KUQgLTcr
R1xhOENUI3wmZnQvXCAoO3N4XjArXyhUYEc9PTk9cyg7Pj19NFVSWVUwOE4pJ3t2a
nglRD9SSEgzMGM/YjtNfi9nV1g2ezlVL2JnT08yMSR1MTFvXyJoek9MLWZkOipMez
d3Ij1HJWguUEVeOzFFLyM5WmRlfDpWMm8lSEVtNEMrPVJnUDFJTkRAVF90IXUma19
IMj5XQ1IoXFxpTzRyS2FwPHl6RShlWFA6OFxiLC1Sa2coZUFRcFZYcDZeOSB8cCdb
dFFPNGFOTWovKyZfNDsiQzdZbTdjMD08LntnNE5gKE1HRkwyI2cxSXpVRChhWn4kI
C1deT54c0AkK0Z4U2RoLnZENjFYQnRuZi55LUt4Li99TmpxLF1ULDIvWlhhcVEvXF
xLXXlBYCw1aXdcKixyX3VNJnplbjp0aXtyMVwpQ2VVbE55TTlMdk9XNks0UXhfL==
-----END CERTIFICATE-----

client.crt

-----BEGIN CERTIFICATE-----
sdGooTjl8c0YmL1JdXnkjVDBuPFozTS9DOCNLNjQxWFZXNSIsNGxBMnw3aG9YdUk0
LCxkME0wI2syJEYgMUE5RThGZls5fjIjR0h+IndcSDdcW0pic1tXREUwO3JGIUUiU
TlJMEJPQ3AqWTkkLmM3dj1IODpZeXM8Kl44JGtRQjUlXW1gcEUnUno6XUxHW1JlT3
5UZiRZcU5QOVI6P3xGfjZsKUx6NzchIFZHJT5Rb2slK0VZOT9TODVdQVVaPDdvNUY
xXGVqaCo0fkg2IVBxP0RwRmw0MncnTjRrdnZKIzhUeml8TjgrLVRJVExSVj5kcFhE
QkF8SCg5RzRMSzlibHolcElxPExxSCNXZTs0IUdnJCddJGA4cURzPkB8TlMmbT1xM
kFsPV1PLyV0K0pkMnI6XydcSF92Q01SKXcgYVpCZyR8Xmk0bC5HYXVMLXVHeFJ1Iz
8tbCNFUUZcIWxYUT1kVDg3Qzlwe0kgbiJeS0s6QVo1dFshMlE7WWBEIURGVF9aOCl
IRl5JVm9JSzM9aUdNSS1QXCheJlljR1krLjYpYGtdYnhFcnxnPVM2XiI3MVEuMH1B
RmJUTTwhejo4WyxCekdLUE5teXtcZnVfWC53MDhCU2ZZWD9KfjUoSW1dak1yNXlsS
Ewtdi5wNHBHbkE7fVZ1JmoqcS02YHohflxVciBCbkckSDk2b1EvVjNPXmdlQSBiXj
w/OD53Rw==W0xAZ0hmQ2V9Jixoez4taER7bm97aWRtK281JiZja3VrZnElbH14YEc
7RTVOYiYtPWZlUWdNcT4hKEwuN0RoeEtfIUIlX3cnS15YPVcgJDJBNWU/Wj1NdUhM
PSl9PkxyeVw1fTBCaFxBLSRENUckXEp4aXFZX1d0c3YqemdeJm5VKDBfLzphZXtfY
WsoVXpJQik+IEJRTm1UTV8tNW9NOXJJdX5kNjU+LSNCM3AwT3I1KUhsaEMjOFQufX
h+OEQxTnRWIi9IY1p1QXVnX31JXm5IPTViQ3h5Km1pLjl4di95dXBaN1klV3VZJ0U
yPVt2WlN3LjJ7IEJ0Xm4gfSgvbFo4U04sciw0QSVaQmR7SiJjYU9Ud0tYKGxBJng9
PDkmVmxgYyhAXm1VNDRpICYuUyJ7bi43RlAuOVFVaFozV0FdKmFBbCV1TSdsMnA==
-----END CERTIFICATE-----

key.crt

-----BEGIN PRIVATE KEY-----
i1kVjBcXjYvMCNGNWR3UTpQT1lDWCtbaiIrc1BXRFFwVTYzIDZUcmUlSCAhWHoyN3
1RdEQySmFiVUtCMiBpPCpMUmtSbXFqfTVHRE5NYCxVZzklTk91Q0oyfCcsUTEnaHp
LI08lMDtGMH0tJ3o7dUgwLi5ZfmgqR2RaaVA6fSEvOVFmXjZhVn17OH5ANHdROzQi
ejM6cSNwNFRTTnsnJHFqKGVIXVRIejxZJW5balMjRExrQXxOaT8uQG9gMjlYMEdlR
WwoJkJzTlN8T3RgfF9HbC11R0B+IEA5d1ktYDBZOV5iQX1bZUJHKUlidytMbn5SQk
AxI0VDXCh0R0UjU3gkRls4bV1fRm9XdSotKjNMeTJhQlBOdnwwWHo9M2QuMjpMe0J
Mfml6KnBCYFhtdCdKK3d8ZSNmUiJ3WXtdQ1pwTHNVck5dODZZQW5PMEpOZ3RYJ3Nf
Zj1EbGVRJjY2eVtOZEJIIUcxLkt4KFBBNTJSLWRJLUJSL0tlNU1rT1U3I1tEZSlyc
nAtUHRaMDZIJ2ZnXGJ0NigwKT9YXD5BRy94QTNBKUciYi4mRysibDJMZXBfXjdkcG
Q8ViYxWFxPQg==bHN3KGxjYF8pIzNub0RDZkNTbnZFfU5tcFVRPCs2U19KZTVLeW1
2cmU7VCh9N2I7OXl9WH1FWSxQd2ppTUwtdlczTTRJPktOUD19blZaek80XCpAKTc+
KmNDQFgqTyIqNEp9Uk9VNCghTVRBXTZhdiJtN2wyNy9qOkUmKV49fWF7WSV5OCI5U
WlBPnQzQyNFJ3EjcHh4Wk9iek8kKWMyflV9Iz4oNG4oMS0sZm5wdlBPPElxM3JGej
dWb34vQHVyZkhvfkpcJyhNJFZfRTNoVVErcmRQNC93ID9zSVlpKkUxdFZAL1RYRV0
gS1ckMyMva089P0RkZyFGV1czcm4nZ15TUTQmQlRQQH1HTkQ0bnhIT29CK2x4djx6
fSpSZCZQXWhnNHk2K1otO3kpOHpwOHlCPU4qNXkuJXkgZi1gWXV9VnhEe0MqZyJJT
kc1XE0hQSszYUZMT0UtajVOa21KOGJwKzN4WCcuJUNoW2orJEJ5azk9ZjhcbyM0WV
wufFhhVy9fSVd0OGBoJXNQV0B8InBNOmx2S0FtQjhWLm9SYy1PLzNTXEdmO3s8VHJ
GXUVRZUB4ZmpAcGpWOihTQWkyZE17NnQtT3p0L2VbNz1ldylpK2hoTlgwOTNXaS10
diJvLQ==
-----END PRIVATE KEY-----

2. Cargar los certificados al router. Puede ser mediante Winbox, SSH, o el modo preferido.

3. Importar los certificados. Sin necesidad de passphrase.

4. Repetir el proceso con los 3 certificados. Al importar los certificados client.crt y key.crt, se agruparán en uno.

C. Configuración de los perfiles, interfaces, bridges, IPs y reglas de Firewall.

1. Creación de un perfil PPP.

Configuraciones:

  • Change TCP MSS: yes
  • Use MPLS: no
  • Use Encryption: required
  • Only One: yes

2. Creación de una interfaz OpenVPN Client.

Configuraciones:

  • Connect To: IP del servidor de OpenVPN.
  • Port: Puerto del servidor. Generalmente es el 1194, pero puede variar en cada caso.
  • Mode: ip
  • User: Usuario de la conexión VPN.
  • Password: Password de la conexión VPN.
  • Profile: El perfil PPP creado en el punto anterior.
  • Certificate: Seleccionamos el certificado client importado anteriormente.
  • Auth: sha1. Depende del servidor. Verificar en el perfil .ovpn.
  • Cipher: aes 256. Depende también del servidor.
  • Add Default Route: marcar.

Una vez creado la interfaz, la letra R indicará que se realizó correctamente la conexión.

3. Creación de un Bridge para manejar todo el tráfico que pasará por el enlace VPN.

Nombrar el bridge y dejar las demás configuraciones por defecto.

4. Asignar la ethernet3 al bridge recientemente creado.

En este caso, el resto de los puertos ethernet del Routerboard seguirán actuando como un switch y llevando todo el tráfico de la red local, a excepción del ethernet 3, el cual traficará por la conexión VPN.

5. Asignar una IP fija del Routerboard disponible a través del Bridge Corporativo.

6. Crear dos reglas NAT en el Firewall:

Configuraciones:

  • Chain: srcnat
  • Src. Address: 192.168.254.0/24. En este caso corresponde a la red disponible en la ethernet3, que conecta el computador con el router.
  • Out. Interface: La interfaz VPN creada para la conexión con la red corporativa.
  • Action: masquerade.

Configuraciones:

  • Chain: srcnat
  • Out. Interface: El bridge dedicado a la conexión entre la ethernet3 y el computador.
  • Action: masquerade.

7. Crear dos reglas de Firewall.

Configuraciones:

  • Chain: forward.
  • In. Interface: La interfaz VPN creada para la conexión con la red corporativa.
  • Out. Interface: El bridge dedicado a la conexión entre la ethernet3 y el computador.
  • Connection State: established, related.
  • Action: accept.

Configuraciones:

  • Chain: forward.
  • Src. Address: 192.168.254.0/24. En este caso corresponde a la red disponible en la ethernet3, que conecta el computador con el router.
  • In. Interface: El bridge dedicado a la conexión entre la ethernet3 y el computador.
  • Out. Interface: La interfaz VPN creada para la conexión con la red corporativa.
  • Action: accept.

D. Pruebas.

En mi caso, en el computador de la casa utilizo Windows para trabajar, por lo cual es necesario darle también una IP fija a la segunda tarjeta de red dentro de la red 192.168.254.0/24, que apunte como gateway la IP que tiene asignada la Routerboard mediante la ethernet3.

Después de la configuración de la tarjeta por el lado del cliente, probamos que hay visibilidad entre la Routerboard y el computador.

Finalmente es necesario agregar las rutas estáticas por el lado del cliente (Windows en mi caso) y verificar que podamos llegar a las redes corporativas declaradas.

route -p ADD 192.168.4.0 MASK 255.255.255.0 192.168.254.1

Un ejemplo del trace hasta el host 192.168.4.254, un equipo ubicado en las redes corporativas.

Diagrama final: