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-ul NAT extern al furnizorului este dinamic.
- ipip-ipsec0 192.168.0.2/30 va fi tunelul nostru
Vom crea un tunel IPsec pe o mașină Linux folosind racoon. Nu voi descrie detaliile, există unul bun
Instalați pachetele necesare:
sudo install racoon ipsec-tools
Configuram racoon, acesta va acționa condiționat ca un server ipsec. Deoarece mikrotik în modul principal nu poate transmite un identificator de client suplimentar, iar adresa IP externă prin care se conectează la Linux este dinamică, utilizarea unei chei partajate în prealabil (autorizarea parolei) nu va funcționa, deoarece parola trebuie să fie asociată fie cu adresa IP a lui. gazda de conectare sau cu identificator.
Vom folosi autorizarea folosind chei RSA.
Daemonul raton folosește chei în format RSA, iar mikrotik folosește formatul PEM. Dacă generați chei folosind utilitarul plainrsa-gen care vine cu racoon, atunci nu veți putea converti cheia publică pentru Mikrotika în format PEM cu ajutorul acestuia - se convertește doar într-o singură direcție: PEM în RSA. Nici openssl, nici ssh-keygen nu au putut citi cheia generată de plainrsa-gen, așa că nici conversia nu poate fi efectuată folosindu-le.
Vom genera o cheie PEM folosind openssl și 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.key
Vom pune cheile primite în folderul: /etc/racoon/certs/server. Nu uitați să setați proprietarul utilizatorului sub numele căruia este lansat demonul raton (de obicei root) la 600 de permisiuni.
Voi descrie configurația mikrotik atunci când vă conectez prin WinBox.
Încărcați cheia server-name.pub.pem pe mikrotik: Meniu „Fișiere” - „Încărcare”.
Deschideți secțiunea „IP” - „IP sec” - fila „Chei”. Acum generăm chei - butonul „Generează cheia”, apoi exportăm cheia publică mikrotika „Expor Pub. Cheie”, o puteți descărca din secțiunea „Fișiere”, faceți clic dreapta pe fișier - „Descărcare”.
Importăm cheia publică raton, „Import”, în lista derulantă a câmpului „Nume fișier” căutăm server-name.pub.pem pe care l-am descărcat mai devreme.
Cheia publică mikrotik trebuie convertită
plainrsa-gen -i mikrotik.pub.pem -f mikrotik.pub.key
si pune-l in folderul /etc/racoon/certs, fara a uita de proprietar si drepturi.
racoon config cu comentarii: /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 config
Reveniți la secțiunea „IP” - „IPsec”
fila „Profiluri”.
Parametru
Valoare
Nume si Prenume
La discreția dvs. (în mod implicit)
Algoritmul Hash
sha512
Algoritm de criptare
aes-128
DH-Grup
modp2048
Proposhal_check
pretinde
Toată viața
1 zi 00:00:00
Traversarea NAT
adevărat (bifați caseta)
DPD
120
DPD Eșec maxim
5
fila Peers
Parametru
Valoare
Nume si Prenume
La discreția dvs. (denumită în continuare MyPeer)
Adresă
1.1.1.1 (mașini IP Linux)
Adresă locală
10.0.0.2 (interfață IP WAN mikrotik)
Profil
lipsă
Mod schimb
principal
Pasiv
fals
Trimiteți INITIAL_CONTACT
adevărat
Fila Propunere
Parametru
Valoare
Nume si Prenume
La discreția dvs. (denumită în continuare MyPeerProposal)
Auth. Algoritmi
sha512
Encr. Algoritmi
aes-128-cbc
Toată viața
08:00:00
Grupul PFS
modp2048
Fila „Identități”.
Parametru
Valoare
egal
MyPeer
Atuh. Metodă
cheie rsa
Cheie
mikrotik.privet.key
Cheie la distanță
nume-server.pub.pem
Grup de șabloane de politici
lipsă
Lanțul Notrack
gol
Tipul meu de identitate
Auto
Tip ID de la distanță
Auto
Se potrivește după
ID de la distanță
Configurare mod
gol
Generați politică
Nu.
Fila „Politici – General”
Parametru
Valoare
egal
MyPeer
Tunel
adevărat
Sr. Abordare
192.168.0.0/30
Dest. Abordare
192.168.0.0/30
Protocol
255 (toate)
Format
fals
Fila „Politici – Acțiune”
Parametru
Valoare
Acțiune
criptați
Nivel
cere
Protocoale IPsec
esp
Propunere
MyPeerProposal
Cel mai probabil, ca și mine, ați configurat snat/masquerade pe interfața WAN; această regulă trebuie ajustată astfel încât pachetele ipsec de ieșire să intre în tunelul nostru:
Accesați secțiunea „IP” - „Firewall”.
Fila „NAT”, deschideți regula noastră snat/masquerade.
Filă avansată
Parametru
Valoare
Politica IPsec
afară: niciunul
Repornirea demonului raton
sudo systemctl restart racoon
Dacă racoon nu pornește la repornire, atunci există o eroare în config; în syslog, racoon afișează informații despre numărul liniei în care a fost detectată eroarea.
Când sistemul de operare pornește, demonul racoon pornește înainte ca interfețele de rețea să fie afișate și am specificat opțiunea strict_address în secțiunea de ascultare; trebuie să adăugați unitatea racoon în fișierul systemd
/lib/systemd/system/racoon.service, în secțiunea [Unitate], linia After=network.target.
Acum tunelurile noastre ipsec ar trebui să fie deschise, uitați-vă la rezultat:
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
Dacă tunelurile nu sunt deschise, uitați-vă la syslog sau journalctl -u racoon.
Acum trebuie să configurați interfețele L3, astfel încât traficul să poată fi direcționat. Există diferite opțiuni, vom folosi IPIP, deoarece mikrotik îl acceptă, aș folosi vti, dar, din păcate, nu a fost încă implementat în mikrotik. Diferă de IPIP prin faptul că poate încapsula în plus multicast și pune fwmarks pe pachete, prin care acestea pot fi filtrate în iptables și iproute2 (rutare bazată pe politici). Dacă aveți nevoie de funcționalitate maximă, atunci, de exemplu, GRE. Dar nu uitați că plătim pentru funcționalitate suplimentară cu un cap mare.
Puteți vedea traducerea unei recenzii bune a interfețelor tunelului
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-ipsec0
Acum puteți adăuga rute pentru rețele în spatele mikrotik
sudo ip route add A.B.C.D/Prefix via 192.168.255.2
Pentru ca interfața și rutele noastre să fie ridicate după o repornire, trebuie să descriem interfața în /etc/network/interfaces și să adăugăm rute acolo în post-up sau să scriem totul într-un singur fișier, de exemplu, /etc/ ipip-ipsec0.conf și trageți-l prin post-up, nu uitați de proprietarul fișierului, drepturi și faceți-l 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.2
Pe Mikrotik:
Secțiunea „Interfețe”, adăugați o nouă interfață „Tunelul IP”:
Fila „Tunel IP” - „General”
Parametru
Valoare
Nume si Prenume
La discreția dvs. (denumită în continuare IPIP-IPsec0)
MTU
1480 (dacă nu este specificat, mikrotik începe să taie mtu la 68)
Adresă locală
192.168.0.2
Adresă de la distanță
192.168.0.1
Secretul IPsec
Dezactivați câmpul (altfel va fi creat un nou Peer)
Ține în viață
Dezactivați câmpul (în caz contrar, interfața se va opri constant, deoarece mikrotika are propriul format pentru aceste pachete și nu funcționează cu Linux)
DSCP
moşteni
Nu fragmentați
Nu.
Clamp TCP MSS
adevărat
Permite calea rapidă
adevărat
Secțiunea „IP” - „Adrese”, adăugați adresa:
Parametru
Valoare
Adresă
192.168.0.2/30
interfaţă
IPIP-IPsec0
Acum puteți adăuga rute în rețea în spatele unei mașini Linux; atunci când adăugați o rută, gateway-ul va fi interfața noastră IPIP-IPsec0.
PS
Deoarece serverul nostru Linux este tranzitiv, este logic să setați parametrul Clamp TCP MSS pentru interfețele ipip pe acesta:
creați 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
Am nginx care rulează în rețea în spatele mikrotik (ip 10.10.10.1), îl fac accesibil de pe Internet, îl adaugă la /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
Nu uitați să adăugați permisiunile corespunzătoare la iptables dacă aveți filtre de pachete activate.
Fiți sănătoși!
Sursa: www.habr.com