Tunel IPIP IPsec VPN midis një makine Linux dhe Mikrotik pas NAT-it të ofruesit

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 nga ofruesi ë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ë artikulli i vvpoloskin.

Instalojmë paketat e nevojshme:

sudo install racoon ipsec-tools

Konfigurojmë racoon, ai në kushte do të veprojë si server ipsec. Duke qenë se mikrotik në modin kryesor nuk mund të transferojë një identifikues shtesë të klientit, dhe adresa IP e jashtme përmes së cilës ai lidhet me Linux është dinamike, nuk do të jetë e mundur të përdorim çelësin e parapërcaktuar (autorizimin me fjalëkalim), pasi fjala kalim duhet të përputhet me adresën IP të hostit që lidhet ose me identifikuesin.

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

Demon racoon përdor çelësa në format RSA, ndërsa mikrotik në format PEM. Nëse gjeneroni çelësa me utilitarin plainrsa-gen që vjen me racoon, atëherë nuk do të mund të konvertoni çelësin publik për Mikrotik në format PEM me ndihmën e tij — ai konverton vetëm në një drejtim: PEM në RSA. Çelësi plainrsa-gen i gjeneruar nuk mund të lexohet nga openssl ose ssh-keygen, kështu që as me ndihmën e tyre nuk do të mund të bëni konvertimin.

Ne do të gjenerojmë një çelës PEM me ndihmën e openssl dhe pastaj 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ë folderin: /etc/racoon/certs/server. Mos harro të vendosësh pronar përdoruesin nën të cilin ekzekutohet demon racoon (zakonisht root), të drejtat 600.

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

Do të ngarkohet çelësi server-name.pub.pem në mikrotik: Menyja «Files» - «Upload».

Hapim seksionin «IP» - «IP sec» - skedën «Keys». Tani gjenerojmë çelësa — butoni «Generate Key», pastaj eksportojmë çelësin publik të mikrotik «Export Pub. Key», mund ta shkarkohet nga seksioni «Files», me klikim të djathtë në skedën — «Download».

Importojmë çelësin publik të racoon, «Import», në listën e rënë «File name» kërkojmë 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 të vendoset në folderin /etc/racoon/certs pa harruar pronarin dhe të drejtat.

Konfigarimi i racoon me komente: /etc/racoon/racoon.conf

log info; # Niveli i regjistrimit, përdori Debug ose Debug2 gjatë depurimit.

listen {

    isakmp 1.1.1.1 [500]; # Adresa dhe porta ku do të dëgjojë demon.
    isakmp_natt 1.1.1.1 [4500]; # Adresa dhe porta ku do të dëgjojë demon për klientët pas NAT.
    strict_address; # Kryeni kontrolle të detyrueshme për lidhjen me IP-të e përmendura më sipër.
}

path certificate "/etc/racoon/certs"; # Rruga deri në dosjen me certifikatat.

remote anonymous { # Seksioni që përcakton parametrat për punën e demonit me ISAKMP dhe negociimin e modëve me hostet që lidhen. Pasiqë IP-ja nga e cila lidhet Mikrotik është dinamike, përdorim anonymous, i cili lejon lidhje nga çdo adresë. Nëse IP-të e hosteve janë statike, atëherë mund të përcaktohen një adresë dhe port specifike.

    passive on; # Përcakton modin "server" të punës së demonit, ai nuk do të përpiqet të iniciatojë lidhje.
    nat_traversal on; # Aktivizon përdorimin e modit NAT-T për klientët, nëse ata janë pas NAT.
    exchange_mode main; # Mënyra e shkëmbimit të parametrave të lidhjes, në këtë rast --- negociimi.
    my_identifier address 1.1.1.1; # Identifikoni hostin tonë linux sipas adresës së tij IP.
    certificate_type plain_rsa "server/server-name.priv.key"; # Çelësi privat i serverit.
    peers_certfile plain_rsa "mikrotik.pub.key"; # Çelësi publik i Mikrotik.

    proposal_check claim; # Mënyra e negociimit të parametrave të tunelit ISAKMP. Racoon do të përdorë vlerat e hostit që lidhet (inisiatori) për kohëzgjatjen e sesionit dhe gjatë e çelësit, nëse kohëzgjatja e sesionit është më e gjatë, ose gjatë e çelësit është më e shkurtër se ajo e iniciatorit. Nëse kohëzgjatja e sesionit është më e shkurtër se ajo e iniciatorit, racoon përdor vlerën e vet për kohëzgjatjen e sesionit dhe do të dërgojë një mesazh RESPONDER-LIFETIME.
    proposal { # Parametrat e tunelit ISAKMP.

        encryption_algorithm aes; # Metoda e enkriptimit të tunelit ISAKMP.
        hash_algorithm sha512; # Algoritmi i hashing-ut, i përdorur për tunelin ISAKMP.
        authentication_method rsasig; # Mënyra e autentikimit për tunelin ISAKMP - me çelësa RSA.
        dh_group modp2048; # Gjatësia e çelësit për algorithmin e Diffie-Hellman gjatë negociimit të tunelit ISAKMP.
        lifetime time 86400 sec; # Kohëzgjatja e sesionit.
    }

    generate_policy on; # Krijimi automatik i tunelve ESP nga kërkesa e ardhur nga hosti që lidhet.
}

