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ó sa-logic-subsets-canary-vs.yaml .
Telepítjük a szükséges csomagokat:
sudo install racoon ipsec-toolsBeá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.keyA 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 racoonHa 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 tunnelHa 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ő .
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-ipsec0Most 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.2Ahhoz, 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.2Mikrotik-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
