IPIP IPsec VPN tunel medzi Linuxom a Mikrotikom za poskytovateľom NAT

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

  • Eth0 1.1.1.1/32 externá IP
  • iip-ipsec0 192.168.0.1/30 bude náš tunel

Miktoik: CCR 1009, RouterOS 6.46.5

  • Eth0 10.0.0.2/30 interná IP od poskytovateľa. Externá IP adresa NAT poskytovateľa je dynamická.
  • iip-ipsec0 192.168.0.2/30 bude náš tunel

Vytvoríme IPsec tunel na linuxovom stroji pomocou racoon. Nebudem popisovať detaily, je tam jeden dobrý článok у vvpoloskin.

Nainštalujte potrebné balíčky:

sudo install racoon ipsec-tools

Nakonfigurujeme racoon, bude podmienečne fungovať ako server ipsec. Keďže mikrotik v hlavnom režime nemôže prenášať ďalší identifikátor klienta a externá IP adresa, cez ktorú sa pripája k Linuxu, je dynamická, použitie predzdieľaného kľúča (autorizácia heslom) nebude fungovať, pretože heslo sa musí zhodovať buď s IP adresou pripájajúceho sa hostiteľa alebo s identifikátorom.

Využijeme autorizáciu pomocou RSA kľúčov.

Démon racoon používa kľúče vo formáte RSA a mikrotik používa formát PEM. Ak vygenerujete kľúče pomocou utility plainrsa-gen, ktorá sa dodáva s racoon, potom s jej pomocou nebudete môcť previesť verejný kľúč pre Mikrotiku do formátu PEM – konvertuje sa iba jedným smerom: PEM na RSA. Openssl ani ssh-keygen nedokázali prečítať vygenerovaný kľúč pomocou plainrsa-gen, takže konverziu nie je možné vykonať ani pomocou nich.

Vygenerujeme kľúč PEM pomocou openssl a potom ho skonvertujeme na racoon pomocou 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

Prijaté kľúče vložíme do priečinka: /etc/racoon/certs/server. Nezabudnite nastaviť vlastníka používateľa, pod menom ktorého sa spúšťa démon racoon (zvyčajne root), na 600 oprávnení.

Popíšem nastavenie mikrotiku pri pripojení cez WinBox.

Nahrajte kľúč server-name.pub.pem do mikrotiku: Menu „Súbory“ - „Nahrať“.

Otvorte sekciu „IP“ - „IP sec“ - karta „Kľúče“. Teraz vygenerujeme kľúče – tlačidlo „Generovať kľúč“, následne exportujeme verejný kľúč mikrotika „Expor Pub. Key", môžete si ho stiahnuť zo sekcie "Súbory", kliknite pravým tlačidlom myši na súbor - "Stiahnuť".

Importujeme verejný kľúč racoon, „Import“, v rozbaľovacom zozname poľa „File name“ hľadáme server-name.pub.pem, ktorý sme si stiahli skôr.

Verejný kľúč mikrotiku je potrebné skonvertovať

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

a vložte ho do priečinka /etc/racoon/certs, pričom nezabudnite na vlastníka a práva.

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

konfigurácia mikrotiku

Vráťte sa do sekcie "IP" - "IPsec"

Karta "Profily".
Parameter
Hodnota

Meno
Podľa vlastného uváženia (predvolene)

Algoritmus Hash
sha512

Šifrovací algoritmus
aes-128

DH-Group
modp2048

Proposhal_check
nárok

Život
1d 00:00:00

NAT Traversal
pravda (začiarknite políčko)

DPD
120

DPD Maximálna porucha
5

Karta Peers
Parameter
Hodnota

Meno
Podľa vášho uváženia (ďalej len MyPeer)

adresa
1.1.1.1 (počítače IP Linux)

Miestna adresa
10.0.0.2 (IP WAN rozhranie mikrotik)

Profil
štandardné

Režim výmeny
hlavné

Pasívne
nepravdivý

Odoslať INITIAL_CONTACT
pravdivý

Karta Návrh
Parameter
Hodnota

Meno
Podľa vášho uváženia (ďalej len MyPeerProposal)

Auth. Algoritmy
sha512

Encr. Algoritmy
aes-128-cbc

Život
08:00:00

Skupina PFS
modp2048

Karta „Identity“.
Parameter
Hodnota

hruška
MyPeer

Atuh. Metóda
rsa kľúč

Kľúč
mikrotik.privet.key

Diaľkový kľúč
názov-servera.pub.pem

Skupina šablón politiky
štandardné

Notrack reťazec
prázdny

Typ môjho ID
auto

Vzdialený typ ID
auto

Zápas podľa
vzdialené id

Konfigurácia režimu
prázdny

Generovať politiku
žiadny

