IPIP IPsec VPN tunnel Linuxi masina ja Mikrotik vahel nii, et see on proviideri NAT-is

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 saab olema meie tunnel

Miktoik: CCR 1009, RouterOS 6.46.5

  • Eth0 10.0.0.2/30 sisemine IP proviiderilt. Väline IP proviideri NAT on dünaamiline.
  • ipip-ipsec0 192.168.0.2/30 saab olema meie tunnel

IPsec tunnel Linuxi masinas seame üles racooni abil. Ma ei hakka üksikasju kirjeldama, on hea artikkel on vvpoloskin.

Installime vajalikud paketid:

sudo install racoon ipsec-tools

Seame racooni üles, ta tegutseb tinglikult ipsec serverina. Kuna mikrotik peamiselt ei saa edastada täiendavat kliendi identifikaatorit ja väline IP-aadress, mille kaudu ta Linuxiga ühendub, on dünaamiline, ei saa preshared key (parooliga autentimist) kasutada, kuna parool peab vastama kas ühenduva hosti IP-aadressile või identifikaatorile.

Kasutame RSA võtmete abil autentimist.

Demon racoon kasutab võtmeid RSA-formaadis, samas kui mikrotik kasutab PEM-formaadis. Kui genereerite võtmeid utiliidiga plainrsa-gen, mis tuleb koos racooniga, ei õnnestu teil konverteerida avalikku võtit Mikrotik jaoks PEM vormingusse — see konverteerib ainult ühes suunas: PEM-st RSA-sse. Genereritud plainrsa-gen võtit ei suutnud lugeda ei openssl ega ssh-keygen, seega ei saa nende abil konversiooni teha.

Me genereerime PEM võtme openssl abil ja seejärel konverteerime selle racooni jaoks plainrsa-gen abil:

#  Генерируем ключ
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 paneme kausta: /etc/racoon/certs/server. Ärge unustage seadistada omaniku kasutajaks isikut, kelle nime alt demon racoon töötab (tavaliselt root), õigused 600.

Mikrotiku seadistuse kirjeldan WinBoxi kaudu ühenduse loomisel.

Laadime võtme server-name.pub.pem Mikrotikusse: Menüü «Files» — «Upload».

Avame jaotise «IP» — «IP sec» — vahekaart «Keys». Nüüd genereerime võtmed — nupp «Generate Key», seejärel ekspordime avaliku võtme mikrotikast «Export Pub. Key», selle saab alla laadida jaotisest «Files», paremklõps failil — «Download».

Importime avaliku võtme racooni, «Import», all kirjeldatud failinime väljal otsime varem üleslaaditud server-name.pub.pem.

Mikrotiku avalik võti tuleb konverteerida.

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

ja panna kausta /etc/racoon/certs, kartmata omanikku ja õigusi.

racooni konfiguratsioon koos kommentaaridega: /etc/racoon/racoon.conf

log info; # Logimise tase, kasutades silumiseks 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, millel demon kuulab NAT taga olevate klientide jaoks.
    strict_address; # Tegevuse kohustuslik kontroll, et seonduda eespool nimetatud IP-dega.
}

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

