IPIP IPsec VPN tunnel Linuxi masina ja Mikrotiki vahel NAT-teenusepakkuja kaudu

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

  • Eth0 1.1.1.1/32 väline IP
  • ipip-ipsec0 192.168.0.1/30 on meie tunnel

Miktoik: CCR 1009, RouterOS 6.46.5

  • Eth0 10.0.0.2/30 sisemine IP teenusepakkujalt. Väline IP on teenusepakkuja dünaamiline NAT.
  • ipip-ipsec0 192.168.0.2/30 on meie tunnel

IPsec tunnel Linux masinas seadistatakse racoon'i abil. Ma ei hakka detailselt kirjeldama, siin on hea artikkel on vvpoloskin.

Paigaldame vajalikud paketid:

sudo install racoon ipsec-tools

Seadistame racoon'i, mis toimib tinglikult ipsec serverina. Kuna mikrotik ei saa peamises režiimis edastada täiendavat kliendi identifikaatorit ning väline IP-aadress, mille kaudu see Linux'i ühendub, on dünaamiline, ei saa kasutada preshared key (paroolautentimine), kuna parool peab vastama kas ühendava hosti IP-aadressile või identifikaatorile.

Kasutame RSA võtmete autentimist.

Demon racoon kasutab võtmeid RSA formaadis, mikrotik aga PEM formaadis. Kui genereerime võtmeid utiliidiga plainrsa-gen, mis tuleb koos racoon'i kaasa, siis ei õnnestu konverteerida avalikku võtit Mikrotiki jaoks PEM formaati, kuna see konverteerib ainult ühes suunas: PEM-ist RSA-sse. Genereritud plainrsa-gen võtit ei suutnud lugeda ei openssl ega ssh-keygen, seega nende abil ei õnnestu samuti konversiooni teha.

Generoime PEM võtme openssl'i abil ja seejärel konverteerime selle racoon'i jaoks plainrsa-gen'iga:

#  Генерируем ключ
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

Saadud võtmed asetame kausta: /etc/racoon/certs/server. Ära unusta määrata omanikuks kasutaja, kelle nimel racoon daemon töötab (tavaliselt root), õigused 600.

Seadistamise mikrotiki kirjeldan, kui liitume WinBox'iga.

Laadime võtme server-name.pub.pem mikrotiki: Menüü „Files“ — „Upload“.

Avame jaotise „IP“ — „IP sec“ — sakk „Keys“. Nüüd genereerime võtmed — nupp „Generate Key“, seejärel ekspordime avaliku võtme mikrotikilt „Export Pub. Key“, laadida selle saab jaotisest „Files“, paremklõps faili — „Download“.

Impordime racoon'i avaliku võtme, „Import“, rippmenüüs väljale „File name“ otsime varem laaditud server-name.pub.pem.

Mikrotiki avalik võti tuleb konverteerida

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

ja asetada kausta /etc/racoon/certs, unustamata omaniku ja õiguste määramist.

racoon'i konfiguraatsioon kommentaaridega: /etc/racoon/racoon.conf

log info; # Logimise tase, silumiseks kasutame Debug või Debug2.

listen {

    isakmp 1.1.1.1 [500]; # Aadress ja port, millel demon kuulab.
    isakmp_natt 1.1.1.1 [4500]; # Aadress ja port, millega demon kuulab NAT-i taga olevate klientide jaoks.
    strict_address; # Teosta kohustuslik IP-de sidumise kontrol.
}

path certificate "/etc/racoon/certs"; # Tee sertifikaatide kaustani.

remote anonymous { # Sektsioon, mis määrab parameetrid ISAKMP tööks ja ühenduvate hostidega läbirääkimiseks. Kuna IP, kust Mikrotik ühendub, on dünaamiline, kasutame anonymous, mis lubab ühendusi mis tahes aadressilt. Kui hostide IP on staatiline, saab määrata konkreetse aadressi ja pordi.

    passive on; # Määrab demoni "serverirežiimi", see ei proovi algatada ühendusi.
    nat_traversal on; # Lubab NAT-T režiimi kasutamise klientide jaoks, kui nad on NAT-i taga.
    exchange_mode main; # Ühenduse parameetrite vahetamise režiim, antud juhul - läbirääkimine.
    my_identifier address 1.1.1.1; # Identifitseerime meie linux hosti tema IP-aadressi järgi.
    certificate_type plain_rsa "server/server-name.priv.key"; # Serveri privaatvõti.
    peers_certfile plain_rsa "mikrotik.pub.key"; # Mikrotiku avalik võti.

    proposal_check claim; # ISAKMP tunneli parameetrite läbirääkimise režiim. Racoon kasutab ühenduva hosti (algataja) väärtusi seansi kehtivusaja ja võtme pikkuse jaoks, kui tema seansi kehtivusaeg on pikem või tema võtme pikkus lühem kui algatajal. Kui seansi kehtivusaeg on lühem kui algatajal, kasutab racoon oma väärtust seansi kehtivusele ja saadab sõnumi RESPONDER-LIFETIME.
    proposal { # ISAKMP tunneli parameetrid.

        encryption_algorithm aes; # ISAKMP tunneli krüpteerimise meetod.
        hash_algorithm sha512; # Häsingualgoritm, mida kasutatakse ISAKMP tunnelis.
        authentication_method rsasig; # Ahnitatsioonirežiim ISAKMP tunnelis - RSA võtmete põhjal.
        dh_group modp2048; # Diifiki-Hellmani algoritmi võtme pikkus ISAKMP tunneli läbirääkimisel.
        lifetime time 86400 sec; # Seansi kehtivusaeg.
    }

    generate_policy on; # Automaatne ESP tunnelite loomine, kui sissetuleva hosti päring.
}

