IPIP IPsec VPN tunel medzi Linux strojom a Mikrotik za NAT poskytovateľa

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

  • Eth0 1.1.1.1/32 externá IP
  • ipip-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 NAT poskytovateľa je dynamická.
  • ipip-ipsec0 192.168.0.2/30 bude náš tunel

IPsec tunel na Linuxovom stroji vybudujeme pomocou racoon. Nebudem popisovať podrobnosti, existuje dobrý článok u vvpoloskin.

Inštalujeme potrebné balíky:

sudo install racoon ipsec-tools

Konfigurujeme racoon, ktorý bude vo funkcii ipsec servera. Keďže mikrotik v hlavnom režime nemôže prenášať dodatočný identifikátor klienta, a externá IP adresa, cez ktorú sa pripojuje k Linuxu, je dynamická, nebude možné použiť preshared key (autorizáciu podľa hesla), keďže heslo musí zodpovedať buď IP adrese pripájajúceho hosťa, alebo identifikátorom.

Budeme používať autorizáciu podľa RSA kľúčov.

Démon racoon používa kľúče vo formáte RSA, a mikrotik — vo formáte PEM. Ak generujeme kľúče utilitou plainrsa-gen, ktorá ide spolu s racoon, nebude možné konvertovať verejný kľúč pre Mikrotik do formátu PEM, pretože konvertuje len jedným smerom: PEM na RSA. Vygenerovaný kľúč plainrsa-gen nemohli prečítať ani openssl, ani ssh-keygen, takže s ich pomocou tiež nebude možné vykonať konverziu.

Vygenerujeme PEM kľúč pomocou openssl, a následne ho konvertujeme pre 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

Získané kľúče umiestnime do priečinka: /etc/racoon/certs/server. Nezabudneme nastaviť vlastníka používateľa, pod ktorým je démon racoon spustený (zvyčajne root), práva 600.

Nastavenie mikrotik opíšem pri pripojení cez WinBox.

Kľúč server-name.pub.pem nahráme do mikrotiku: Menu „Files“ — „Upload“.

Otvárame časť „IP“ — „IP sec“ — záložka „Keys“. Teraz generujeme kľúče — tlačidlo „Generate Key“, potom exportujeme verejný kľúč mikrotika „Export Pub. Key“, stiahnuť ho môžeme zo sekcie „Files“, pravým tlačidlom na súbor — „Download“.

Importujeme verejný kľúč racoon, „Import“, v rozbaľovacom zozname poľa „File name“ hľadáme nahraný predtým server-name.pub.pem.

Verejný kľúč mikrotik je potrebné konvertovať

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

a položiť do priečinka /etc/racoon/certs nezabudnúc na vlastníka a práva.

Konfigurácia racoon s komentármi: /etc/racoon/racoon.conf

log info; # Úroveň logovania, pri ladení používame Debug alebo Debug2.

listen {

    isakmp 1.1.1.1 [500]; # Adresa a port, na ktorom bude počúvať démon.
    isakmp_natt 1.1.1.1 [4500]; # Adresa a port, na ktorom bude počúvať démon pre klientov za NAT.
    strict_address; # Vykonávanie povinnej kontroly viazanosti na uvedené vyššie IP.
}

path certificate "\/etc\/racoon\/certs"; # Cesta k priečinku so certifikátmi.

