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 al furnizorului este dinamic.
- ipip-ipsec0 192.168.0.2/30 va fi tunelul nostru
Tunel IPsec pe mașina Linux o vom ridica cu ajutorul racoon. Nu voi detalia, există un bun u .
Instalăm pachetele necesare:
sudo install racoon ipsec-toolsConfigurăm racoon, acesta va acționa în mod condiționat ca server IPsec. Deoarece mikrotik în modul principal nu poate transmite un identificator suplimentar de client, iar IP-ul extern prin care se conectează la Linux este dinamic, nu vom putea utiliza cheia prepartajată (autentificare pe parolă), deoarece parola trebuie să corespundă fie cu IP-ul host-ului conectat, fie cu identificatorul.
Vom folosi autentificarea pe baza cheilor RSA.
Demonul racoon utilizează 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 converti cheia publică pentru Mikrotik în format PEM cu aceasta — convertește doar într-o direcție: PEM în RSA. Cheia generată de plainrsa-gen nu a putut fi citită nici de openssl, nici de ssh-keygen, astfel încât nu vom putea efectua conversia cu ajutorul lor.
Vom genera o cheie PEM cu ajutorul openssl, iar apoi o vom converti pentru racoon folosind 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 uităm să stabilim ca proprietar utilizatorul sub numele căruia pornește demonul racoon (de obicei root), cu permisiuni 600.
Configurarea mikrotik o voi descrie la conectarea prin WinBox.
Cheia server-name.pub.pem o vom încărca în mikrotik: Meniul „Files” — „Upload.”
Deschidem secțiunea „IP” — „IP sec” — tab-ul „Keys”. Acum generăm cheile — butonul „Generate Key”, apoi exportăm cheia publică a mikrotik-ului „Export Pub. Key”, o putem descărca din secțiunea „Files”, clic 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 pe care l-am încărcat anterior.
Cheia publică a mikrotik-ului trebuie convertită
plainrsa-gen -i mikrotik.pub.pem -f mikrotik.pub.keyși trebuie plasată în folderul /etc/racoon/certs, fără a uita de proprietar și permisiuni.
Configurația racoon cu comentarii: /etc/racoon/racoon.conf
log info; # Nivelul de înregistrare, pentru depanare folosiți 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 va efectua verificarea obligatorie a legăturii la IP-urile specificate mai sus.
}
path certificate "\/etc\/racoon\/certs"; # Calea către folderul cu certificate.
remote anonymous { # Secțiune care stabilește parametrii pentru funcționarea demonului 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; # Setează modul "server" al demonului, acesta nu va încerca să inițieze conexiuni.
nat_traversal on; # Activează utilizarea modului NAT-T pentru clienți, dacă aceștia sunt în spatele NAT.
exchange_mode main; # Modul de schimb al parametrilor de conectare, în acest caz - negociere.
my_identifier address 1.1.1.1; # Ne identificăm linux host-ul 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 acestuia este mai mare sau lungimea cheii este mai mică decât cea a inițiatorului. Dacă durata sesiunii este mai mică decât cea a inițiatorului, racoon folosește propria valoare pentru durata sesiunii și va trimite mesaj RESPONDER-LIFETIME.
proposal { # Parametrii tunelului ISAKMP.
encryption_algorithm aes; # Metoda de criptare a tunelului ISAKMP.
hash_algorithm sha512; # Algoritmul de hashing utilizat pentru tunelul ISAKMP.
authentication_method rsasig; # Modul de autentificare pentru tunelul ISAKMP - prin chei RSA.
dh_group modp2048; # Lungimea cheii pentru algoritmul Diffie-Hellman în timpul negocierii tunelului ISAKMP.
lifetime time 86400 sec; # Timpul de valabilitate al sesiunii.
}
generate_policy on; # Crearea automată a tunelurilor ESP din cererea venită de la gazda conectată.
}
sainfo anonymous { # Parametrii tunelurilor ESP, anonymous - parametrii specificați vor fi utilizați ca parametrii implicit. Pentru diferiți clienți, porturi, protocoale se pot stabili parametrii diferiți, potrivirea se face în funcție de adresele IP, porturile, protocoalele.
pfs_group modp2048; # Lungimea cheii pentru algoritmul Diffie-Hellman pentru tunelurile ESP.
lifetime time 28800 sec; # Durata de valabilitate a tunelurilor ESP.
encryption_algorithm aes; # Metoda de criptare a tunelurilor ESP.
authentication_algorithm hmac_sha512; # Algoritmul de hashing utilizat pentru autentificarea tunelurilor ESP.
compression_algorithm deflate; # Se comprima datele transmise, algoritmul de compresie propus este unul singur.
}
Configurare Mikrotik
Întoarcem în secțiunea "IP" — "IPsec"
Tab-ul "Profiles"
Parametru
Valoare
Name
La alegerea dumneavoastră (implicit default)
Hash Algorithm
sha512
Algoritm de criptare
aes-128
DH-Group
modp2048
Proposhal_check
claim
Lifetime
1d 00:00:00
Traversare NAT
true (bifați)
DPD
120
DPD Maximum failure
5
Tab-ul "Peers"
Parametru
Valoare
Name
La alegerea dumneavoastră (următorul MyPeer)
Address
1.1.1.1 (IP-ul mașinii Linux)
Local Address
10.0.0.2 (IP-ul interfeței WAN a Mikrotik)
Profile
default
Exchange Mode
main
Passive
false
Send INITIAL_CONTACT
true
Tab-ul "Proposal"
Parametru
Valoare
Name
La alegerea dumneavoastră (următorul MyPeerProposal)
Auth. Algorithms
sha512
Encr. Algorithms
aes-128-cbc
Lifetime
08:00:00
PFS Group
modp2048
Tab-ul "Identities"
Parametru
Valoare
Peer
MyPeer
Atuh. Method
rsa key
Cheie
mikrotik.privet.key
Remote Key
server-name.pub.pem
Policy Template Group
default
Notrack Chain
gol
My ID Type
auto
Remote ID Type
auto
Match By
remote id
Mode Configuration
gol
Generate Policy
no
Tab-ul "Policies — General"
Parametru
Valoare
Peer
MyPeer
Tunnel
true
Src. Address
192.168.0.0/30
Dest. Address
192.168.0.0/30
Protocol
255 (toate)
Template
false
Tab-ul "Policies — Action"
Parametru
Valoare
Acțiune
encrypt
Level
requier
IPsec Protocols
esp
Proposal
MyPeerProposal
Cel mai probabil, aveți, ca și mine, pe interfața WAN setat snat/masquerade, această regulă trebuie corectată pentru ca pachetele ipsec ieșite să treacă prin tunelul nostru:
Trecem în secțiunea "IP" — "Firewall".
Tab-ul "NAT", deschidem regula noastră snat/masquerade.
Tab-ul "Advanced"
Parametru
Valoare
IPsec Policy
out: none
Reporniți demonul racoon
sudo systemctl restart racoonDacă la repornirea racoon nu pornește, înseamnă că există o eroare în config, în syslog racoon arată informații despre numărul liniei în care a fost găsită eroarea.
Demonul racoon pornește la încărcarea sistemului de operare, înainte de a ridica interfețele de rețea, iar noi am specificat în secțiunea listen opțiunea strict_address, trebuie să adăugăm în fișierul unității systemd a racoon.
/lib/systemd/system/racoon.service, в секцию [Unit], строку After=network.target.
Acum tunelurile noastre ipsec ar trebui să se ridice, 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 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 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 conectează Mikrotik" dst 1.1.1.1
proto esp reqid 0 mode tunnelDacă tunelurile nu s-au ridicat, verificați syslog sau journalctl -u racoon.
Acum trebuie să configurăm interfețele L3 pentru a putea ruti traficul. Există diferite opțiuni, noi vom folosi IPIP, deoarece este suportat de mikrotik; aș fi folosit 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ă marcheze (fwmark) pachetele, permițându-ne să le filtrăm în iptables și iproute2 (rutare bazată pe politici). Dacă aveți nevoie de funcționalitate maximă, de exemplu, GRE. Dar nu trebuie să uităm că funcționalitatea suplimentară vine cu un overhead mai mare.
O traducere a unei recenzii bune despre interfețele de tunel poate fi consultată .
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
sudo ip route add A.B.C.D/Prefix via 192.168.255.2Pentru ca interfața noastră și rutele să fie activate după repornire, trebuie să descriem interfața în /etc/network/interfaces și acolo, în post-up, să adăugăm rutele, sau să le scriem pe toate î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 să-l faceți executabil.
Sub acest punct, 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 „Interfaces”, adăugăm o nouă interfață „IP tunnel”:
Tab-ul „IP tunnel” — „General”
Parametru
Valoare
Name
La discreția dumneavoastră (ulterior IPIP-IPsec0)
MTU
1480 (dacă nu specificați, atunci mikrotik începe să reducă mtu la 68)
Local Address
192.168.0.2
Adresa Remote
192.168.0.1
Ipsec Secret
Dezactivăm câmpul (altfel se va crea un nou Peer)
Keepalive
Dezactivăm câmpul (altfel interfața se va opri constant, deoarece mikrotik are un anumit format al acestor pachete care 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ța
IPIP-IPsec0
Acum putem adăuga rute pentru rețelele din spatele serverului linux; la adăugarea rutei, gateway-ul va fi interfața noastră IPIP-IPsec0.
PS
Dat fiind că serverul nostru linux este unul de tranzit, 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-ului meu, am nginx (ip 10.10.10.1); îl facem accesibil din internet, adăugând î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ă de rutare 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ă un server OpenVPN 172.16.0.1/24, pentru clienții care folosesc conexiunea la acesta ca gateway, 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 filtre de pachete activate.
Fiți sănătoși!
Sursa: habr.com