sainfo anonymous { # ESP tunnelite parameetrid, anonymous - määratud parameetrid kasutatakse vaikesätetena. Erinevate klientide, portide, protokollide jaoks saab määrates erinevaid parameetreid, vastavus toimub IP-aadresside, portide ja protokollide alusel.

    pfs_group modp2048; # Diifiki-Hellmani algoritmi võtme pikkus ESP tunnelite jaoks.
    lifetime time 28800 sec; # ESP tunnelite kehtivusaeg.
    encryption_algorithm aes; # ESP tunnelite krüpteerimise meetod.
    authentication_algorithm hmac_sha512; # Häsingualgoritm, mida kasutatakse ESP tunnelite autentimiseks.
    compression_algorithm deflate; # Andmete edastamine kompressioon, kompressioonimeetodit pakutakse ainult ühte.
}

Mikrotik konfiguratsioon

Naaseme jaotisse "IP" — "IPsec"

Vahekaart "Profiles"
Parameeter
Tähendus

Nimi
Teie valikul (vaikimisi default)

Hashi algoritm
sha512

Krüpteerimise algoritm
aes-128

DH-Grupid
modp2048

Proposhal_check
nõue

Kehtivusaeg
1d 00:00:00

NAT Traversal
tõsi (paneme linnukese)

DPD
120

DPD maksimaalne ebaõnnestumine
5

Vahekaart "Peers"
Parameeter
Tähendus

Nimi
Teie valikul (edasi MyPeer)

Address
1.1.1.1 (Linux masina IP)

Kohalik aadress
10.0.0.2 (Mikrotiki WAN liidese IP)

Profiil
Seejärel käivitame exec käsu ja ootame 5000 sekundit, et jätkata jälgimist:

Vahetusrežiim
main

Passiivne
false

Saada INITIAL_CONTACT
true

Vahekaart "Proposal"
Parameeter
Tähendus

Nimi
Teie valikul (edasi MyPeerProposal)

Auth. algoritmid
sha512

Krüpteerimise algoritmid
aes-128-cbc

Kehtivusaeg
08:00:00

PFS Grupp
modp2048

Vahekaart "Identities"
Parameeter
Tähendus

Peer
MyPeer

Auth. meetod
rsa võti

Ava
mikrotik.privet.key

Kaugtõend
server-name.pub.pem

Poliitika Malli Grupp
Seejärel käivitame exec käsu ja ootame 5000 sekundit, et jätkata jälgimist:

Notrack Chain
tühi

Minu ID tüüp
auto

Kaugi ID tüüp
auto

Vastavus
kaugi id

Režiimi konfiguratsioon
tühi

Generaator poliitika
no

Vahekaart "Policies — General"
Parameeter
Tähendus

Peer
MyPeer

Tunnel
true

Src. aadress
192.168.0.0/30

Dest. aadress
192.168.0.0/30

Protokoll
255 (kõik)

Mall
false

Vahekaart "Policies — Action"
Parameeter
Tähendus

Toiming
encrypt

Tase
nõutav

IPsec protokollid
esp

Pakkumine
MyPeerProposal

Põhimõtteliselt on teil, nagu ka minul, WAN liidesel seadistatud snat/masquerade; seda reeglit tuleb kohandada, et väljuvad IPsec paketid lahkuksid meie tunnelisse:
Liigume jaotisse "IP" — "Firewall".
Vahekaart "NAT", avame meie snat/masquerade reegli.

Vahekaart "Advanced"
Parameeter
Tähendus

IPsec poliitika
välja: ei midagi

Taaskäivita demoon racoon

sudo systemctl restart racoon

