IPIP IPsec VPN tuneli midis makine Linux dhe Mikrotik në NAT-in e provajderit

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

  • Eth0 1.1.1.1/32 IP i jashtëm
  • ipip-ipsec0 192.168.0.1/30 do të jetë tuneli ynë

Miktoik: CCR 1009, RouterOS 6.46.5

  • Eth0 10.0.0.2/30 IP i brendshëm nga ofruesi. IP i jashtëm NAT i ofruesit është dinamik.
  • ipip-ipsec0 192.168.0.2/30 do të jetë tuneli ynë

Tunelin IPsec në makinën Linux do ta ngrisim me racoon. Nuk do të përshkruaj detajet, ka një të mirë artikull u vvpoloskin.

Instalojmë paketat e nevojshme:

sudo install racoon ipsec-tools

Konfiguroni racoon, ai do të veprojë në rolin e serverit ipsec. Duke qenë se mikrotik në modin kryesor nuk mund të transmetojë identifikuesin shtesë të klientit, dhe adresa IP e jashtme përmes të cilës lidhet me Linux është dinamike, nuk do të jetë e mundur të përdoret çelësi i ndarë (autorizimi me fjalëkalim), pasi fjalëkalimi duhet të përputhet ose me adresën IP të hostit që lidhet, ose me identifikuesin.

Do të përdorim autorizimin me çelësa RSA.

Demoni racoon përdor çelësa në formatin RSA, ndërsa mikrotik në formatin PEM. Nëse gjeneroni çelësat me utilitarin plainrsa-gen që vjen me racoon, atëherë nuk do të jetë e mundur të konvertohet çelësi publik për Mikrotik në formatin PEM me ndihmën e saj - ajo konverton vetëm në një drejtim: PEM në RSA. Çelësi i gjeneruar nga plainrsa-gen nuk mund të lexohej as nga openssl, as nga ssh-keygen, kështu që me ndihmën e tyre gjithashtu nuk do të jetë e mundur të kryhet konvertimi.

Ne do të gjenerojmë çelësin PEM me ndihmën e openssl dhe më pas do ta konvertojmë për racoon me ndihmën e 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

Çelësat e marrë do t'i vendosim në dosjen: /etc/racoon/certs/server. Mos harroni të vendosni pronarin e përdoruesit, nën emrin e të cilit starton demoni racoon (zakonisht root), me të drejtat 600.

Do ta përshkruaj konfigurimin e mikrotik gjatë lidhjes përmes WinBox.

Çelësi server-name.pub.pem do ta ngarkojmë në mikrotik: Menu «Files» — «Upload».

Hapim seksionin «IP» — «IP sec» — skedarin «Keys». Tani gjenerojmë çelësat — butoni «Generate Key», më pas eksportojmë çelësin publik të mikrotik «Expor Pub. Key», mund ta shkarkoni nga seksioni «Files», duke klikuar me të djathtën mbi skedarin — «Download».

Importojmë çelësin publik racoon, «Import», në menynë e rënies të fushës «File name» kërkojmë çelësin server-name.pub.pem që e ngarkuam më parë.

Çelësi publik i mikrotik duhet të konvertohet

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

dhe ta vendosim në dosjen /etc/racoon/certs pa harruar pronarin dhe të drejtat.

Konfig limit racoon me komente: /etc/racoon/racoon.conf

informacion log; # Nivel de registro; utilizamos Debug o Debug2 durante la depuración.

listen {

    isakmp 1.1.1.1 [500]; # Dirección y puerto en el que escuchará el demonio.
    isakmp_natt 1.1.1.1 [4500]; # Dirección y puerto en el que escuchará el demonio para clientes detrás de NAT.
    strict_address; # Realiza una verificación obligatoria de enlace con las IP especificadas anteriormente.
}

path certificate "/etc/racoon/certs"; # Ruta a la carpeta con certificados.

