Linux: Ubuntu 18.04.4 LTS (GNU/Linux 4.15.0-91-genérico x86_64)
- Eth0 1.1.1.1/32 IP externa
- ipip-ipsec0 192.168.0.1/30 será nuestro túnel
micrófono: CCR 1009, enrutador OS 6.46.5
- Eth0 10.0.0.2/30 IP interna del proveedor. La IP NAT externa del proveedor es dinámica.
- ipip-ipsec0 192.168.0.2/30 será nuestro túnel
Crearemos un túnel IPsec en una máquina Linux usando racoon. No describiré los detalles, hay uno bueno.
Instale los paquetes necesarios:
sudo install racoon ipsec-tools
Configuramos racoon, actuará condicionalmente como un servidor ipsec. Dado que mikrotik en modo principal no puede transmitir un identificador de cliente adicional y la dirección IP externa a través de la cual se conecta a Linux es dinámica, el uso de una clave previamente compartida (autorización de contraseña) no funcionará, ya que la contraseña debe coincidir con la dirección IP de el host de conexión o con el identificador.
Usaremos la autorización mediante claves RSA.
El demonio mapache usa claves en formato RSA y mikrotik usa el formato PEM. Si genera claves usando la utilidad Plainrsa-gen que viene con racoon, entonces no podrá convertir la clave pública de Mikrotika al formato PEM con su ayuda; solo convierte en una dirección: PEM a RSA. Ni openssl ni ssh-keygen pudieron leer la clave generada por Plainrsa-gen, por lo que tampoco será posible la conversión utilizándolos.
Generaremos una clave PEM usando openssl y luego la convertiremos para racoon usando Plainrsa-gen:
# Генерируем ключ
openssl genrsa -out server-name.pem 1024
# Извлекаем публичный ключ
openssl rsa -in server-name.pem -pubout > server-name.pub.pem
# Конвертируем
plainrsa-gen -i server-name.pem -f server-name.privet.key
plainrsa-gen -i server-name.pub.pem -f server-name.pub.key
Pondremos las claves recibidas en la carpeta: /etc/racoon/certs/server. No olvide configurar el propietario del usuario bajo cuyo nombre se inicia el demonio mapache (generalmente root) en 600 permisos.
Describiré la configuración de mikrotik cuando me conecte a través de WinBox.
Sube la clave server-name.pub.pem a mikrotik: Menú “Archivos” - “Cargar”.
Abra la sección "IP" - "IP seg" - pestaña "Claves". Ahora generamos claves: el botón "Generar clave", luego exportamos la clave pública de mikrotika "Expor Pub. Clave", puede descargarlo desde la sección "Archivos", haga clic derecho en el archivo - "Descargar".
Importamos la clave pública de racoon, “Importar”, en la lista desplegable del campo “Nombre de archivo” buscamos el nombre-servidor.pub.pem que descargamos anteriormente.
Es necesario convertir la clave pública de mikrotik.
plainrsa-gen -i mikrotik.pub.pem -f mikrotik.pub.key
y colóquelo en la carpeta /etc/racoon/certs, sin olvidar el propietario y los derechos.
configuración de mapache con comentarios: /etc/racoon/racoon.conf
log info; # Уровень логирования, при отладке используем Debug или Debug2.
listen {
isakmp 1.1.1.1 [500]; # Адрес и порт, на котором будет слушать демон.
isakmp_natt 1.1.1.1 [4500]; # Адрес и порт, на котором будет слушать демон для клиентов за NAT.
strict_address; # Выполнять обязательную проверку привязки к указанным выше IP.
}
path certificate "/etc/racoon/certs"; # Путь до папки с сертификатами.
remote anonymous { # Секция, задающая параметры для работы демона с ISAKMP и согласования режимов с подключающимися хостами. Так как IP, с которого подключается Mikrotik, динамический, то используем anonymous, что разрешает подключение с любого адреса. Если IP у хостов статический, то можно указать конкретный адрес и порт.
passive on; # Задает "серверный" режим работы демона, он не будет пытаться инициировать подключения.
nat_traversal on; # Включает использование режима NAT-T для клиентов, если они за NAT.
exchange_mode main; # Режим обмена параметрами подключения, в данном случае ---согласование.
my_identifier address 1.1.1.1; # Идентифицируем наш linux хост по его ip адресу.
certificate_type plain_rsa "server/server-name.priv.key"; # Приватный ключ сервера.
peers_certfile plain_rsa "mikrotik.pub.key"; # Публичный ключ Mikrotik.
proposal_check claim; # Режим согласования параметров ISAKMP туннеля. Racoon будет использовать значения подключающегося хоста (инициатора) для срока действия сессии и длины ключа, если его срок действия сессии больше, или длина его ключа короче, чем у инициатора. Если срок действия сессии короче, чем у инициатора, racoon использует собственное значение срока действия сессии и будет отправлять сообщение RESPONDER-LIFETIME.
proposal { # Параметры ISAKMP туннеля.
encryption_algorithm aes; # Метод шифрования ISAKMP туннеля.
hash_algorithm sha512; # Алгоритм хеширования, используемый для ISAKMP туннеля.
authentication_method rsasig; # Режим аутентификации для ISAKMP туннеля - по RSA ключам.
dh_group modp2048; # Длина ключа для алгоритма Диффи-Хеллмана при согласовании ISAKMP туннеля.
lifetime time 86400 sec; Время действия сессии.
}
generate_policy on; # Автоматическое создание ESP туннелей из запроса, пришедшего от подключающегося хоста.
}
sainfo anonymous { # Параметры ESP туннелей, anonymous - указанные параметры будут использованы как параметры по умолчанию. Для разных клиентов, портов, протоколов можно задавать разные параметры, сопоставление происходит по ip адресам, портам, протоколам.
pfs_group modp2048; # Длина ключа для алгоритма Диффи-Хеллмана для ESP туннелей.
lifetime time 28800 sec; # Срок действия ESP туннелей.
encryption_algorithm aes; # Метод шифрования ESP туннелей.
authentication_algorithm hmac_sha512; # Алгоритм хеширования, используемый для аутентификации ESP туннелей.
compression_algorithm deflate; # Сжимать передаваемые данные, алгоритм сжатия предлагается только один.
}
configuración del micrófono
Volver a la sección "IP" - "IPsec"
Pestaña "Perfiles"
Parámetro
Valor
Nombre
A su discreción (por defecto predeterminado)
Algoritmo hash
sha512
Algoritmo de cifrado
aes-128
Grupo DH
modp2048
propuesta_check
reclamo
De por vida
1d 00:00:00
NAT transversal
verdadero (marque la casilla)
DPD
120
Fallo máximo de DPD
5
Pestaña de pares
Parámetro
Valor
Nombre
A su discreción (en adelante, MyPeer)
Dirección
1.1.1.1 (máquinas IP Linux)
Dirección local
10.0.0.2 (interfaz IP WAN micrófono)
Mi Perfil
tu préstamo estudiantil
Modo de intercambio
principal
Ingresos pasivos
false
Enviar INITIAL_CONTACT
verdadero
Pestaña de propuesta
Parámetro
Valor
Nombre
A su discreción (en adelante, MyPeerProposal)
Autenticación. Algoritmos
sha512
Enc. Algoritmos
aes-128-cbc
De por vida
08:00:00
Grupo PFS
modp2048
Pestaña "Identidades"
Parámetro
Valor
Peer
Mi compañero
Atuh. Método
clave rsa
Clave
mikrotik.privet.key
Clave remota
nombre-servidor.pub.pem
Grupo de plantillas de políticas
tu préstamo estudiantil
Cadena Notrack
esta vacio
Mi tipo de identificación
auto
Tipo de identificación remota
auto
Coincidir por
identificación remota
Configuración de modo
esta vacio
Generar política
no
Pestaña "Políticas - General"
Parámetro
Valor
Peer
Mi compañero
Túnel
verdadero
Src. DIRECCIÓN
192.168.0.0/30
Destino DIRECCIÓN
192.168.0.0/30
Protocolo
255 (todos)
Plantilla
false
Pestaña "Políticas - Acción"
Parámetro
Valor
la columna Acción
cifrar
Nivel
solicitante
Protocolos IPsec
esp
Propuesta
Mi propuesta de pares
Lo más probable es que, como yo, tengas configurado snat/masquerade en tu interfaz WAN; esta regla debe ajustarse para que los paquetes ipsec salientes entren en nuestro túnel:
Vaya a la sección "IP" - "Firewall".
Pestaña "NAT", abre nuestra regla snat/masquerade.
Lengüeta avanzada
Parámetro
Valor
Política IPsec
fuera: ninguno
Reiniciando el demonio mapache
sudo systemctl restart racoon
Si racoon no se inicia al reiniciar, entonces hay un error en la configuración; en syslog, racoon muestra información sobre el número de línea en la que se detectó el error.
Cuando se inicia el sistema operativo, el demonio racoon se inicia antes de que se activen las interfaces de red, y especificamos la opción estricto_address en la sección de escucha; debe agregar la unidad racoon al archivo systemd
/lib/systemd/system/racoon.service, en la sección [Unidad], línea After=network.target.
Ahora nuestros túneles ipsec deberían estar activos, mire el resultado:
sudo ip xfrm policy
src 192.168.255.0/30 dst 192.168.255.0/30
dir out priority 2147483648
tmpl src 1.1.1.1 dst "IP NAT через который подключается mikrotik"
proto esp reqid 0 mode tunnel
src 192.168.255.0/30 dst 192.168.255.0/30
dir fwd priority 2147483648
tmpl src "IP NAT через который подключается mikrotik" dst 1.1.1.1
proto esp reqid 0 mode tunnel
src 192.168.255.0/30 dst 192.168.255.0/30
dir in priority 2147483648
tmpl src "IP NAT через который подключается mikrotik" dst 1.1.1.1
proto esp reqid 0 mode tunnel
Si los túneles no están activos, mire syslog o journalctl -u racoon.
Ahora necesita configurar las interfaces L3 para que se pueda enrutar el tráfico. Hay diferentes opciones, usaremos IPIP, ya que mikrotik lo admite, yo usaría vti, pero lamentablemente aún no se ha implementado en mikrotik. Se diferencia de IPIP en que además puede encapsular multidifusión y colocar marcas de seguridad en los paquetes, mediante las cuales se pueden filtrar en iptables e iproute2 (enrutamiento basado en políticas). Si necesita la máxima funcionalidad, entonces, por ejemplo, GRE. Pero no olvide que pagamos por una funcionalidad adicional con un gran cabezal superior.
Podéis ver la traducción de una buena reseña de interfaces de túneles.
En Linux:
# Создаем интерфейс
sudo ip tunnel add ipip-ipsec0 local 192.168.255.1 remote 192.168.255.2 mode ipip
# Активируем
sudo ip link set ipip-ipsec0 up
# Назначаем адрес
sudo ip addr add 192.168.255.1/30 dev ipip-ipsec0
Ahora puedes agregar rutas para redes detrás de mikrotik
sudo ip route add A.B.C.D/Prefix via 192.168.255.2
Para que nuestra interfaz y rutas se generen después de un reinicio, debemos describir la interfaz en /etc/network/interfaces y agregar rutas allí en la publicación, o escribir todo en un archivo, por ejemplo, /etc/ ipip-ipsec0.conf y páselo por post-up, no te olvides del propietario del archivo, los derechos y hazlo ejecutable.
A continuación se muestra un archivo de ejemplo.
#!/bin/bash
ip tunnel add ipip-ipsec0 local 192.168.255.1 remote 192.168.255.2 mode ipip
ip link set ipip-ipsec0 up
ip addr add 192.168.255.1/30 dev ipip-ipsec0
ip route add A.B.C.D/Prefix via 192.168.255.2
En Microtik:
En la sección “Interfaces”, agregue una nueva interfaz “túnel IP”:
Pestaña “Túnel IP” - “General”
Parámetro
Valor
Nombre
A su discreción (en adelante IPIP-IPsec0)
MTU
1480 (si no se especifica, mikrotik comienza a cortar mtu a 68)
Dirección local
192.168.0.2
Dirección remota
192.168.0.1
Secreto IPsec
Desactive el campo (de lo contrario se creará un nuevo Peer)
Mantener viva
Desactive el campo (de lo contrario la interfaz se apagará constantemente, ya que mikrotika tiene su propio formato para estos paquetes y no funciona con Linux)
DSCP
heredar
No fragmentar
no
Abrazar TCP MSS
verdadero
Permitir ruta rápida
verdadero
Sección “IP” - “Direcciones”, agregue la dirección:
Parámetro
Valor
Dirección
192.168.0.2/30
Interfaz
IPIP-IPsec0
Ahora puede agregar rutas a la red detrás de una máquina Linux; al agregar una ruta, la puerta de enlace será nuestra interfaz IPIP-IPsec0.
PS
Dado que nuestro servidor Linux es transitivo, tiene sentido configurar en él el parámetro Clamp TCP MSS para las interfaces ipip:
cree un archivo /etc/iptables.conf con el siguiente contenido:
*mangle
-A POSTROUTING -o ipip+ -p tcp -m tcp --tcp-flags SYN,RST SYN -j TCPMSS --clamp-mss-to-pmtu
COMMIT
y en /etc/network/interfaces
post-up iptables-restore < /etc/iptables.conf
Tengo nginx ejecutándose en la red detrás de mikrotik (ip 10.10.10.1), lo hago accesible desde Internet, lo agrego a /etc/iptables.conf:
*nat
-A PREROUTING -d 1.1.1.1/32 -p tcp -m multiport --dports 80,443 -j DNAT --to-destination 10.10.10.1
#На mikrotik, в таблице mangle, надо добавить правило route с назначением 192.168.0.1 для пакетов с адресом источника 10.10.10.1 и портов 80, 443.
# Так же на linux работает OpenVPN сервер 172.16.0.1/24, для клиентов которые используют подключение к нему в качестве шлюза даем доступ в интернет
-A POSTROUTING -s 172.16.0.0/24 -o eth0 -j SNAT --to-source 1.1.1.1
COMMIT
No olvide agregar los permisos apropiados a iptables si tiene habilitados los filtros de paquetes.
Estar sano!
Fuente: habr.com