Linux: Ubuntu 18.04.4 LTS (GNU/Linux 4.15.0-91-generic x86_64)
- Eth0 1.1.1.1/32 ekstern IP
- ipip-ipsec0 192.168.0.1/30 vil være vores tunnel
Miktoik: CCR 1009, RouterOS 6.46.5
- Eth0 10.0.0.2/30 intern IP fra udbyderen. Den eksterne IP fra udbyderen er dynamisk.
- ipip-ipsec0 192.168.0.2/30 vil være vores tunnel
IPsec tunnelen på Linux maskinen vil vi oprette med racoon. Jeg vil ikke beskrive detaljer, der er en god af .
Installerer nødvendige pakker:
sudo install racoon ipsec-toolsVi konfigurerer racoon, som vil fungere som IPsec server. Da Mikrotik i hovedtilstand ikke kan overføre en ekstra klientidentifier, og den eksterne IP-adresse, som den forbinder til Linux, er dynamisk, vil brugen af preshared key (godkendelse via adgangskode) ikke fungere, da passwordet skal matche enten med IP-adressen på den tilsluttede værtsmaskine eller med identifikatoren.
Vi vil bruge godkendelse via RSA nøgler.
Racoon demon bruger nøgler i RSA-format, mens Mikrotik bruger PEM-format. Hvis man genererer nøgler med værktøjet plainrsa-gen, som følger med racoon, vil det ikke være muligt at konvertere den offentlige nøgle til Mikrotik i PEM-format med det, da det kun konverterer én vej: fra PEM til RSA. Den genererede plainrsa-gen nøgle kunne hverken læses af openssl eller ssh-keygen, så dette vil heller ikke kunne udføre konverteringen.
Vi genererer en PEM-nøgle ved hjælp af openssl og konverterer den til racoon med 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.keyDe opnåede nøgler placeres i mappen: /etc/racoon/certs/server. Husk at sætte ejerrettigheder til den bruger, som racoon demon kører under (normalt root), med rettigheder 600.
Jeg vil beskrive konfigurationen af Mikrotik, når vi tilslutter via WinBox.
Nøglen server-name.pub.pem uploades til Mikrotik: Menuen "Files" — "Upload".
Vi åbner afsnittet "IP" — "IP sec" — fanen "Keys". Nu genererer vi nøgler — knappen "Generate Key", derefter eksporterer vi Mikrotiks offentlige nøgle "Export Pub. Key", den kan downloades fra afsnittet "Files", højreklik på filen — "Download".
Vi importerer den offentlige nøgle fra racoon, "Import", og i dropdown-listen i feltet "File name" søger vi efter den tidligere uploadede server-name.pub.pem.
Den offentlige nøgle fra Mikrotik skal konverteres
plainrsa-gen -i mikrotik.pub.pem -f mikrotik.pub.keyog placeres i mappen /etc/racoon/certs uden at glemme ejerrettigheder og tilladelser.
Konfigurationen af racoon med kommentarer: /etc/racoon/racoon.conf
log info; # Logniveau, brug Debug eller Debug2 under fejlfinding.
listen {
isakmp 1.1.1.1 [500]; # Adressen og porten, hvor de monteringstjenesterne vil lytte.
isakmp_natt 1.1.1.1 [4500]; # Adressen og porten, hvor de monteringstjenesterne vil lytte for NAT-baserede kunder.
strict_address; # Tving obligatorisk kontrol af binding til de angivne IP-adresser.
}
path certificate "/etc/racoon/certs"; # Stien til certificeringsmappen.
remote anonymous { # Sektion, der fastsætter parametre for arbejdet med ISAKMP daemonen og aftaler tilstande med tilsluttende værter. Da IP-adressen, som Mikrotik forbinder fra, er dynamisk, bruger vi anonymous, som tillader forbindelse fra enhver adresse. Hvis værternes IP-adresser er statiske, kan man angive en bestemt adresse og port.
passive on; # Indstiller daemonen til "server"-tilstand, den vil ikke forsøge at initiere forbindelser.
nat_traversal on; # Aktiverer brug af NAT-T-tilstand for kunder, hvis de er bag NAT.
exchange_mode main; # Parametrene for forbindelse, i dette tilfælde - aftale.
my_identifier address 1.1.1.1; # Identificerer vores Linux-vært ved dens IP-adresse.
certificate_type plain_rsa "server/server-name.priv.key"; # Serverens private nøgle.
peers_certfile plain_rsa "mikrotik.pub.key"; # Mikrotiks offentlige nøgle.
proposal_check claim; # Aftalens tilstand for ISAKMP-tunnelen. Racoon vil bruge værdierne fra den tilsluttende vært (initiatoren) for sessionens varighed og nøglens længde, hvis dens session varighed er længere eller nøglens længde kortere end initiatorens. Hvis sessionens varighed er kortere end initiatorens, bruger racoon sin egen værdi for sessionens varighed og vil sende en RESPONDER-LIFETIME melding.
proposal { # ISAKMP-tunnelparametre.
encryption_algorithm aes; # Krypteringsmetode for ISAKMP-tunnelen.
hash_algorithm sha512; # Hasheringsalgoritme anvendt for ISAKMP-tunnelen.
authentication_method rsasig; # Godkendelsesmetode for ISAKMP-tunnelen - baseret på RSA-nøgler.
dh_group modp2048; # Nøglens længde for Diffie-Hellman-algoritmen under ISAKMP-tunnelens aftale.
lifetime time 86400 sec; # Sessionens varighed.
}
generate_policy on; # Automatisk oprettelse af ESP-tunneler fra forespørgslen fra den tilsluttende vært.
}
sainfo anonymous { # Parametre for ESP-tunneler, anonymous - de angivne parametre vil blive anvendt som standardparametre. For forskellige kunder, porte og protokoller kan man angive forskellige parametre, matchning sker baseret på IP-adresser, porte og protokoller.
pfs_group modp2048; # Nøglens længde for Diffie-Hellman-algoritmen for ESP-tunneler.
lifetime time 28800 sec; # Varigheden af ESP-tunneler.
encryption_algorithm aes; # Krypteringsmetode for ESP-tunneler.
authentication_algorithm hmac_sha512; # Hasheringsalgoritme anvendt til autentificering af ESP-tunneler.
compression_algorithm deflate; # Komprimerer de overførte data, kun én komprimeringsalgoritme foreslås.
}
Mikrotik-konfiguration
Gå tilbage til sektionen "IP" - "IPsec"
Fanen "Profiler"
Parameter
Værdi
Navn
Valgfri (standard default)
Hash-algoritme
sha512
Krypteringsalgoritme
aes-128
DH-Gruppe
modp2048
Proposal_check
claim
Levetrid
1d 00:00:00
NAT Traversal
true (sæt markeringen)
DPD
120
DPD Maksimum fejl
5
Fanen "Peers"
Parameter
Værdi
Navn
Valgfri (herefter MyPeer)
Adresse
1.1.1.1 (linux maskinens IP)
Lokal adresse
10.0.0.2 (IP WAN-interface på mikrotik)
Profil
default
Exchange-tilstand
main
Passiv
false
Send INITIAL_CONTACT
true
Fanen "Proposal"
Parameter
Værdi
Navn
Valgfri (herefter MyPeerProposal)
Auth. Algoritmer
sha512
Krypt. Algoritmer
aes-128-cbc
Levetrid
08:00:00
PFS Gruppe
modp2048
Fanen "Identiteter"
Parameter
Værdi
Peer
MyPeer
Auth. Metode
rsa nøgle
Nøgle
mikrotik.privet.key
Fjernnøgle
server-name.pub.pem
Politikskabelon-gruppe
default
Notrack-kæde
tom
Min ID-type
auto
Fjern ID-type
auto
Match efter
fjern id
Tilstandskonfiguration
tom
Generer politik
nej
Fanen "Politikker — Generelt"
Parameter
Værdi
Peer
MyPeer
Tunnel
true
Src. adresse
192.168.0.0/30
Dest. adresse
192.168.0.0/30
Protokol
255 (alle)
Skabelon
false
Fanen "Politikker — Handling"
Parameter
Værdi
Handling
krypter
Niveau
kræves
IPsec-protokoller
esp
Proposal
MyPeerProposal
Du har sandsynligvis, som jeg, indstillet snat/masquerade på WAN-interface; denne regel skal justeres, så udgående IPsec-pakker sendes i vores tunnel:
Gå til sektionen "IP" - "Firewall".
Fanen "NAT", åbner vores snat/masquerade regel.
Fanen "Avanceret"
Parameter
Værdi
IPsec-politik
out: none
Genstart racoon daemon
sudo systemctl restart racoonHvis racoon ikke starter ved genstart, er der en fejl i konfigurationen; i syslog viser racoon oplysninger om linjenummeret, hvor fejlen blev fundet.
Racoon daemon starter op før netværksinterface bliver aktiveret; vi har angivet strict_address som option i listen-sektionen, så vi skal tilføje dette i racoon systemd unit filen.
/lib/systemd/system/racoon.service, в секцию [Unit], строку After=network.target.
Nu bør vores IPsec-tunneller være oppe, vi ser output:
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, som mikrotik forbinder til"
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, som mikrotik forbinder til" 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, som mikrotik forbinder til" dst 1.1.1.1
proto esp reqid 0 mode tunnelHvis tunnelerne ikke er oppe, se syslog eller journalctl -u racoon.
Nu skal L3-interface indstilles, så trafik kan dirigeres. Der er forskellige muligheder, vi vil bruge IPIP, da Mikrotik understøtter det, jeg ville have brugt VTI, men desværre er det stadig ikke implementeret i Mikrotik. IPIP adskiller sig ved, at det desuden kan kapsle multicast og tilføje mærker (fwmark) til pakker, som de kan filtreres på i iptables og iproute2 (policy-baseret routing). Hvis maksimal funktionalitet er nødvendig, så for eksempel GRE. Men man må ikke glemme, at vi betaler for ekstra funktionalitet med et større overhead.
Oversigten over tunnelinterfaces kan ses ved at oversætte. .
På 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-ipsec0Nu kan ruter til netværk bag Mikrotik tilføjes.
sudo ip route add A.B.C.D/Prefix via 192.168.255.2For at vores interface og ruter starter efter genstart skal interfacet beskrives i /etc/network/interfaces og der også tilføje ruter i post-up, eller skrive det hele i en fil, for eksempel /etc/ipip-ipsec0.conf og kalde det via post-up, glem ikke filens ejer, rettigheder og gør det eksekverbart.
Under her er et eksempel på en fil.
#!/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.2På Mikrotik:
Sektionen "Interfaces", tilføj et nyt interface "IP tunnel":
Fanebladet "IP tunnel" - "Generel"
Parameter
Værdi
Navn
Efter eget valg (senere IPIP-IPsec0)
MTU
1480 (hvis ikke angivet, begynder Mikrotik at skære MTU ned til 68)
Lokal adresse
192.168.0.2
Remote Address
192.168.0.1
Ipsec Secret
Deaktiver feltet (ellers oprettes der en ny peer)
Keepalive
Deaktiver feltet (ellers vil interfacet konstant slukke, da Mikrotik har en særlig format for disse pakker, som ikke fungerer med Linux)
DSCP
arv
Dont Fragment
nej
Clamp TCP MSS
true
Allow Fast Path
true
Sektionen "IP" - "Addresses", tilføj adresse:
Parameter
Værdi
Adresse
192.168.0.2/30
Interface
IPIP-IPsec0
Nu kan der tilføjes ruter til netværk bag Linux-maskinen, ved tilføjelse af ruten vil gateway være vores interface IPIP-IPsec0.
PS
Da vores Linux-server fungerer som transit, giver det mening at indstille parameteren Clamp TCP MSS for IPIP interfaces:
Opret filen /etc/iptables.conf med følgende indhold:
*mangle
-A POSTROUTING -o ipip+ -p tcp -m tcp --tcp-flags SYN,RST SYN -j TCPMSS --clamp-mss-to-pmtu
COMMITog i /etc/network/interfaces
post-up iptables-restore < /etc/iptables.conf
I netværket bag Mikrotik har jeg nginx (ip 10.10.10.1), gør den tilgængelig fra internettet, tilføj til /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
#På Mikrotik, i mangle-tabellen skal du tilføje en rute regel med destination 192.168.0.1 for pakker med kildeadresse 10.10.10.1 og porte 80, 443.
# OpenVPN-serveren fungerer også på Linux 172.16.0.1/24, for kunder der bruger forbindelsen til den som gateway giver vi internetadgang
-A POSTROUTING -s 172.16.0.0/24 -o eth0 -j SNAT --to-source 1.1.1.1
COMMIT Glem ikke at tilføje de relevante tilladelser i iptables, hvis du har aktiveret pakke-filtre.
Vær sund!
Kilde: habr.com