remote anonymous { # Sektsioon, mis määrab demonile ISAKMP toimimise ja ühenduvate hostide vahendite kokkuleppe parameetrid. Kuna IP, millest Mikrotik ühendub, on dünaamiline, kasutame anonymous, et lubada ühendust mistahes aadressilt. Kui hostide IP-d on staatilised, saab määrata konkreetse aadressi ja pordi.

    passive on; # Määrab demonile "serveri" töörežiimi, see ei üritanud algatada ühendusi.
    nat_traversal on; # Lülitab sisse NAT-T režiimi kasutamise klientide jaoks, kui nad on NAT taga.
    exchange_mode main; # Ühendusparameetrite vahetusrežiim, antud juhul — kokkulepe.
    my_identifier address 1.1.1.1; # Tuvastame meie linux hosti/selle IP aadressi põhjal.
    certificate_type plain_rsa "server/server-name.priv.key"; # Serveri privaatne võti.
    peers_certfile plain_rsa "mikrotik.pub.key"; # Mikrotiku avalik võti.

    proposal_check claim; # ISAKMP tunnelikokkuleppe parameetrid. Racoon kasutab ühenduvate hostide (algataja) väärtusi seansi kehtivuse ja võtme pikkuse jaoks, kui tema seansi kehtivus on pikem või võtme pikkus lühem, kui algatajal. Kui seansi kehtivus on lühem, kasutab racoon oma seansi kehtivuse väärtust ning saadab RESPONDER-LIFETIME sõnumi.
    proposal { # ISAKMP tunneliparameetrid.

        encryption_algorithm aes; # ISAKMP tunnelis kasutatav krüpteerimismeetod.
        hash_algorithm sha512; # Häsheering, mida kasutatakse ISAKMP tunnelis.
        authentication_method rsasig; # ISAKMP tunnelile mõeldud autentimisrežiim – RSA võtmete põhjal.
        dh_group modp2048; # Diiffi-Hellmani algoritmi võtme pikkus ISAKMP tunni kokkuleppe jaoks.
        lifetime time 86400 sec; # Seansi kehtivus.
    }

    generate_policy on; # Automaatne ESP tunnelite loomine ühenduvate hostide päringu põhjal.
}

sainfo anonymous { # ESP tunnelite parameetrid, anonymous - määratud parameetrid kasutatakse vaikimisi seadistustena. Erinevatele klientidele, portidele, protokollidele saab määrata erinevad parameetrid, sobitamine toimub IP aadresside, portide ja protokollide järgi.

    pfs_group modp2048; # Diiffi-Hellmani võtme pikkus ESP tunnelite jaoks.
    lifetime time 28800 sec; # ESP tunnelite kehtivus.
    encryption_algorithm aes; # ESP tunnelite krüpteerimismeetod.
    authentication_algorithm hmac_sha512; # Häsheering, mida kasutatakse ESP tunnelite autentimiseks.
    compression_algorithm deflate; # Andmete edastamisel komprimeerimine, pakutakse ainult üht kompressioonimeetodit.
}

Mikrotik konfiguratsioon

Naaseme jaotisse "IP" — "IPsec"

Vahekaart "Profiles"
Parameeter
Väärtus

Nimi
Teie otsustada (vaikimisi default)

Hash algoritm
sha512

Encryption Algorithm
aes-128

DH-Grup
modp2048

Proposhal_check
nõue

Eluaeg
1d 00:00:00

NAT Traversal
true (märgi ära)

DPD
120

DPD maksimaalne tõrge
5

Vahekaart "Peers"
Parameeter
Väärtus

Nimi
Teie otsustada (edasi MyPeer)

Address
1.1.1.1 (Linux masina IP)

Kohalik aadress
10.0.0.2 (Mikrotiku WAN liidese IP)

Profile
default

Vahetusrežiim
main

Passiivne
false

Saada INITIAL_CONTACT
true

Vahekaart "Proposal"
Parameeter
Väärtus

Nimi
Teie otsustada (edasi MyPeerProposal)

Auth. algoritmid
sha512

Krüpteerimise algoritmid
aes-128-cbc

Eluaeg
08:00:00

PFS grupp
modp2048

Vahekaart "Identities"
Parameeter
Väärtus

Partner
MyPeer

Atuh. meetod
rsa võti

Avaõigus
mikrotik.privet.key

Kaugnimi
server-name.pub.pem

Poliitika malligrupp
default

Notrack ahel
tühi

Minu ID tüüp
auto

Kauge ID tüüp
auto

Ühtimine
kauge id

Režiimi konfiguratsioon
tühi

Loo poliitika
ei

Vahekaart "Policies — General"
Parameeter
Väärtus

Partner
MyPeer

Tunnel
true

Allika aadress
192.168.0.0/30

Sihtaadress
192.168.0.0/30

Protokoll
255 (kõik)

Mall
false

Vahekaart "Policies — Action"
Parameeter
Väärtus

Action
encrypt

Tase
nõutav

IPsec protokollid
esp

Pakkumine
MyPeerProposal