Kui racoon ei käivitu taaskäivitamisel, tähendab see, et konfiguratsioonis on viga; syslog racoon annab teavet vea ridade numbri kohta.

Demoon racoon käivitatakse OS-i käivitamisel enne võrgu liideste tõstmist, kuna oleme näidanud sektsioonis listen range_aadressi valiku, tuleb see lisada racoon'i systemd üksuse faili.
/lib/systemd/system/racoon.service, в секцию [Unit], строку After=network.target.

Praegu peaksid meie IPsec tunnelid üles tõusma, vaatame väljundit:

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, mille kaudu Mikrotik ühendub"
        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, mille kaudu Mikrotik ühendub" 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, mille kaudu Mikrotik ühendub" dst 1.1.1.1
        proto esp reqid 0 mode tunnel

Kui tunnelid ei tõusnud, vaadake syslog'i või journalctl -u racoon.

Nüüd on vaja seadistada L3 liidesed, et suunata liiklust. On erinevaid võimalusi, me kasutame IPIP-protokolli, kuna seda toetab mikrotik. Mina kasutaksin VTI-d, kuid kahjuks pole mikrotik seda siiani implementeerinud. IPIP erineb selle poolest, et see suudab lisaks ka multi-cast'i inkapsuleerida ja panna pakettidele silte (fwmark), mille alusel neid iptables ja iproute2 (poliitikat põhine suunamine) kaudu filtreerida. Kui vajalik on maksimaalne funktsionaalsus, siis näiteks GRE. Kuid ei tohiks unustada, et lisafunktsionaalsuse eest maksame suure ülekande kulu.

Hea ülevaate tunnelite liidestest tõlget saab vaadata siit.

Linuxis:

# Создаем интерфейс
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

Nüüd saab lisada marsruute mikrotiki taga olevatele võrkudele

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

Kuna meie liides ja marsruudid peaksid pärast taaskäivitamist üles tõusma, tuleb liides kirjeldada /etc/network/interfaces ja seal ka post-up'is marsruudid lisada, või kirjutada kõik ühte faili, näiteks /etc/ipip-ipsec0.conf ja tõmmata see post-up'i kaudu, ärge unustage faili omaniku, õigusi ja muuta see käivitatavaks.

Allpool on näide failist

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

Mikrotik'is:

Jaotis «Liidesed», lisame uue liidese «IP tunnel»:

Vahekaart «IP tunnel» — «Üldine»
Parameeter
Tähendus

Nimi
Teie otsustada (edasi IPIP-IPsec0)

MTU
1480 (kui ei määra, siis mikrotik hakkab mtu-d lõikama 68-ni)

Kohalik aadress
192.168.0.2

Kaugadress
192.168.0.1

Ipsec Salajane
Deaktiveerime välja (vastasel juhul luuakse uus Peer)

Hoia elus
Deaktiveerime välja (vastasel juhul lülitub liides pidevalt välja, kuna mikrotik'il on nende pakettide jaoks oma formaat ja see ei tööta linuxiga)

DSCP
pärida

Ära fragmenteeri
no

Klamber TCP MSS
true

Luba kiire tee
true

Jaotis «IP» — «Aadressid», lisame aadressi:

Parameeter
Tähendus

Address
192.168.0.2/30

Liides
IPIP-IPsec0

Nüüd saab hakata lisama marsruute linuxi masina taha olevatesse võrkudesse, kui marsruuti lisada, siis väravaks (gateway) saab meie liides IPIP-IPsec0.

PS

Kuna meie linux-server on transiitne, siis on mõistlik seada parameeter Klamber TCP MSS IPIP liideste jaoks:

loome faili /etc/iptables.conf järgmise sisuga:

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

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

Mikrotiki taga olevas võrgus töötab mul nginx (ip 10.10.10.1), teeme selle internetist ligipääsetavaks, lisame /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'is lisatakse mangle tabelisse reegel route aadressiga 192.168.0.1 pakettide jaoks, mille allikaaadress on 10.10.10.1 ja portideks 80, 443.

# Samuti töötab Linuxis OpenVPN server 172.16.0.1/24, ja klientidele, kes kasutavad selle ühendust kui lähtesilti, anname juurdepääsu internetile
-A POSTROUTING -s 172.16.0.0/24 -o eth0 -j SNAT --to-source 1.1.1.1
COMMIT 

Ärge unustage lisada vastavaid lubasid iptablesse, kui teil on paketifiltrid sisse lülitatud.

Olge terved!

Allikas: habr.com

Osta usaldusväärne hostimine veebilehtede jaoks DDoS-i kaitsega, VPS VDS serverid 🔥 Osta usaldusväärne hostimine veebilehtede jaoks DDoS-i kaitsega, VPS VDS serverid | ProHoster