IPIP IPsec VPN alagutat a Linux gép és a Mikrotik között a szolgáltató NAT-ja mögött

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

  • Eth0 1.1.1.1/32 külső IP
  • ipip-ipsec0 192.168.0.1/30 lesz az alagútunk

Mikrotik: CCR 1009, RouterOS 6.46.5

  • Eth0 10.0.0.2/30 belső IP a szolgáltatótól. A külső IP a szolgáltató NAT-ja dinamikus.
  • ipip-ipsec0 192.168.0.2/30 lesz az alagútunk

Az IPsec alagutat a Linux gépen racoon segítségével fogjuk felállítani. Nem írom le a részleteket, van jó cikk sa-logic-subsets-canary-vs.yaml vvpoloskin.

Telepítjük a szükséges csomagokat:

sudo install racoon ipsec-tools

Beállítjuk a racoont, ami a szerepe szerint ipsec szerverként fog működni. Mivel a Mikrotik a fő módban nem tud átadni további ügyfélazonosítót, és a külső IP cím, amin csatlakozik a Linuxhoz, dinamikus, a preshared key használata (jelszóval történő azonosítás) nem lehetséges, mivel a jelszót vagy a csatlakozó host IP-címével, vagy azonosítójával kellene társítani.

RSA kulcsokkal fogunk azonosítani.

A racoon démon RSA formátumú kulcsokat használ, míg a Mikrotik PEM formátumban. Ha a racoonnal együtt érkező plainrsa-gen programmal generálunk kulcsokat, akkor a Mikrotik számára a nyilvános kulcs PEM formátumba való konvertálása nem lehetséges — csak egy irányban konvertál: PEM-ből RSA-ba. A plainrsa-gen által generált kulcsot nem tudta sem az openssl, sem az ssh-keygen olvasni, így ezek segítségével sem lehet végrehajtani a konvertálást.

PEM kulcsot generálunk openssl segítségével, majd a plainrsa-gen segítségével konvertáljuk racoon számára:

#  Генерируем ключ
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

A kapott kulcsokat a következő mappába helyezzük: /etc/racoon/certs/server. Ne felejtsük el beállítani a tulajdonosát annak a felhasználónak, akinek a nevében a racoon démon fut (általában root), és a jogokat 600-ra.

A mikrotik beállítást WinBox-szal való csatlakozáskor írom le.

A server-name.pub.pem kulcsot feltöltjük a mikrotikbe: Menü "Files" — "Upload".

Megnyitjuk az "IP" — "IP sec" — "Keys" szekciót. Most generáljuk a kulcsokat — "Generate Key" gomb, majd exportáljuk a mikrotik nyilvános kulcsát "Export Pub. Key", letölteni a "Files" szekcióból lehet, jobb gomb a fájlon — "Download".

Importáljuk a racoon nyilvános kulcsát, "Import", a legördülő listában a "File name" mezőben keressük meg a korábban feltöltött server-name.pub.pem fájlt.

A mikrotik nyilvános kulcsát konvertálni kell

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

és a mappába kell helyezni /etc/racoon/certs a tulajdonosra és a jogokra figyelve.

A racoon konfiguráció kommentárokkal: /etc/racoon/racoon.conf

log info; # Naplószint, hibakereséshez használja a Debug vagy Debug2-t.

listen {

    isakmp 1.1.1.1 [500]; # Az IP cím és port, ahol a démon hallgatni fog.
    isakmp_natt 1.1.1.1 [4500]; # Az IP cím és port, ahol a démon hallgatni fog NAT mögötti kliensek esetén.
    strict_address; # Kötelező érvényű ellenőrzés a fent megadott IP-hez való kötésre.
}

path certificate "\/etc\/racoon\/certs"; # Az irányítópulthoz vezető mappa elérési útja.