Karta „Pravidlá – Všeobecné“
Parameter
Hodnota

hruška
MyPeer

Tunel
pravdivý

Src. Adresa
192.168.0.0/30

Dest. Adresa
192.168.0.0/30

Protokol
255 (všetky)

šablóna
nepravdivý

Karta "Pravidlá - Akcia"
Parameter
Hodnota

akčná
šifrovanie

Úroveň
vyžadovať

Protokoly IPsec
esp

Návrh
MyPeerProposal

S najväčšou pravdepodobnosťou, ako ja, máte na svojom rozhraní WAN nakonfigurované snat/masquerade; toto pravidlo je potrebné upraviť tak, aby odchádzajúce pakety ipsec smerovali do nášho tunela:
Prejdite do sekcie "IP" - "Firewall".
Na karte „NAT“ otvorte naše pravidlo snat/maškaráda.

Karta Rozšírené
Parameter
Hodnota

Politika IPsec
von: žiadny

Reštartovanie démona mývala

sudo systemctl restart racoon

Ak sa racoon po reštarte nespustí, potom je chyba v konfigurácii, v syslog zobrazuje racoon informáciu o čísle linky, v ktorej bola chyba zistená.

Keď sa operačný systém spustí, démon racoon sa spustí pred spustením sieťových rozhraní a v sekcii počúvania sme zadali možnosť strict_address; musíte pridať jednotku racoon do súboru systemd
/lib/systemd/system/racoon.service, v sekcii [Unit] riadok After=network.target.

Teraz by mali byť naše tunely ipsec zapnuté, pozrite sa na výstup:

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

Ak tunely nie sú zapnuté, pozrite sa na syslog alebo journalctl -u racoon.

Teraz musíte nakonfigurovať rozhrania L3 tak, aby bolo možné smerovať prevádzku. Su rozne moznosti, my pouzijeme IPIP, kedze to podporuje mikrotik, ja by som pouzil vti, ale bohuzial v mikrotiku to zatial nebolo implementovane. Od IPIP sa líši tým, že môže dodatočne zapuzdrovať multicast a vkladať fwmarky na pakety, pomocou ktorých ich možno filtrovať v iptables a iproute2 (smerovanie založené na politike). Ak potrebujete maximálnu funkčnosť, potom napríklad GRE. Nezabudnite však, že za ďalšie funkcie platíme veľkou režijnou výškou.

Môžete vidieť preklad dobrého prehľadu tunelových rozhraní tu.

V systéme 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

Teraz môžete pridať trasy pre siete za mikrotik

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

Aby sa naše rozhranie a trasy po reštarte zvýšili, musíme rozhranie opísať v /etc/network/interfaces a pridať tam trasy v post-up, alebo zapísať všetko do jedného súboru, napríklad /etc/ ipip-ipsec0.conf a pretiahnite ho cez post-up, nezabudnite na vlastníka súboru, práva a urobte ho spustiteľným.

Nižšie je uvedený príklad súboru

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

Na Mikrotiku:

V sekcii „Rozhrania“ pridajte nové rozhranie „IP tunel“:

Karta „IP tunel“ - „Všeobecné“
Parameter
Hodnota

Meno
Podľa vášho uváženia (ďalej len IPIP-IPsec0)

MTU
1480 (ak nie je uvedené, mikrotik začne rezať mtu na 68)

Miestna adresa
192.168.0.2

Vzdialená adresa
192.168.0.1

Tajné IPsec
Deaktivujte pole (inak sa vytvorí nový Peer)

udržať nažive
Deaktivujte pole (inak sa bude rozhranie neustále vypínať, keďže mikrotika má pre tieto balíčky vlastný formát a nefunguje s Linuxom)

DSCP
zdediť

Nefragmentovať
žiadny

Svorka TCP MSS
pravdivý

Povoliť rýchlu cestu
pravdivý

V časti „IP“ - „Adresy“ pridajte adresu:

Parameter
Hodnota

adresa
192.168.0.2/30

Rozhranie
IPIP-IPsec0

Teraz môžete pridávať trasy do siete za počítač so systémom Linux; pri pridávaní trasy bude bránou naše rozhranie IPIP-IPsec0.

PS

Keďže náš server Linux je tranzitívny, má zmysel nastaviť na ňom parameter Clamp TCP MSS pre rozhrania ipip:

vytvorte súbor /etc/iptables.conf s nasledujúcim obsahom:

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

a v /etc/network/interfaces
post-up iptables-restore < /etc/iptables.conf

Na sieti za mikrotikom mám spustený nginx (ip 10.10.10.1), sprístupnite ho z internetu, pridajte do /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 

Nezabudnite pridať príslušné povolenia k iptables, ak máte povolené filtre paketov.

Byť zdravý!

Zdroj: hab.com

Pridať komentár