sainfo anonymous { # Parametrat e tunelve ESP, anonymous - parametrat e përmendur do të përdoren si parametra të paracaktuar. Për klientë të ndryshëm, porte, protokolle mund të përcaktohen parametra të ndryshëm, përputhja ndodh sipas adresave IP, porteve, protokolleve.

    pfs_group modp2048; # Gjatësia e çelësit për algorithmin e Diffie-Hellman për tunelin ESP.
    lifetime time 28800 sec; # Kohëzgjatja e tunelve ESP.
    encryption_algorithm aes; # Metoda e enkriptimit të tunelve ESP.
    authentication_algorithm hmac_sha512; # Algoritmi i hashing-ut, i përdorur për autentikimin e tunelve ESP.
    compression_algorithm deflate; # Shtypni të dhënat e transmetuara, algoritmi i kompresionit ofrohet vetëm një.
}

Konfigurimi i mikrotik

Kthehemi në seksionin "IP" — "IPsec"

Ekrani "Profiles"
Parametri
Vlera

Emri
Sipasoni juaj (përveç default)

Algoritmi i Hash
sha512

Algoritmi i Kriptimit
aes-128

Grupi DH
modp2048

Proposhal_check
ansi

Kohëzgjatja
1d 00:00:00

Shkalla e NAT Traversal
e vërtetë (vendosim shenjën)

DPD
120

Maksimumi i dështimit DPD
5

Ekrani "Peers"
Parametri
Vlera

Emri
Sipasoni juaj (më vonë MyPeer)

Adresa
1.1.1.1 (IP i makinës linux)

Adresa Lokale
10.0.0.2 (IP i ndërfaqes WAN të mikrotik)

Profili
default

Mënyra e Këmbimit
main

Pasiv
false

Dërgo INITIAL_CONTACT
true

Ekrani "Proposal"
Parametri
Vlera

Emri
Sipasoni juaj (më vonë MyPeerProposal)

Algoritmet e Autorizimit
sha512

Algoritmet e Kriptimit
aes-128-cbc

Kohëzgjatja
08:00:00

Grupi PFS
modp2048

Ekrani "Identities"
Parametri
Vlera

Peer
MyPeer

Metoda e Autorizimit
rsa key

Çelësi
mikrotik.privet.key

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

Grupi i Shabloneve të Politikave
default

Notrack Chain
boş

Lloji im i ID
auto

Lloji i ID të Largët
auto

Krahaso me
ID e largët

Konfigurimi i Modës
boş

Gjinjë Politikën
jo

Ekrani "Policies — General"
Parametri
Vlera

Peer
MyPeer

Tuneli
true

Adresa Src.
192.168.0.0/30

Adresa Dest.
192.168.0.0/30

Protokolli
255 (të gjitha)

Shablloni
false

Ekrani "Policies — Action"
Parametri
Vlera

Veprimi
encrypt

Niveli
kërkohet

Protocollet IPsec
esp