remote anonymous { # Sección que define los parámetros para el funcionamiento del demonio con ISAKMP y la negociación de modos con los hosts conectados. Puesto que la IP desde la que se conecta Mikrotik es dinámica, utilizamos anonymous, lo que permite la conexión desde cualquier dirección. Si las IP de los hosts son estáticas, se puede especificar una dirección y puerto concretos.

    passive on; # Establece el modo "servidor" del demonio, no intentará iniciar conexiones.
    nat_traversal on; # Activa el uso del modo NAT-T para clientes, si están detrás de NAT. 
    exchange_mode main; # Modo de intercambio de parámetros de conexión, en este caso --- negociación.
    my_identifier address 1.1.1.1; # Identificamos nuestro host linux por su dirección IP.
    certificate_type plain_rsa "server/server-name.priv.key"; # Clave privada del servidor.
    peers_certfile plain_rsa "mikrotik.pub.key"; # Clave pública de Mikrotik.

    proposal_check claim; # Modo de negociación de parámetros del túnel ISAKMP. Racoon utilizará los valores del host conectado (iniciador) para la duración de la sesión y la longitud de la clave, si su duración de la sesión es mayor o su longitud de clave es más corta que la del iniciador. Si la duración de la sesión es más corta que la del iniciador, racoon usará su propio valor de duración de la sesión y enviará el mensaje RESPONDER-LIFETIME.
    proposal { # Parámetros del túnel ISAKMP.

        encryption_algorithm aes; # Método de encriptación del túnel ISAKMP.
        hash_algorithm sha512; # Algoritmo de hash utilizado para el túnel ISAKMP.
        authentication_method rsasig; # Modo de autenticación para el túnel ISAKMP - mediante clave RSA.
        dh_group modp2048; # Longitud de clave para el algoritmo Diffie-Hellman durante la negociación del túnel ISAKMP.
        lifetime time 86400 sec; # Tiempo de duración de la sesión.
    }

    generate_policy on; # Creación automática de túneles ESP a partir de la solicitud recibida del host conectado.
}

sainfo anonymous { # Parámetros de los túneles ESP, anonymous - los parámetros especificados se usarán como predeterminados. Para diferentes clientes, puertos, protocolos se pueden especificar diferentes parámetros; la coincidencia se realiza por direcciones IP, puertos, y protocolos.

    pfs_group modp2048; # Longitud de clave para el algoritmo Diffie-Hellman para los túneles ESP.
    lifetime time 28800 sec; # Duración de los túneles ESP.
    encryption_algorithm aes; # Método de encriptación de los túneles ESP.
    authentication_algorithm hmac_sha512; # Algoritmo de hash utilizado para la autenticación de los túneles ESP.
    compression_algorithm deflate; # Comprimir los datos transmitidos, solo se sugiere un algoritmo de compresión.
}

Konfigurimi mikrotik

Kthehemi në seksionin "IP" — "IPsec"

Skeda "Profiles"
Parametri
Vlera

Emri
Sipër nesh (në mënyrë që të default)

Hash Algorithm
sha512

Algoritmi i Enkriptimit
aes-128

DH-Group
modp2048

Proposhal_check
claim

Lifetime
1d 00:00:00

Kalimi NAT
e vërtetë (vë në shenjë)

DPD
120

DPD Maximum failure
5

Skeda "Peers"
Parametri
Vlera

Emri
Sipër nesh (më pas MyPeer)

Adresa
1.1.1.1 (IP i makinës linux)

Adresa Lokale
10.0.0.2 (IP e ndërfaqes WAN të mikrotikut)

Profile
default

Exchange Mode
main

Passive
false

Dërgoni INITIAL_CONTACT
e vërtetë

Skeda "Proposal"
Parametri
Vlera

Emri
Sipër nesh (më pas MyPeerProposal)

Algoritmet e Autorizimit
sha512

Algoritmet e Enkriptimit
aes-128-cbc

Lifetime
08:00:00

PFS Group
modp2048

Skeda "Identities"
Parametri
Vlera

Peer
MyPeer

Metoda e Autorizimit
rsa key

Key
mikrotik.privet.key

Çelësi i Largët
server-name.pub.pem

Grupi i Shabllonit të Politikave
default

Notrack Chain
e zbrazët

Lloji im i ID
auto

Lloji i ID të Largët
auto

Match By
remote id

Konfigurimi i Modit
e zbrazët

Krijoni Politikën
no

Skeda "Policies — General"
Parametri
Vlera

Peer
MyPeer

Tuneli
e vërtetë

Src. Adresa
192.168.0.0/30

Dest. Adresa
192.168.0.0/30

Protokolli
255 (të gjitha)

Shabllon
false

Skeda "Policies — Action"
Parametri
Vlera

Veprimi
encrypt

Level
requier

Protocollet IPsec
esp

Propozimi
MyPeerProposal

Me siguri keni, si unë, në ndërfaqen WAN të vendosur snat/masquerade, ky rregull duhet të korrigjohet për të siguruar se paketat e daljes ipsec shkojnë në tunelin tonë:
Kthehemi në seksionin "IP" — "Firewall".
Skeda "NAT", hapim rregullin tonë snat/masquerade.

Skeda "Advanced"
Parametri
Vlera

Politika IPsec
out: none

Rifilloni demonin racoon

sudo systemctl restart racoon

Nëse racoon nuk fillon pas rinisjes, atëherë në konfigurim ka një gabim, në syslog racoon jep informacione mbi numrin e linjës ku është gjetur gabimi.

