Túnel VPN IPIP IPsec entre la màquina Linux i Mikrotik darrere del proveïdor NAT

Linux: Ubuntu 18.04.4 LTS (GNU/Linux 4.15.0-91-genèric x86_64)

  • Eth0 1.1.1.1/32 IP externa
  • ipip-ipsec0 192.168.0.1/30 serà el nostre túnel

Miktoik: CCR 1009, RouterOS 6.46.5

  • Eth0 10.0.0.2/30 IP interna del proveïdor. La IP NAT externa del proveïdor és dinàmica.
  • ipip-ipsec0 192.168.0.2/30 serà el nostre túnel

Crearem un túnel IPsec en una màquina Linux utilitzant racoon. No descriuré els detalls, n'hi ha un de bo article у vvpoloskin.

Instal·leu els paquets necessaris:

sudo install racoon ipsec-tools

Configurem racoon, actuarà condicionalment com a servidor ipsec. Com que mikrotik en mode principal no pot transmetre un identificador de client addicional i l'adreça IP externa a través de la qual es connecta a Linux és dinàmica, l'ús d'una clau prèviament compartida (autorització de contrasenya) no funcionarà, ja que la contrasenya ha de coincidir amb l'adreça IP de l'amfitrió de connexió o amb l'identificador.

Farem servir l'autorització mitjançant claus RSA.

El dimoni racoon utilitza claus en format RSA i mikrotik utilitza el format PEM. Si genereu claus mitjançant la utilitat plainrsa-gen que ve amb racoon, no podreu convertir la clau pública de Mikrotika a format PEM amb la seva ajuda: només es converteix en una direcció: PEM a RSA. Ni openssl ni ssh-keygen podrien llegir la clau generada per plainrsa-gen, de manera que tampoc serà possible la conversió utilitzant-los.

Generarem una clau PEM amb openssl i després la convertirem per a racoon mitjançant 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

Posarem les claus rebudes a la carpeta: /etc/racoon/certs/server. No us oblideu d'establir el propietari de l'usuari sota el nom del qual es llança el dimoni mapache (normalment root) amb 600 permisos.

Descriuré la configuració del mikrotik quan em connecti mitjançant WinBox.

Carregueu la clau server-name.pub.pem a mikrotik: Menú "Fitxers" - "Pujar".

Obriu la secció "IP" - "IP sec" - pestanya "Claus". Ara generem claus: el botó "Genera clau", després exportem la clau pública mikrotika "Expor Pub. Clau", podeu descarregar-lo des de la secció "Fitxers", feu clic amb el botó dret al fitxer - "Descarrega".

Importem la clau pública de racoon, "Importa", a la llista desplegable del camp "File name" busquem el server-name.pub.pem que hem baixat anteriorment.

S'ha de convertir la clau pública mikrotik

plainrsa-gen -i mikrotik.pub.pem -f mikrotik.pub.key

i posar-lo a la carpeta /etc/racoon/certs, sense oblidar-ne el propietari i els drets.

racoon config amb comentaris: /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ó de mikrotik

Torna a la secció "IP" - "IPsec"

Pestanya "Perfils".
Paràmetre
Valor

Nom
A la vostra discreció (per defecte)

Algoritme hash
sha512

Algorisme de xifratge
aes-128

DH-Grup
modp2048

Comprovació_de la proposta
reclamar

Vida
1d 00:00:00

Travessia NAT
cert (marqueu la casella)

DPD
120

Falla màxima DPD
5

Pestanya Peers
Paràmetre
Valor

