IPIP IPsec VPN-tunnel mellan Linux-maskin och Mikrotik bakom NAT-leverantör

Linux: Ubuntu 18.04.4 LTS (GNU/Linux 4.15.0-91-generic x86_64)

  • Eth0 1.1.1.1/32 extern IP
  • ipip-ipsec0 192.168.0.1/30 kommer att bli vår tunnel

Miktoik: CCR 1009, RouterOS 6.46.5

  • Eth0 10.0.0.2/30 intern IP från leverantören. Leverantörens externa NAT-IP är dynamisk.
  • ipip-ipsec0 192.168.0.2/30 kommer att bli vår tunnel

Vi kommer att skapa en IPsec-tunnel på en Linux-maskin med racoon. Jag kommer inte att beskriva detaljerna, det finns en bra sådan artikel у vvpoloskin.

Installera de nödvändiga paketen:

sudo install racoon ipsec-tools

Vi konfigurerar racoon, den kommer villkorligt att fungera som en ipsec-server. Eftersom mikrotik i huvudläget inte kan överföra en ytterligare klientidentifierare, och den externa IP-adressen som den ansluter till Linux är dynamisk, kommer det inte att fungera att använda en fördelad nyckel (lösenordsauktorisering), eftersom lösenordet måste matchas antingen med IP-adressen för den anslutande värden, eller med identifierare.

Vi kommer att använda auktorisering med RSA-nycklar.

Racoon-demonen använder nycklar i RSA-formatet och mikrotik använder PEM-formatet. Om du genererar nycklar med hjälp av plainrsa-gen-verktyget som följer med racoon, kommer du inte att kunna konvertera den publika nyckeln för Mikrotika till PEM-format med dess hjälp - den konverterar bara i en riktning: PEM till RSA. Varken openssl eller ssh-keygen kunde läsa den genererade nyckeln av plainrsa-gen, så konverteringen kommer inte att vara möjlig med dem heller.

Vi kommer att generera en PEM-nyckel med openssl och sedan konvertera den för racoon med 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

Vi kommer att lägga de mottagna nycklarna i mappen: /etc/racoon/certs/server. Glöm inte att ställa in ägaren till användaren under vars namn racoon-demonen lanseras (vanligtvis rot) till 600 behörigheter.

Jag kommer att beskriva mikrotik-inställningen när jag ansluter via WinBox.

Ladda upp nyckeln server-name.pub.pem till mikrotik: Meny "Filer" - "Ladda upp".

Öppna avsnittet "IP" - "IP sek" - fliken "Nycklar". Nu genererar vi nycklar - knappen "Generera nyckel", exporterar sedan mikrotikas publika nyckel "Expor Pub. Key", kan du ladda ner den från avsnittet "Filer", högerklicka på filen - "Ladda ner".

Vi importerar den offentliga tvättbjörnsnyckeln, "Importera", i rullgardinsmenyn i fältet "Filnamn" letar vi efter server-name.pub.pem som vi laddade ner tidigare.

Mikrotiks publika nyckel måste konverteras

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

och lägg den i mappen /etc/racoon/certs, utan att glömma ägaren och rättigheterna.

racoon config med kommentarer: /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; # Сжимать передаваемые данные, алгоритм сжатия предлагается только один.
}

mikrotik konfiguration

Återgå till avsnittet "IP" - "IPsec"

Fliken "Profiler".
Parameter
Värde

Namn
Efter eget gottfinnande (som standard)

Hash-algoritm
sha512

Krypteringsalgoritm
aes-128

DH-grupp
modp2048

Proposhal_check
patentkrav

Livslängd
1d 00:00:00

NAT Traversal
sant (kryss i rutan)

DPD
120

DPD Maximalt fel
5

Fliken Peers
Parameter
Värde

Namn
Efter eget gottfinnande (hädanefter kallat MyPeer)

Adress
1.1.1.1 (IP Linux-maskiner)

Lokal adress
10.0.0.2 (IP WAN-gränssnitt mikrotik)

Profil
standard

Utbytesläge
huvudsakliga

Passiv
falsk

Skicka INITIAL_CONTACT
sann

Fliken Förslag
Parameter
Värde

Namn
Efter eget gottfinnande (hädanefter kallat MyPeerProposal)

Auth. Algoritmer
sha512

Encr. Algoritmer
aes-128-cbc

Livslängd
08:00:00

PFS Group
modp2048

Fliken "Identiteter".
Parameter
Värde

Päron
MyPeer

Atuh. Metod
rsa nyckel

Nyckel
mikrotik.privet.key

Fjärrnyckel
servernamn.pub.pem

