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 on .
Paigaldame vajalikud paketid:
sudo install racoon ipsec-toolsSeadistame 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.keySaadud 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.keyja 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 racoonKui 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 tunnelKui 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 .
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-ipsec0Nüüd saab lisada marsruute mikrotiki taga olevatele võrkudele
sudo ip route add A.B.C.D/Prefix via 192.168.255.2Kuna 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.2Mikrotik'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
COMMITja /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