Nom
A la vostra discreció (d'ara endavant, MyPeer)

Adreça
1.1.1.1 (màquines IP Linux)

Adreça local
10.0.0.2 (interfície IP WAN mikrotik)

Perfil
defecte

Mode d'intercanvi
principal

Passiu
false

Envia INITIAL_CONTACT
veritable

Pestanya de propostes
Paràmetre
Valor

Nom
A la vostra discreció (d'ara endavant, MyPeerProposal)

Auth. Algorismes
sha512

Encr. Algorismes
aes-128-cbc

Vida
08:00:00

Grup PFS
modp2048

Pestanya "Identitats".
Paràmetre
Valor

mirar
MyPeer

Atuh. Mètode
clau rsa

Clau
mikrotik.privet.key

Clau remota
nom-servidor.pub.pem

Grup de plantilles de política
defecte

Cadena Notrack
buit

El meu tipus d'identificació
cotxe

Tipus d'identificació remota
cotxe

Match By
identificador remot

Configuració del mode
buit

Generar política
no

Pestanya "Polítiques - General"
Paràmetre
Valor

mirar
MyPeer

Túnel
veritable

Sr. adreça
192.168.0.0/30

Dest. adreça
192.168.0.0/30

Protocol
255 (tots)

Plantilla
false

Pestanya "Polítiques - Acció"
Paràmetre
Valor

acció
xifrar

Nivell
requereix

Protocols IPsec
esp

Proposta
MyPeerProposal

El més probable és que, com jo, tingueu configurat snat/masquerade a la vostra interfície WAN; aquesta regla s'ha d'ajustar perquè els paquets ipsec sortints entrin al nostre túnel:
Aneu a la secció "IP" - "Firewall".
Pestanya "NAT", obriu la nostra regla snat/masquerade.

Pestanya Avançada
Paràmetre
Valor

Política IPsec
fora: cap

Reiniciant el dimoni mapache

sudo systemctl restart racoon

Si racoon no s'inicia en reiniciar, hi ha un error a la configuració; a syslog, racoon mostra informació sobre el número de línia en què s'ha detectat l'error.

Quan el sistema operatiu arrenca, el dimoni racoon s'inicia abans que apareguin les interfícies de xarxa i hem especificat l'opció strict_address a la secció d'escolta; heu d'afegir la unitat racoon al fitxer systemd.
/lib/systemd/system/racoon.service, a la secció [Unitat], línia After=network.target.

Ara els nostres túnels ipsec haurien d'estar en marxa, mireu la sortida:

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 els túnels no estan oberts, mireu syslog o journalctl -u racoon.

Ara cal configurar les interfícies L3 perquè el trànsit es pugui encaminar. Hi ha diferents opcions, farem servir IPIP, ja que el mikrotik és compatible, jo faria servir vti, però, malauradament, encara no s'ha implementat en mikrotik. Es diferencia d'IPIP en què, a més, pot encapsular multicast i posar fwmarks als paquets, per la qual cosa es poden filtrar en iptables i iproute2 (encaminament basat en polítiques). Si necessiteu la màxima funcionalitat, aleshores, per exemple, GRE. Però no oblideu que paguem per una funcionalitat addicional amb un gran capçal.

Podeu veure la traducció d'una bona ressenya de les interfícies del túnel aquí.

A 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

Ara podeu afegir rutes per a xarxes darrere del mikrotik

sudo ip route add A.B.C.D/Prefix via 192.168.255.2

Per tal que la nostra interfície i rutes es plantegin després d'un reinici, hem de descriure la interfície a /etc/network/interfaces i afegir-hi rutes a la publicació, o escriure-ho tot en un fitxer, per exemple, /etc/ ipip-ipsec0.conf i traieu-lo a través del post-up, no us oblideu del propietari del fitxer, els drets i feu-lo executable.

A continuació es mostra un fitxer d'exemple

#!/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

A Mikrotik:

A la secció "Interfícies", afegiu una nova interfície "túnel IP":

Pestanya "Túnel IP" - "General"
Paràmetre
Valor

Nom
A la vostra discreció (d'ara endavant, IPIP-IPsec0)

MTU
1480 (si no s'especifica, mikrotik comença a tallar mtu a 68)

Adreça local
192.168.0.2

Adreça remota
192.168.0.1

Secret IPsec
Desactiva el camp (en cas contrari es crearà un nou Peer)

Mantenir amb vida
Desactiveu el camp (en cas contrari, la interfície s'apagarà constantment, ja que mikrotika té el seu propi format per a aquests paquets i no funciona amb Linux)

DSCP
heretar

No fragmenteu
no

Clamp TCP MSS
veritable

Permet el camí ràpid
veritable

Secció "IP" - "Adreces", afegiu l'adreça:

Paràmetre
Valor

Adreça
192.168.0.2/30

Interfície
IPIP-IPsec0

Ara podeu afegir rutes a la xarxa darrere d'una màquina Linux; quan afegiu una ruta, la passarel·la serà la nostra interfície IPIP-IPsec0.

PS

Com que el nostre servidor Linux és transitiu, té sentit establir-hi el paràmetre Clamp TCP MSS per a les interfícies ipip:

creeu un fitxer /etc/iptables.conf amb el contingut següent:

*mangle
-A POSTROUTING -o ipip+ -p tcp -m tcp --tcp-flags SYN,RST SYN -j TCPMSS --clamp-mss-to-pmtu
COMMIT

i a /etc/network/interfaces
post-up iptables-restore < /etc/iptables.conf

Tinc nginx executant-se a la xarxa darrere de mikrotik (ip 10.10.10.1), feu-lo accessible des d'Internet, afegiu-lo 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 oblideu afegir els permisos adequats a iptables si teniu els filtres de paquets activats.

Mantenir-se saludable!

Font: www.habr.com

Afegeix comentari