IPIP IPsec VPN tunel midis makinës Linux dhe Mikrotik pas ofruesit NAT

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

  • Eth0 1.1.1.1/32 IP e jashtme
  • 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 e brendshme nga ofruesi. IP-ja e jashtme NAT e ofruesit është dinamike.
  • ipip-ipsec0 192.168.0.2/30 do të jetë tuneli ynë

Ne do të krijojmë një tunel IPsec në një makinë Linux duke përdorur racoon. Nuk do t'i përshkruaj detajet, ka një të mirë artikull у vvpoloskin.

Instaloni paketat e kërkuara:

sudo install racoon ipsec-tools

Ne konfigurojmë racoon, ai do të veprojë me kusht si një server ipsec. Meqenëse mikrotik në modalitetin kryesor nuk mund të transmetojë një identifikues shtesë të klientit dhe adresa IP e jashtme përmes së cilës lidhet me Linux është dinamike, përdorimi i një çelësi të parandarë (autorizimi i fjalëkalimit) nuk do të funksionojë, pasi fjalëkalimi duhet të përputhet ose me adresën IP të hosti lidhës, ose me identifikues.

Ne do të përdorim autorizimin duke përdorur çelësat RSA.

Daemon racoon përdor çelësat në formatin RSA, dhe mikrotik përdor formatin PEM. Nëse gjeneroni çelësa duke përdorur programin plainrsa-gen që vjen me racoon, atëherë nuk do të jeni në gjendje ta konvertoni çelësin publik për Mikrotika në formatin PEM me ndihmën e tij - ai konvertohet vetëm në një drejtim: PEM në RSA. As openssl dhe as ssh-keygen nuk mund të lexonin çelësin e gjeneruar nga plainrsa-gen, kështu që konvertimi nuk do të jetë i mundur as duke përdorur ato.

Ne do të gjenerojmë një çelës PEM duke përdorur openssl dhe më pas do ta konvertojmë atë për racoon duke përdorur 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

Ne do t'i vendosim çelësat e marrë në dosjen: /etc/racoon/certs/server. Mos harroni të caktoni pronarin e përdoruesit nën emrin e të cilit lëshohet daemon racoon (zakonisht root) në 600 leje.

Unë do të përshkruaj konfigurimin e mikrotik kur lidheni përmes WinBox.

Ngarko tastin server-name.pub.pem në mikrotik: Menyja “Files” - “Ngarko”.

Hapni seksionin "IP" - "IP sec" - skedën "Çelësat". Tani gjenerojmë çelësa - butonin "Generate Key", më pas eksportojmë çelësin publik mikrotika "Expor Pub. Key", mund ta shkarkoni nga seksioni "Skedarët", kliko me të djathtën në skedar - "Shkarko".

Ne importojmë çelësin publik racoon, "Import", në listën rënëse të fushës "Emri i skedarit" kërkojmë serverin-name.pub.pem që kemi shkarkuar më parë.

Çelësi publik mikrotik duhet të konvertohet

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

dhe vendoseni në dosjen /etc/racoon/certs, duke mos harruar pronarin dhe të drejtat.

konfigurimi i racoon me komente: /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; # Сжимать передаваемые данные, алгоритм сжатия предлагается только один.
}

konfigurimin mikrotik

Kthehu te seksioni "IP" - "IPsec"

Skeda "Profile".
Parametër
Vlerë

Emër
Sipas gjykimit tuaj (si parazgjedhje)

Algoritmi Hash
sha512

Algoritmi i kriptimit
aes-128

DH-Grupi
modp2048

Proposal_check
kërkesë

Jetë
1 00:00:00

Kalimi NAT
e vërtetë (kontrollo kutinë)

DPD
120

DPD Dështimi maksimal
5

Skeda e kolegëve
Parametër
Vlerë

Emër
Sipas gjykimit tuaj (në tekstin e mëtejmë, MyPeer)

Adresa
1.1.1.1 (Makinat IP Linux)

Adresa lokale
10.0.0.2 (ndërfaqja IP WAN mikrotik)

Profile
parazgjedhur

Mënyra e shkëmbimit
kryesor

Pasiv
i rremë

Dërgo INITIAL_CONTACT
i vërtetë

Skeda e propozimit
Parametër
Vlerë

Emër
Sipas gjykimit tuaj (në tekstin e mëtejmë referuar si MyPeerProposal)

Auth. Algoritmet
sha512

Encr. Algoritmet
aes-128-cbc

Jetë
08:00:00

Grupi PFS
modp2048

Skeda "Identitete".
Parametër
Vlerë

dardhë
MyPeer

Atuh. Metoda
çelësi rsa

Kyç
mikrotik.privet.çelës

Keyelësi i largët
server-emri.pub.pem

Grupi i shablloneve të politikave
parazgjedhur

Zinxhiri Notrack
është bosh

Lloji im ID
auto

Lloji i ID-së në distancë
auto