remote anonymous { # Szakasz, amely a démon ISAKMP működéséhez és a csatlakozó hosztokkal való paraméteregyeztetéshez szükséges beállításokat adja meg. Mivel a Mikrotik csatlakozási IP címe dinamikus, anonymoust használunk, amely lehetővé teszi a kapcsolatot bármely címről. Ha a hosztok IP címe statikus, akkor megadható egy konkrét cím és port.

    passive on; # A démon "szerver" üzemmódjának beállítása, nem fog próbálkozni a kapcsolatok kezdeményezésével.
    nat_traversal on; # A NAT-T üzemmód használatának engedélyezése a NAT mögötti kliensek számára.
    exchange_mode main; # A csatlakozási paraméterek cseréjének módja, ebben az esetben ---egyeztetés.
    my_identifier address 1.1.1.1; # A linux hosztunk azonosítása az IP címén keresztül.
    certificate_type plain_rsa "server\/server-name.priv.key"; # A szerver privát kulcsa.
    peers_certfile plain_rsa "mikrotik.pub.key"; # A Mikrotik nyilvános kulcsa.

    proposal_check claim; # Az ISAKMP alagút paramétereinek egyeztetési módja. A Racoon használni fogja a csatlakozó hoszt (kezdeményező) értékeit a munkamenet hosszára                   és a kulcs hosszára, ha az első hosszabb, vagy a második rövidebb, mint a kezdeményezőé. Ha a munkamenet hossza rövidebb, mint a kezdeményezőé, a racoon a saját munkamenet időtartamának értékét fogja használni és elküldi a RESPONDER-LIFETIME üzenetet.
    proposal { # ISAKMP alagút paraméterek.

        encryption_algorithm aes; # Az ISAKMP alagút titkosítási módja.
        hash_algorithm sha512; # A hashelési algoritmus, amelyet az ISAKMP alagút alkalmaz.
        authentication_method rsasig; # Az ISAKMP alagút hitelesítési módja - RSA kulcsok alapján.
        dh_group modp2048; # A Diffie-Hellman algoritmus kulcshosszának beállítása az ISAKMP alagút egyeztetéséhez.
        lifetime time 86400 sec; Munkamenet élettartama.
    }

    generate_policy on; # ESP alagutak automatikus létrehozása a csatlakozó hoszt által érkező kérésből.
}

sainfo anonymous { # ESP alagutak paraméterei, anonymous - a megadott paraméterek alapértelmezettként fognak működni. Különböző kliensek, portok, protokollok esetén eltérő paraméterek adhatók meg, a párosítás IP címek, portok és protokollok alapján történik.

    pfs_group modp2048; # A Diffie-Hellman algoritmus kulcshossza az ESP alagutakhoz.
    lifetime time 28800 sec; # Az ESP alagutak élettartama.
    encryption_algorithm aes; # Az ESP alagutak titkosítási módja.
    authentication_algorithm hmac_sha512; # A hashelési algoritmus használata az ESP alagutak hitelesítéséhez.
    compression_algorithm deflate; # Az átvitt adatok tömörítése, csak egy tömörítési algoritmus érhető el.
}

Mikrotik konfiguráció

Visszatérünk az "IP" - "IPsec" részhez

"Profiles" fül
A parameter
Value

Név
Az Ön döntése (alapértelmezett esetben default)

Hash Algoritmus
sha512

Encryption Algorithm
aes-128

DH-Group
modp2048

Proposhal_check
claim

Élettartam
1d 00:00:00

NAT Traversal
true (jelölje be a négyzetet)

DPD
120

DPD Maximális hiba
5

"Peers" fül
A parameter
Value

Név
Az Ön döntése (továbbiakban MyPeer)

Cím
1.1.1.1 (IP linux gép)

Helyi Cím
10.0.0.2 (IP WAN interfész mikrotik)

Profil
alapértelmezett

Csere Mód
main

Passzív
hamis

Küldje el az INITIAL_CONTACT-ot
igaz

"Proposal" fül
A parameter
Value

Név
Az Ön döntése (továbbiakban MyPeerProposal)

Auth. Algoritmusok
sha512

Titkosítási Algoritmusok
aes-128-cbc

Élettartam
08:00:00

PFS Csoport
modp2048

"Identities" fül
A parameter
Value

Peer
MyPeer

Aut. Módszer
rsa kulcs

Kulcs
mikrotik.privet.key

Távoli Kulcs
server-name.pub.pem

Politikai Sablon Csoport
alapértelmezett

Notrack Chain
üres

Az Én ID Típusom
auto

Távoli ID Típus
auto

Illeszkedés Által
távoli id

Mód Konfiguráció
üres

Politika Generálása
nem

"Policies — General" fül
A parameter
Value

Peer
MyPeer

Alagút
igaz

Forrás Cím
192.168.0.0/30

Cél Cím
192.168.0.0/30

Protocol
255 (minden)

Sablon
hamis

"Policies — Action" fül
A parameter
Value

Akció
encrypt

Szint
requier

IPsec Protokollok
esp

Javaslat
MyPeerProposal

Valószínűleg Önnek is, mint nekem, a WAN interfészen beállítva van a snat/masquerade, ezt a szabályt korrekciózni kell, hogy a kimenő ipsec csomagok a mi alagútunkba menjenek:
Lépjünk az "IP" - "Firewall" részhez.
"NAT" fül, nyissuk meg a snat/masquerade szabályunkat.

"Advanced" fül
A parameter
Value

IPsec Politika
out: none

Újraindítjuk a racoon démonját

sudo systemctl restart racoon

Ha a racoon újraindításakor nem indul el, az azt jelenti, hogy a konfigurációban hiba van, a syslog a racoonból információt ad arról, hogy melyik sorban talált hibát.

A racoon démon a rendszer indításakor korábban indul el, mint a hálózati interfészek, és mi a listen szekcióban a strict_address opciót adtuk meg, szükséges a racoon systemd egység fájljába beírni.
/lib/systemd/system/racoon.service, в секцию [Unit], строку After=network.target.