remote anonymous { # Sekcia, ktorá určuje parametre pre prácu démona s ISAKMP a dohodu režimov s pripojujúcimi sa hostiteľmi. Keďže IP, z ktorého sa pripája Mikrotik, je dynamická, používame anonymous, čo umožňuje pripojenie z akejkoľvek adresy. Ak majú hostitelia statickú IP, je možné uviesť konkrétnu adresu a port.

    passive on; # Určuje "serverový" režim práce démona, nebude sa pokúšať iniciovať pripojenia.
    nat_traversal on; # Aktivuje použitie režimu NAT-T pre klientov, ak sú za NAT.
    exchange_mode main; # Režim výmeny parametrov pripojenia, v tomto prípade --- dohoda.
    my_identifier address 1.1.1.1; # Identifikujeme našu linuxovú hostiteľskú stránku podľa jej IP adresy.
    certificate_type plain_rsa "server\/server-name.priv.key"; # Privátny kľúč servera.
    peers_certfile plain_rsa "mikrotik.pub.key"; # Verejný kľúč Mikrotik.

    proposal_check claim; # Režim dohody parametrov ISAKMP tunela. Racoon bude používať hodnoty pripojujúceho sa hostiteľa (iniciátora) pre dobu platnosti relácie a dĺžku kľúča, ak je jeho doba platnosti relácie dlhšia, alebo dĺžka jeho kľúča kratšia, než u iniciátora. Ak je doba platnosti relácie kratšia, než u iniciátora, racoon používa svoju vlastnú hodnotu doby platnosti relácie a bude posielať správu RESPONDER-LIFETIME.
    proposal { # Parametre ISAKMP tunela.

        encryption_algorithm aes; # Metóda šifrovania ISAKMP tunela.
        hash_algorithm sha512; # Algoritmus hashovania, používaný pre ISAKMP tunel.
        authentication_method rsasig; # Režim autentifikácie pre ISAKMP tunel - podľa RSA kľúčov.
        dh_group modp2048; # Dĺžka kľúča pre algoritmus Diffie-Hellman pri dohode ISAKMP tunela.
        lifetime time 86400 sec; # Doba platnosti relácie.
    }

    generate_policy on; # Automatické vytváranie ESP tunelov z požiadavky, ktorá prišla od pripojujúceho sa hostiteľa.
}

sainfo anonymous { # Parametre ESP tunelov, anonymous - uvedené parametre budú použité ako predvolené. Pre rôznych klientov, porty, protokoly je možné nastaviť rôzne parametre, zodpovedajúce porovnávaniu podľa IP adries, portov, protokolov.

    pfs_group modp2048; # Dĺžka kľúča pre algoritmus Diffie-Hellman pre ESP tunely.
    lifetime time 28800 sec; # Doba platnosti ESP tunelov.
    encryption_algorithm aes; # Metóda šifrovania ESP tunelov.
    authentication_algorithm hmac_sha512; # Algoritmus hashovania, používaný pre autentifikáciu ESP tunelov.
    compression_algorithm deflate; # Komprimovať prenášané dáta, algoritmus kompresie je navrhnutý iba jeden.
}

Mikrotik konfigurácia

Vraciame sa do sekcie "IP" — "IPsec"

Záložka "Profil"
Parameter
Hodnota

Názov
Podľa vášho uváženia (predvolene default)

Hash algoritmus
sha512

Šifrovací algoritmus
aes-128

DH-skupina
modp2048

Proposhal_check
nárok

Životnosť
1d 00:00:00

NAT Traversal
true (zaškrtnite)

DPD
120

Maximálny počet zlyhaní DPD
5

Záložka "Peers"
Parameter
Hodnota

Názov
Podľa vášho uváženia (ďalej MyPeer)

Address
1.1.1.1 (IP linux stroja)

Lokálna adresa
10.0.0.2 (IP WAN rozhrania mikrotik)

Profil
default

Režim výmeny
main

Pasívny
nepravda

Odoslať INITIAL_CONTACT
true

Záložka "Návrh"
Parameter
Hodnota

Názov
Podľa vášho uváženia (ďalej MyPeerProposal)

Algoritmy autentifikácie
sha512

Algoritmy šifrovania
aes-128-cbc

Životnosť
08:00:00

PFS skupina
modp2048

Záložka "Identities"
Parameter
Hodnota

Peer
MyPeer

Metóda autentifikácie
rsa kľúč

Kľúč
mikrotik.privet.key

Diaľkový kľúč
server-name.pub.pem

Skupina šablón politiky
default

Notrack reťazec
prázdne

Typ môjho ID
auto

Typ diaľkového ID
auto

Zhodnite sa podľa
diaľkové id

Konfigurácia režimu
prázdne

Generovať politiku
nie

Záložka "Policies — General"
Parameter
Hodnota

Peer
MyPeer

Túň
true

Adresy zdroja
192.168.0.0/30

Adresy cieľa
192.168.0.0/30

Protokol
255 (všetky)

Szablon
nepravda

Záložka "Policies — Action"
Parameter
Hodnota

Akcií
encrypt

Úroveň
vyžaduje

IPsec protokoly
esp

Návrh
MyPeerProposal

Pravdepodobne, ako aj u mňa, máte na WAN rozhraní nastavený snat/masquerade, toto pravidlo je potrebné opraviť, aby odchádzajúce pakety ipsec išli do nášho tunela:
Prejdite do sekcie "IP" — "Firewall."
Záložka "NAT", otvoríme naše pravidlo snat/masquerade.