Tõenäoliselt on teie WAN liidesel seadistatud snat/masquerade, see reegel tuleb kohandada, et väljuvad ipsec paketid suunataks meie tunnelisse:
Liigume jaotisse "IP" — "Firewall".
Vahekaart "NAT", avame meie reegli snat/masquerade.

Vahekaart "Advanced"
Parameeter
Väärtus

IPsec poliitika
väljas: puudub

Taaskäivita racoon teenus

sudo systemctl restart racoon

Kui racoon taaskäivitamisel ei käivitu, siis konfigureerimisel on viga, syslog racoon annab teavet vea leidmise rea numbri kohta.

Racoon teenuse käivitamine enne võrgu ühenduste tõstmist, kuid me määrasime listen sektsiooni strict_address valiku, seetõttu on vajalik lisada see systemd teenuse faili.
/lib/systemd/system/racoon.service, в секцию [Unit], строку After=network.target.

Nüüd peaksid meie IPsec tunnelid olema üles tõstetud, 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 "NAT IP, 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 "NAT IP, 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 "NAT IP, mille kaudu mikrotik ühendub" dst 1.1.1.1
        proto esp reqid 0 mode tunnel

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

Nüüd tuleb seadistada L3 liidesed, et saaksime suunata liiklust. On erinevaid variante, kuid kasutame IPIP-d, kuna seda toetab Mikrotik. Kasutaksin VTI-d, kuid kahjuks pole Mikrotik seda veel realiseerinud. IPIP erineb sellest, et see suudab lisaks encapsuleerida multicast-i ja määrata pakettidele (fwmark) silte, mille põhjal saab neid filtreerida iptables ja iproute2 (poliitikas põhinev suunamine). Kui on vajalik maksimaalne funktsionaalsus, siis näiteks GRE. Kuid ärge unustage, et täiendava funktsionaalsuse eest maksame suurema overhead'i.

Head ülevaadet tunneliliidestest saab vaadata siin.

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 Mikrotiku taga olevatele võrkudele

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

Kuna meie liides ja marsruudid peavad pärast taaskäivitamist üles tõusma, tuleb liides kirja panna /etc/network/interfaces ja seal post-up'is lisada marsruudid või kirjutada kõik ühte faili, näiteks /etc/ipip-ipsec0.conf ja kutse teha post-up'i kaudu, ärge unustage faili omanikku, õ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

Mikrotikus:

Jaotis „Liidesed”, lisame uue liidese „IP tunnel”:

IP tunnel'i seaded — Üldine
Parameeter
Väärtus

Nimi
Teie otsustada (edasi IPIP-IPsec0)

MTU
1480 (kui ei täpsusta, hakkab mikrotik mtu-d kärpima kuni 68)

Kohalik aadress
192.168.0.2

Kaug адреса
192.168.0.1

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

Keepalive
Deaktiveerime välja (vastasel juhul keerab liides pidevalt välja, kuna mikrotik'il on nende pakettide oma formaat ja see ei tööta linuxiga)

DSCP
pärida

Ära jagada
ei

Klamber TCP MSS
true

Luba kiire rada
true

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

Parameeter
Väärtus

Address
192.168.0.2/30

Liides
IPIP-IPsec0

Nüüd saab lisada marsruute linuxi masina taha, kui marsruuti lisada, siis väravaks saab meie liides IPIP-IPsec0.

PS

Kuna meie linuxi server on ülekande, on mõistlik seada IPIP liideste puhul Clamp TCP MSS parameeter:

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 failis /etc/network/interfaces
post-up iptables-restore < /etc/iptables.conf

Mikrotik'i taga töötab mul nginx (ip 10.10.10.1), teeme selle internetist kergesti ligipääsetavaks, lisame faili /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
#Mikrotikil, mangle tabelis, tuleb lisada reegel route, mis määrab 192.168.0.1 pakettide jaoks, mille allikadressiks on 10.10.10.1 ja sadamad 80, 443.

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

Ärge unustage lisada vastavaid õigusi iptables, kui teil on filtrid sisse lülitatud.

Olge terved!

Allikas: habr.com

Osta usaldusväärne veebihosting DDoS kaitsega, VPS VDS serverid 🔥 Osta usaldusväärne veebihosting DDoS kaitsega, VPS VDS serverid | ProHoster