Demonin racoon ngrihet më herët nga ngarkimi i OS-së, para se të ngrihen ndërfaqet rrjetërore, dhe ne kemi caktuar opsionin strict_address në seksionin listen, është e nevojshme të shtojmë në skedarin e njësisë systemd të racoon
/lib/systemd/system/racoon.service, в секцию [Unit], строку After=network.target.

Tani tunelët tanë ipsec duhet të ngrihen, shikoni daljen:

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 përmes të cilit lidhet 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 përmes të cilit lidhet 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 përmes të cilit lidhet mikrotik" dst 1.1.1.1
        proto esp reqid 0 mode tunnel

Nëse tunelët nuk ngrihen, shikoni syslog, ose journalctl -u racoon.

Tani, duhet të konfigurohen ndërfaqet L3 për të mundësuar ruterimin e trafikut. Ka opsione të ndryshme, ne do të përdorim IPIP, pasi e mbështet mikrotik, do të përdorja vti, por fatkeqësisht, ende nuk është implementuar në mikrotik. Ndryshe nga IPIP, mund të inkapsulonte gjithashtu multicast dhe të vendoste etiketat (fwmark) në paketat, të cilat mund të filtroren në iptables dhe iproute2 (ruterim me bazë politike). Nëse kërkohet funksionalitet maksimal, atëherë, për shembull, GRE. Por mos harroni se për funksionalitetin shtesë paguajmë një overhead më të madh.

Një përkthim i një përmbledhje të mirë të ndërfaqeve të tunelit mund të shikohet këtu.

Në 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

Tani mund të shtoni rrugë për rrjetet përtej mikrotik

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

Për të siguruar që ndërfaqja jonë dhe rrugët ngrihen pas rinisjes, duhet të përshkruani ndërfaqen në /etc/network/interfaces dhe atje gjithashtu në post-up të shtoni rrugët, ose ta shkruani gjithçka në një skedar, për shembull, /etc/ipip-ipsec0.conf dhe ta thërrisni atë përmes post-up, mos harroni për pronarin e skedarit, të drejtat dhe ta bëni executable.

Në vazhdim një shembull skedari

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

Në Mikrotik:

Sekcioni "Interfaces", shtoni një ndërfaqe të re "IP tunnel":

Tabi "IP tunnel" - "General"
Parametri
Vlera

Emri
Sipas zgjedhjes tuaj (më pas IPIP-IPsec0)

MTU
1480 (nëse nuk e tregoni, atëherë mikrotik fillon ta presë mtu deri në 68)

Adresa Lokale
192.168.0.2

Adresa Remote
192.168.0.1

Sekreti Ipsec
Deaktivizoni fushën (ndryshe do të krijohet një Peer i ri)

Keepalive
Deaktivizoni fushën (ndryshe ndërfaqja do të fiket gjithmonë, pasi mikrotik ka një format të tij të këtyre paketave dhe nuk funksionin me linux)

DSCP
inherit

Mos Fragmento
no

Clamp TCP MSS
e vërtetë

Lejo Fast Path
e vërtetë

Sekcioni "IP" - "Addresses", shtoni adresën:

Parametri
Vlera

Adresa
192.168.0.2/30

Ndërfaqja
IPIP-IPsec0

Tani mund të shtoni rrugët në rrjetet përtej makinës linux, kur shtoni rrugën, gateway do të jetë ndërfaqja jonë IPIP-IPsec0.

PS

Duke qenë se serveri ynë linux është tranzit, ka kuptim të caktoni параметrin Clamp TCP MSS për ndërfaqet ipip:

krijoni skedarin /etc/iptables.conf me përmbajtjen e mëposhtme:

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

dhe në /etc/network/interfaces
post-up iptables-restore < /etc/iptables.conf

Në rrjetin përtej mikrotik kam nginx (ip 10.10.10.1), ta bëjmë të aksesueshëm nga interneti, do të shtojmë 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
#Në mikrotik, në tabelën mangle, duhet të shtoni një rregull route me qëllim 192.168.0.1 për paketat me adresë burimi 10.10.10.1 dhe portet 80, 443.

# Po ashtu, në linux punon një server OpenVPN 172.16.0.1/24, për klientët që përdorin lidhjen me të si portë, i japim akses në internet
-A POSTROUTING -s 172.16.0.0/24 -o eth0 -j SNAT --to-source 1.1.1.1
COMMIT 

Mos harroni të shtoni lejet përkatëse në iptables, nëse keni aktivizuar filtrat e paketave.

Shëndet të mirë!

Burimi: habr.com

Bleni hostim të besueshëm për faqe me mbrojtje nga DDoS, serverë VPS VDS 🔥 Bleni hostim të besueshëm për faqe me mbrojtje nga DDoS, serverë VPS VDS | ProHoster