Záložka "Advanced"
Parameter
Hodnota

IPsec politika
východ: žiadny

Reštartujeme démona racoon

sudo systemctl restart racoon

Ak sa pri reštarte racoon nespustí, znamená to, že v konfigurácii je chyba, v syslog racoon vypisuje informácie o čísle riadka, v ktorom bola chyba zistená.

Démona racoon pri štarte OS sa spúšťa skôr ako sa aktívne zdvihnú sieťové rozhrania, a my sme v sekcii listen uviedli voľbu strict_address, je potrebné pridať do súboru systemd jednotku racoon
/lib/systemd/system/racoon.service, в секцию [Unit], строку After=network.target.

Teraz by sa naše ipsec tunely mali zdvihnúť, pozrime 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, cez ktorý sa pripojuje 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, cez ktorý sa pripojuje 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, cez ktorý sa pripojuje mikrotik" dst 1.1.1.1
        proto esp reqid 0 mode tunnel

Ak sa tunely nezvýšili, pozrite syslog alebo journalctl -u racoon.

Teraz je potrebné nastaviť L3 rozhrania, aby sa mohol smerovať prenos. Existuje niekoľko možností, budeme používať IPIP, pretože ho mikrotik podporuje; použil by som vti, ale bohužiaľ, v mikrotik to stále nie je implementované. Na rozdiel od IPIP môže navyše enkapsulovať multicast a pridávať značky (fwmark) na pakety, podľa ktorých je možné filtrovať ich v iptables a iproute2 (smerovanie na základe politík). Ak je potrebná maximálna funkčnosť — potom napríklad GRE. Ale nesmieme zabudnúť, že za dodatočnú funkčnosť platíme veľkým preťažením.

Prehľad tunelových rozhraní si môžete pozrieť tu tu.

Na Linuxe:

# Создаем интерфейс
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ôžeme 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 spúšťali po reštarte, je potrebné popísať rozhranie v /etc/network/interfaces a tam pridať trasy do post-up, alebo všetko zapísať do jedného súboru, napríklad /etc/ipip-ipsec0.conf a spustiť ho cez post-up; nezabudnite na majiteľa súboru, práva a urobte ho spustiteľným.

Pod katom je 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 Mikrotik:

Sekcia „Interfaces“, pridajte nové rozhranie „IP tunnel“:

Záložka „IP tunnel“ — „General“
Parameter
Hodnota

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

MTU
1480 (ak sa neuvádza, mikrotik začne zmenšovať mtu na 68)

Lokálna adresa
192.168.0.2

Remote Address
192.168.0.1

Ipsec Secret
Deaktivujte pole (inak bude vytvorený nový Peer)

Keepalive
Deaktivujte pole (inak bude rozhranie neustále vypnuté, pretože mikrotik má nejaký vlastný formát týchto balíkov a s linuxom nefunguje)

DSCP
inherit

Dont Fragment
nie

Clamp TCP MSS
true

Allow Fast Path
true

Sekcia „IP“ — „Addresses“, pridajte adresu:

Parameter
Hodnota

Address
192.168.0.2/30

Interface
IPIP-IPsec0

Teraz môžeme pridávať trasy do sietí za linux strojom; pri pridávaní trasy bude gateway naše rozhranie IPIP-IPsec0.

PS

Pretože náš linux server je transitný, má zmysel nastaviť parameter Clamp TCP MSS pre ipip rozhrania:

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

V sieti za mikrotik mi beží nginx (ip 10.10.10.1), spravme ho dostupným z internetu; pridajme 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
#Na mikrotik, v tabuľke mangle, je potrebné pridať pravidlo route s určením 192.168.0.1 pre pakety s adresou zdroja 10.10.10.1 a portami 80, 443.

# Rovnako na linuxe funguje OpenVPN server 172.16.0.1/24, pre klientov, ktorí používajú pripojenie k nemu ako bránu, poskytujeme prístup na internet.
-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 do iptables, ak máte zapnuté filtre paketov.

Buďte zdraví!

Zdroj: habr.com

Kúpte si spoľahlivý hosting pre webové stránky s ochranou proti DDoS, VPS VDS servery 🔥 Kúpte si spoľahlivý hosting pre webové stránky s ochranou proti DDoS, VPS VDS servery | ProHoster