Most a mi ipsec alagútjainknak el kell indulniuk, nézzük meg az eredményt:

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, amin keresztül kapcsolódik a 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, amin keresztül kapcsolódik a 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, amin keresztül kapcsolódik a mikrotik" dst 1.1.1.1
        proto esp reqid 0 mode tunnel

Ha az alagút nem indult el, nézze meg a syslogot, vagy a journalctl -u racoon parancsot.

Most már be kell állítanunk az L3 interfészeket, hogy tudjunk forgalmat irányítani. Különböző lehetőségek vannak, mi az IPIP-t fogjuk használni, mivel azt a mikrotik támogatja; én a VTI-t használnám, de sajnos a mikrotikben ezt még nem valósították meg. Az IPIP-től abban különbözik, hogy további multicast encapsulációt végez és fwmark-ot tesz a csomagokra, melyek alapján kiszűrhetőek az iptables és az iproute2 (policy-alapú irányítás) segítségével. Ha maximális funkciókra van szükség, akkor például a GRE. De ne felejtsük el, hogy a további funkciókért nagyobb overheadet kell fizetni.

Egy jó tunnel interfészekről szóló áttekintés megtekinthető itt.

Linuxon:

# Создаем интерфейс
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

Most már hozzáadhatjuk az útvonalakat a mikrotik mögötti hálózatokhoz

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

Ahhoz, hogy interfészünk és az útvonalaink életben maradjanak újraindítás után, meghatározzuk az interfészt a /etc/network/interfaces fájlban és ott a post-up-ban hozzáadjuk az útvonalakat, vagy mindent egy fájlban megadhatunk, például a /etc/ipip-ipsec0.conf fáljban és onnan indíthatjuk el a post-up segítségével, ne feledkezzünk meg a fájl tulajdonosáról, a jogosultságokról és arról, hogy végrehajthatóvá tegyük.

Az alábbiakban egy példa fájlt lát.

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

Mikrotik-en:

A "Interfaces" szekcióban, új "IP tunnel" interfészt adunk hozzá:

IP tunnel fül — "General"
A parameter
Value

Név
Ön belátása szerint (továbbiakban IPIP-IPsec0)

MTU
1480 (ha nem adja meg, a mikrotik elkezdi vágni az MTU-t 68-ra)

Helyi Cím
192.168.0.2

Távoli cím
192.168.0.1

Ipsec titok
Deaktiváljuk a mezőt (különben új Peer-t hoz létre)

Keepalive
Deaktiváljuk a mezőt (különben az interfész folyamatosan kikapcsol, mert a mikrotiknak valamilyen saját formátuma van ezeknek a csomagoknak és nem működik Linux alatt)

DSCP
inherit

Dont Fragment
nem

Clamp TCP MSS
igaz

Allow Fast Path
igaz

Az "IP" szekció — "Addresses", hozzáadjuk a címet:

A parameter
Value

Cím
192.168.0.2/30

Interface
IPIP-IPsec0

Most már hozzáadhatunk útvonalakat a Linux gép mögötti hálózatokhoz, az útvonal hozzáadása során a gateway a IPIP-IPsec0 interfészünk lesz.

PS

Mivel a Linux szerverünk tranzit, értelemszerűen a Clamp TCP MSS paramétert kell beállítani az IPIP interfészekhez:

hozzunk létre egy /etc/iptables.conf nevű fájlt a következő tartalommal:

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

és a /etc/network/interfaces fájlban
post-up iptables-restore < /etc/iptables.conf

A mikrotik mögötti hálózaton nginx fut (IP 10.10.10.1), tegyük elérhetővé az interneten, adjuk hozzá a /etc/iptables.conf fájlhoz:

*nat
-A PREROUTING -d 1.1.1.1/32 -p tcp -m multiport --dports 80,443 -j DNAT --to-destination 10.10.10.1
#Mikrotikon a mangle táblában hozzá kell adni egy route szabályt, amely 192.168.0.1 címet ad a 10.10.10.1 forrási című csomagokhoz a 80 és 443 portokon.

# Linux alatt az OpenVPN szerver 172.16.0.1/24, a kliensek, akik ezt a kapcsolatot használják átjáróként, hozzáférést kapnak az internethez.
-A POSTROUTING -s 172.16.0.0/24 -o eth0 -j SNAT --to-source 1.1.1.1
COMMIT 

Ne felejtsd el hozzáadni a megfelelő engedélyeket az iptables-hez, ha aktívak a csomagfilterek.

Maradj egészséges!

Forrás: habr.com

Megbízható hosting vásárlása weboldalak számára, DDoS védelemmel, VPS VDS szerverek. 🔥 Megbízható webtárhely vásárlása DDoS védelemmel, VPS VDS szerverek | ProHoster