Propozimi
MyPeerProposal

Me siguri, ju si dhe unë, keni vendosur snat/masquerade në ndërfaqen WAN, ky rregull duhet të korrigjohet në mënyrë që paketat e daljes ipsec të kalojnë përmes tunelit tonë:
Shkoni në seksionin "IP" — "Firewall".
Ekrani "NAT", hapni rregullin tonë snat/masquerade.

Ekrani "Advanced"
Parametri
Vlera

Politika IPsec
jashtë: asnjë

Rinstaloni demonin racoon

sudo systemctl restart racoon

Nëse racoon nuk fillon pas rinstalimit, atëherë ka një gabim në konfigurim, në syslog racoon raporton informacion mbi numrin e rreshtit ku është gjetur gabimi.

Demon racoon ndahet përpara ngarkimit të ndërfaqeve rrjetësore, dhe ne kemi specificuar një opsion të ngushtë për adresat në seksionin listen, është e nevojshme të shtoni në skedarin e njësisë systemd të racoon
/lib/systemd/system/racoon.service, в секцию [Unit], строку After=network.target.

Tani tunelat 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 tunelat nuk ngrihen, shikoni syslog, ose journalctl -u racoon.

Tani është e nevojshme të konfigurohen ndërfaqet L3, për të mundësuar ruterimin e trafikëve. Ka opsione të ndryshme, do të përdorim IPIP, pasi kjo mbështetet nga mikrotik; do të kisha përdorur vti, por, fatkeqësisht, mikrotik ende nuk e ka realizuar. Ai ndryshon nga IPIP sepse mund të inkapsulojë edhe multicast dhe të vendosë etiketa (fwmark) në paketat, të cilat mund të filtrohen në iptables dhe iproute2 (ruterimi i bazuar në politika). Nëse nevojitet maksimal funksionalitet — atëherë, për shembull, GRE. Por, nuk duhet harruar se për funksionalitetin shtesë paguajmë me një overhead më të madh.

Përkthimi i një përmbledhje të mirë të ndërfaqeve të tunelit mund të shihet 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ët për rrjetet pas mikrotik

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

Për të parë se ndërfaqja jonë dhe rrugët ngrihen pas rinisjes, duhet të përshkruajmë ndërfaqen në /etc/network/interfaces dhe atje të shtojmë rrugët në post-up, ose të gjitha t'i shkruajmë në një skedar, për shembull, /etc/ipip-ipsec0.conf dhe ta ftojmë atë përmes post-up; mos harroni për pronarin e skedarit, të drejtat dhe ta bëni atë ekzekutues.

Më poshtë është 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:

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

Tabs "IP tunnel" — "General"
Parametri
Vlera

Emri
Siç dëshironi (më pas IPIP-IPsec0)

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

Adresa Lokale
192.168.0.2

Adresë e Largët
192.168.0.1

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

Keepalive
Çaktivizoni fushën (ndryshe ndërfaqja do të jetë vazhdimisht e fikur, pasi mikrotik ka një format të tij për këto paketa dhe nuk funksionon me linux)

DSCP
trashëgoj

Mos e Fragmente
jo

Clamp TCP MSS
true

Lejo Rrugën e Shpejtë
true

Seksioni "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 pas makinës linux, kur shtoni rrugën, gateway do të jetë ndërfaqja jonë IPIP-IPsec0.

PS

Duke qenë se serveri ynë linux është transit, ka kuptim të vendoset parametri 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 pas mikrotik, unë kam nginx (ip 10.10.10.1), ta bëjmë të arritshëm nga interneti, shtoni 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 caktim 192.168.0.1 për paketat me adresë burimi 10.10.10.1 dhe portet 80, 443.

# Gjithashtu në linux punon serveri OpenVPN 172.16.0.1/24, për klientët që përdorin lidhjen me të si derë, u japim qasje 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 paketeve.

Qofshi të shëndoshë!

Burimi: habr.com

Blini hosting të besueshëm për faqe interneti me mbrojtje nga DDoS, serverë VPS VDS 🔥 Blini hosting të besueshëm për faqe interneti me mbrojtje nga DDoS, serverë VPS VDS | ProHoster