Ndeshje nga
ID e largët

Konfigurimi i modalitetit
është bosh

Krijo politikë
jo

Skeda "Politikat - e përgjithshme"
Parametër
Vlerë

dardhë
MyPeer

Tunel
i vërtetë

Src. Adresë
192.168.0.0/30

Dest. Adresë
192.168.0.0/30

Protokoll
255 (të gjitha)

Shabllon
i rremë

Skeda "Politikat - Veprim"
Parametër
Vlerë

veprim
encrypt

nivel
kërkojnë

Protokollet IPsec
esp

propozim
MyPeerProposal

Me shumë mundësi, si unë, ju keni konfiguruar snat/masquerade në ndërfaqen tuaj WAN; ky rregull duhet të rregullohet në mënyrë që paketat dalëse ipsec të shkojnë në tunelin tonë:
Shkoni te seksioni "IP" - "Firewall".
Skeda "NAT", hapni rregullin tonë snat/maskaradë.

Skeda e avancuar
Parametër
Vlerë

Politika IPsec
jashtë: asnjë

Rinisja e demonit të rakunit

sudo systemctl restart racoon

Nëse racoon nuk fillon me rinisjen, atëherë ka një gabim në konfigurim; në syslog, racoon shfaq informacione për numrin e linjës në të cilën u zbulua gabimi.

Kur niset sistemi operativ, daemon i racoon fillon përpara se ndërfaqet e rrjetit të shfaqen dhe ne specifikuam opsionin strikte_adresa në seksionin e dëgjimit; ju duhet të shtoni njësinë racoon në skedarin systemd
/lib/systemd/system/racoon.service, në seksionin [Unit], rreshti After=network.target.

Tani tunelet tona 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 через который подключается 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

Nëse tunelet nuk janë ngritur, shikoni syslog, ose journalctl -u racoon.

Tani ju duhet të konfiguroni ndërfaqet L3 në mënyrë që trafiku të mund të drejtohet. Ka opsione të ndryshme, ne do të përdorim IPIP, pasi mikrotik e mbështet atë, unë do të përdorja vti, por, për fat të keq, ende nuk është implementuar në mikrotik. Ai ndryshon nga IPIP në atë që mund të inkapsulojë gjithashtu multicast dhe të vendosë fwmarks në pako, me anë të të cilave ato mund të filtrohen në iptables dhe iproute2 (drejtimi i bazuar në politikë). Nëse keni nevojë për funksionalitet maksimal, atëherë, për shembull, GRE. Por mos harroni se ne paguajmë për funksionalitet shtesë me një kokë të madhe të sipërme.

Ju mund të shihni përkthimin e një rishikimi të mirë të ndërfaqeve të tunelit 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 pas mikrotik

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

Në mënyrë që ndërfaqja dhe rrugët tona të ngrihen pas një rindezjeje, duhet të përshkruajmë ndërfaqen në /etc/network/interfaces dhe të shtojmë rrugë atje në post-up, ose të shkruajmë gjithçka në një skedar, për shembull, /etc/ ipip-ipsec0.conf dhe tërhiqeni atë përmes post-up, mos harroni për pronarin e skedarit, të drejtat dhe bëjeni atë të ekzekutueshëm.

Më poshtë është një skedar shembull

#!/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 tunel":

Skeda "IP tuneli" - "Të përgjithshme"
Parametër
Vlerë

Emër
Sipas gjykimit tuaj (në tekstin e mëtejmë IPIP-IPsec0)

MTU
1480 (nëse nuk specifikohet, mikrotik fillon të shkurtojë mtu në 68)

Adresa lokale
192.168.0.2

Adresa në distancë
192.168.0.1

Sekret IPsec
Çaktivizo fushën (përndryshe do të krijohet një koleg i ri)

I mbajtur në jetë
Çaktivizoni fushën (përndryshe ndërfaqja do të fiket vazhdimisht, pasi mikrotika ka formatin e saj për këto paketa dhe nuk funksionon me Linux)

DSCP
trashëgoj

Mos e fragmento
jo

Mbërtheni TCP MSS
i vërtetë

Lejo rrugën e shpejtë
i vërtetë

Seksioni "IP" - "Adresat", shtoni adresën:

Parametër
Vlerë

Adresa
192.168.0.2/30

Interface
IPIP-IPsec0

Tani mund të shtoni rrugë në rrjet pas një makinerie Linux; kur shtoni një rrugë, porta do të jetë ndërfaqja jonë IPIP-IPsec0.

PS

Meqenëse serveri ynë Linux është kalimtar, ka kuptim të vendosni parametrin Clamp TCP MSS për ndërfaqet ipip në të:

krijoni një skedar /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

Unë kam nginx që funksionon në rrjetin prapa mikrotik (ip 10.10.10.1), e bëj të aksesueshëm nga interneti, shtoje 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
#На 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 

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

Jini të shëndetshëm!

Burimi: www.habr.com

Shto një koment