Policymallgrupp
standard

Notrack Chain
tömma

Min ID-typ
bil

Typ av fjärr-ID
bil

Matcha av
fjärr-id

Lägeskonfiguration
tömma

Skapa policy
Nej

Fliken "Policyer - Allmänt"
Parameter
Värde

Päron
MyPeer

Tunnel
sann

Src. Adress
192.168.0.0/30

Dest. Adress
192.168.0.0/30

Protokoll
255 (alla)

Mall
falsk

Fliken "Policyer - Åtgärd"
Parameter
Värde

Handling
kryptera

Nivå
behöva

IPsec-protokoll
esp

Förslag
MyPeerProposal

Troligtvis har du, precis som jag, snat/masquerade konfigurerat på ditt WAN-gränssnitt; denna regel måste justeras så att utgående ipsec-paket går in i vår tunnel:
Gå till avsnittet "IP" - "Brandvägg".
"NAT", öppna vår snat/maskerad-regel.

Fliken Avancerat
Parameter
Värde

IPsec-policy
ut: ingen

Startar om tvättbjörnsdemonen

sudo systemctl restart racoon

Om racoon inte startar vid omstart finns det ett fel i konfigurationen; i syslog visar racoon information om radnumret där felet upptäcktes.

När operativsystemet startar startar racoon-demonen innan nätverksgränssnitten tas upp, och vi angav alternativet strict_address i lyssnarsektionen; du måste lägga till racoon-enheten i systemd-filen
/lib/systemd/system/racoon.service, i avsnittet [Enhet], rad After=network.target.

Nu borde våra ipsec-tunnlar vara uppe, titta på utgången:

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

Om tunnlarna inte är uppe, titta på syslog eller journalctl -u racoon.

Nu måste du konfigurera L3-gränssnitt så att trafik kan dirigeras. Det finns olika alternativ, vi kommer att använda IPIP, eftersom mikrotik stöder det, skulle jag använda vti, men tyvärr har det inte implementerats i mikrotik ännu. Den skiljer sig från IPIP genom att den dessutom kan kapsla in multicast och sätta fwmarks på paket, genom vilka de kan filtreras i iptables och iproute2 (policybaserad routing). Om du behöver maximal funktionalitet, då till exempel GRE. Men glöm inte att vi betalar för ytterligare funktionalitet med ett stort överhuvud.

Du kan se översättningen av en bra översikt över tunnelgränssnitt här.

På 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

Nu kan du lägga till rutter för nätverk bakom mikrotik

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

För att vårt gränssnitt och rutter ska höjas efter en omstart måste vi beskriva gränssnittet i /etc/network/interfaces och lägga till rutter där i post-up, eller skriva allt i en fil, till exempel /etc/ ipip-ipsec0.conf och dra den genom post-up, glöm inte filägaren, rättigheter och gör den körbar.

Nedan finns en exempelfil

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

På Mikrotik:

Avsnittet "Gränssnitt", lägg till ett nytt gränssnitt "IP-tunnel":

Fliken "IP-tunnel" - "Allmänt"
Parameter
Värde

Namn
Efter eget gottfinnande (hädanefter kallad IPIP-IPsec0)

MTU
1480 (om inte specificerat börjar mikrotik skära mtu till 68)

Lokal adress
192.168.0.2

Fjärradress
192.168.0.1

IPsec hemlighet
Inaktivera fältet (annars skapas en ny Peer)

Håll vid liv
Inaktivera fältet (annars kommer gränssnittet ständigt att stängas av, eftersom mikrotika har sitt eget format för dessa paket och inte fungerar med Linux)

DSCP
ärva

Fragmentera inte
Nej

Klämma TCP MSS
sann

Tillåt snabb väg
sann

Avsnitt "IP" - "Adresser", lägg till adressen:

Parameter
Värde

Adress
192.168.0.2/30

Gränssnitt
IPIP-IPsec0

Nu kan du lägga till rutter till nätverket bakom en Linux-maskin; när du lägger till en rutt kommer gatewayen att vara vårt IPIP-IPsec0-gränssnitt.

PS

Eftersom vår Linux-server är transitiv är det vettigt att ställa in Clamp TCP MSS-parametern för ipip-gränssnitt på den:

skapa en fil /etc/iptables.conf med följande innehåll:

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

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

Jag har nginx igång på nätverket bakom mikrotik (ip 10.10.10.1), gör det tillgängligt från Internet, lägg till det i /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 

Glöm inte att lägga till lämpliga behörigheter till iptables om du har aktiverat paketfilter.

Håll dig frisk!

Källa: will.com

Lägg en kommentar