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ý u .
Inštalujeme potrebné balíky:
sudo install racoon ipsec-toolsKonfigurujeme 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.keyZí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.keya 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 racoonAk 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 tunnelAk 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 .
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-ipsec0Teraz môžeme pridať trasy pre siete za mikrotik
sudo ip route add A.B.C.D/Prefix via 192.168.255.2Aby 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.2Na 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
COMMITa 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
