Linux: Ubuntu 18.04.4 LTS (GNU/Linux 4.15.0-91-generic x86_64)
- Eth0 1.1.1.1/32 IP extern
- ipip-ipsec0 192.168.0.1/30 va fi tunelul nostru
Miktoik: CCR 1009, RouterOS 6.46.5
- Eth0 10.0.0.2/30 IP intern de la furnizor. IP extern NAT-ul furnizorului este dinamic.
- ipip-ipsec0 192.168.0.2/30 va fi tunelul nostru
Tunel IPsec pe mașina Linux va fi configurat cu ajutorul racoon. Nu voi detalia, există o bună u .
Instalăm pachetele necesare:
sudo install racoon ipsec-toolsConfigurăm racoon, care va acționa ca server ipsec. Deoarece mikrotik în modul principal nu poate transmite un identificator suplimentar al clientului, iar adresa IP externă prin care se conectează la Linux este dinamică, nu vom putea utiliza chei prepartajate (autentificare pe baza parolei), deoarece parola trebuie să corespundă fie cu adresa IP a gazdei conectate, fie cu identifier.
Vom folosi autentificarea prin chei RSA.
Demonul racoon folosește chei în format RSA, iar mikrotik – în format PEM. Dacă generăm cheile cu utilitarul plainrsa-gen, care vine împreună cu racoon, nu vom putea să convertim cheia publică pentru Mikrotik în format PEM cu ajutorul acestuia — se poate converti doar într-o singură direcție: PEM în RSA. Cheia generată prin plainrsa-gen nu a fost citită de nici openssl, nici ssh-keygen, așa că nu va putea fi realizată conversia cu ajutorul lor.
Vom genera cheia PEM cu ajutorul openssl și apoi o vom converti pentru racoon cu 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.keyCheile obținute le vom pune în folder: /etc/racoon/certs/server. Nu uitați să setați drepturile de proprietate pentru utilizatorul sub care rulează demonul racoon (de obicei root), cu drepturi 600.
Configurarea mikrotik o voi descrie când se conectez la WinBox.
Cheia server-name.pub.pem o vom încărca în mikrotik: Meniul „Files” — „Upload”.
Deschidem secțiunea „IP” — „IP sec” — fila „Keys”. Acum generăm cheile — butonul „Generate Key”, apoi exportăm cheia publică a mikrotik-ului „Export Pub. Key”, putem să o descărcăm din secțiunea „Files”, cu butonul din dreapta pe fișier — „Download”.
Importăm cheia publică racoon, „Import”, în lista derulantă a câmpului „File name” căutăm server-name.pub.pem încărcat anterior.
Cheia publică mikrotik trebuie să fie convertită
plainrsa-gen -i mikrotik.pub.pem -f mikrotik.pub.keyși să fie plasată în folderul /etc/racoon/certs, fără a uita de proprietar și drepturi.
Configurația racoon cu comentarii: /etc/racoon/racoon.conf
log info; # Nivelul de înregistrare, pentru depanare folosim Debug sau Debug2.
listen {
isakmp 1.1.1.1 [500]; # Adresa și portul pe care va asculta demonul.
isakmp_natt 1.1.1.1 [4500]; # Adresa și portul pe care va asculta demonul pentru clienții din spatele NAT.
strict_address; # Se efectuează o verificare obligatorie a legăturii cu IP-urile specificate mai sus.
}
path certificate "/etc/racoon/certs"; # Calea către folderul cu certificate.
remote anonymous { # Secțiunea care definește parametrii pentru funcționarea demonului cu ISAKMP și negocierea modurilor cu gazdele conectate. Deoarece IP-ul de la care se conectează Mikrotik este dinamic, folosim anonymous, ceea ce permite conectarea de la orice adresă. Dacă IP-urile gazdelor sunt statice, se poate specifica o adresă și un port concret.
passive on; # Definește modul de funcționare "server" al demonului, acesta nu va încerca să inițieze conexiuni.
nat_traversal on; # Activează utilizarea modului NAT-T pentru clienții care se află în spatele NAT.
exchange_mode main; # Modul de schimb al parametrilor de conectare, în acest caz --- negociere.
my_identifier address 1.1.1.1; # Identificăm gazda noastră Linux prin adresa sa IP.
certificate_type plain_rsa "server/server-name.priv.key"; # Cheia privată a serverului.
peers_certfile plain_rsa "mikrotik.pub.key"; # Cheia publică a Mikrotik.
proposal_check claim; # Modul de negociere a parametrilor tunelului ISAKMP. Racoon va folosi valorile gazdei conectate (inițiatorul) pentru durata sesiunii și lungimea cheii, dacă durata sesiunii este mai mare sau lungimea cheii este mai mică decât la inițiator. Dacă durata sesiunii este mai scurtă decât la inițiator, racoon va utiliza propria valoare a duratei sesiunii și va trimite mesajul RESPONDER-LIFETIME.
proposal { # Parametrii tunelului ISAKMP.
encryption_algorithm aes; # Metoda de criptare a tunelului ISAKMP.
hash_algorithm sha512; # Algoritmul de hashare utilizat pentru tunelul ISAKMP.
authentication_method rsasig; # Modul de autentificare pentru tunelul ISAKMP - pe baza cheilor RSA.
dh_group modp2048; # Lungimea cheii pentru algoritmul Diffie-Hellman la negocierea tunelului ISAKMP.
lifetime time 86400 sec; # Timpul de valabilitate al sesiunii.
}
generate_policy on; # Crearea automată a tunelurilor ESP din cererea primită de la gazda conectată.
}
sainfo anonymous { # Parametrii tunelurilor ESP, anonymous - parametrii specificați vor fi folosiți ca parametri default. Pentru clienți, porturi, protocoale diferite se pot defini parametri diferiți, asocierea se face pe baza adreselor IP, porturilor, protocoalelor.
pfs_group modp2048; # Lungimea cheii pentru algoritmul Diffie-Hellman pentru tuneluri ESP.
lifetime time 28800 sec; # Timpul de valabilitate al tunelurilor ESP.
encryption_algorithm aes; # Metoda de criptare a tunelurilor ESP.
authentication_algorithm hmac_sha512; # Algoritmul de hashare utilizat pentru autentificarea tunelurilor ESP.
compression_algorithm deflate; # Se comprimă datele transmise, algoritmul de compresie propus fiind unul singur.
}
Configurația mikrotik
Ne întoarcem în secțiunea "IP" — "IPsec"
Tab-ul "Profiles"
Parametru
Valoare
Name
La alegerea dumneavoastră (implicit default)
Algoritm de Hash
sha512
Algoritm de criptare
aes-128
Grup DH
modp2048
Proposhal_check
claim
Durată de viață
1z 00:00:00
Traversare NAT
adevărat (bifați căsuța)
DPD
120
DPD Maximum failure
5
Tab-ul "Peers"
Parametru
Valoare
Name
La alegerea dumneavoastră (mai departe MyPeer)
Address
1.1.1.1 (IP-ul mașinii linux)
Adresa Locală
10.0.0.2 (IP-ul interfeței WAN a mikrotik)
Profil
default
Mod de Schimb
main
Pasiv
false
Trimite INITIAL_CONTACT
true
Tab-ul "Proposal"
Parametru
Valoare
Name
La alegerea dumneavoastră (mai departe MyPeerProposal)
Algoritmi de Autentificare
sha512
Algoritmi de Criptare
aes-128-cbc
Durată de viață
08:00:00
Grup PFS
modp2048
Tab-ul "Identities"
Parametru
Valoare
Peer
MyPeer
Metodă de Autentificare
cheie rsa
Cheie
mikrotik.privet.key
Cheie Remote
server-name.pub.pem
Grup de Șablon de Politică
default
Chain Notrack
gol
Tipul ID-ului Meu
auto
Tipul ID-ului Remote
auto
Potrivire După
id remote
Configurare Mod
gol
Generați Politică
no
Tab-ul "Policies — General"
Parametru
Valoare
Peer
MyPeer
Tunel
true
Adresa Src.
192.168.0.0/30
Adresa Dest.
192.168.0.0/30
Protocol
255 (toate)
Șablon
false
Tab-ul "Policies — Action"
Parametru
Valoare
Acțiune
encrypt
Level
requier
Protocoale IPsec
esp
Propunere
MyPeerProposal
Probabil că și dumneavoastră, ca și mine, ați configurat snat/masquerade pe interfața WAN, această regulă trebuie ajustată pentru a permite pachetele ipsec să treacă prin tunel:
Trecem la secțiunea "IP" — "Firewall".
Tab-ul "NAT", deschidem regula noastră snat/masquerade.
Tab-ul "Advanced"
Parametru
Valoare
Politica IPsec
out: none
Restartăm demonul racoon
sudo systemctl restart racoonDacă racoon nu pornește la restart, înseamnă că există o eroare în configurare, în syslog racoon va afișa informații despre numărul liniei în care a fost găsită eroarea.
Demonul racoon pornește la bootul sistemului înainte ca interfețele de rețea să fie active, iar noi am specificat opțiunea strict_address în secțiunea listen, este necesar să adăugați în fișierul unității systemd pentru racoon
/lib/systemd/system/racoon.service, в секцию [Unit], строку After=network.target.
Acum tunelurile noastre ipsec ar trebui să fie funcționale, verificăm ieșirea:
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 prin care se conectează 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 prin care se conectează 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 prin care se conectează mikrotik" dst 1.1.1.1
proto esp reqid 0 mode tunnelDacă tunelurile nu s-au activat, verificați syslog sau jurnalctl -u racoon.
Acum este necesar să configurăm interfețele L3 pentru a putea ruteza traficul. Există diferite opțiuni, vom folosi IPIP, deoarece acesta este suportat de mikrotik, aș fi utilizat vti, dar, din păcate, nu a fost implementat încă în mikrotik. Spre deosebire de IPIP, acesta poate, de asemenea, să încapsuleze multicast și să adauge etichete (fwmark) pachetelor, care pot fi filtrate în iptables și iproute2 (routing bazat pe politică). Dacă aveți nevoie de funcționalitate maximă - atunci, de exemplu, GRE. Dar nu trebuie să uităm că plătim un overhead mai mare pentru funcționalitate suplimentară.
Puteți viziona o traducere a unei recenziei bune despre interfețele tunel. .
Pe 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-ipsec0Acum putem adăuga rute pentru rețelele din spatele mikrotik-ului.
sudo ip route add A.B.C.D/Prefix via 192.168.255.2Pentru ca interfața și rutele noastre să pornească după repornire, trebuie să descriem interfața în /etc/network/interfaces și acolo să adăugăm rutele în post-up, sau putem scrie totul într-un singur fișier, de exemplu, /etc/ipip-ipsec0.conf și să-l apelăm prin post-up, nu uitați de proprietarul fișierului, permisiuni și asigurați-vă că este executabil.
Mai jos este un exemplu de fișier.
#!/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.2Pe Mikrotik:
Secțiunea „Interfețe”, adăugăm o nouă interfață „IP tunnel”:
Tab-ul „IP tunnel” - „General”
Parametru
Valoare
Name
La discreția dumneavoastră (apoi IPIP-IPsec0)
MTU
1480 (dacă nu se specifică, mikrotik începe să scadă mtu la 68)
Adresa Locală
192.168.0.2
Adresa Remote
192.168.0.1
Ipsec Secret
Dezactivăm câmpul (altfel va fi creat un nou Peer)
Keepalive
Dezactivăm câmpul (altfel interfața se va opri constant, deoarece mikrotik are un format propriu pentru aceste pachete și nu funcționează cu linux)
DSCP
inherit
Dont Fragment
no
Clamp TCP MSS
true
Allow Fast Path
true
Secțiunea „IP” - „Addresses”, adăugăm adresa:
Parametru
Valoare
Address
192.168.0.2/30
Interfață
IPIP-IPsec0
Acum putem adăuga rute în rețelele din spatele mașinii linux, la adăugarea rutei, gateway-ul va fi interfața noastră IPIP-IPsec0.
PS
Deoarece serverul nostru linux este tranzițional, are sens să setăm parametrul Clamp TCP MSS pentru interfețele ipip:
creăm un fișier /etc/iptables.conf cu următorul conținut:
*mangle
-A POSTROUTING -o ipip+ -p tcp -m tcp --tcp-flags SYN,RST SYN -j TCPMSS --clamp-mss-to-pmtu
COMMITși în /etc/network/interfaces
post-up iptables-restore < /etc/iptables.conf
În rețeaua din spatele mikrotik am un nginx (ip 10.10.10.1), facem-l accesibil din internet, adăugăm în /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
#Pe Mikrotik, în tabelul mangle, trebuie să adăugăm o regulă route cu destinația 192.168.0.1 pentru pachetele cu adresa sursă 10.10.10.1 și porturile 80, 443.
# De asemenea, pe Linux funcționează serverul OpenVPN 172.16.0.1/24, pentru clienții care utilizează conexiunea ca gateway, le oferim acces la internet
-A POSTROUTING -s 172.16.0.0/24 -o eth0 -j SNAT --to-source 1.1.1.1
COMMIT Nu uitați să adăugați permisiunile corespunzătoare în iptables, dacă aveți activate filtrele de pachete.
Să fiți sănătoși!
Sursa: habr.com
