Sprendžiant IPSEC tunelių problemas, dažnai kyla klausimų nuo ko pradėti ir kur ieškoti problemos. Kaip visada reikėtų turėti bent kelias gaires, nuo kurių būtų galima pradėti spręsti problematišką IPSEC apjungimą. Pateikiame tris konfigūracijos vietas, kuriuose reikėti pradėti tikrinti, jei turite problematišką IPSEC apjungimą:
- Tikriname, ar visi IP adresai yra surašyti teisingai abiejų sujungimų pusėse.
- Tikriname, ar IPSEC pirminė apjungimo fazė (angl. Phase 1) yra iš abiejų pusių (ESP protokolu).
- Tikriname, ar yra susidiegę SA tuneliai t.y. antrinė fazė (angl. Phase 2).
Pirmuoju atveju, reikia pradėti nuo paprastų dalykų kaip pvz. ar teisingai esate suvedę IP adresus? Ar jie yra aprašyti tinkamai ir tinkamose konfigūracijos laukeliuose. Jei pirminiai konfigūracijos duomenys yra surašyti tinkamai, galite būti tikri, kad nėra padarytos klaidos šiame žingsnyje. Turėdami viską tinkamai suvesta, keliaujame toliau į kitus IPSEC nustatymus.
Toliau ieškome ar yra duomenų srautas sukurtam apjaugimui. Juos greitai pamatyti padės statistikos skaitikliai, kurie bus matomi, turint duomenų srautą pradinėje IPSEC fazėje (angl. Phase1). Abiejų maršrutizatorių pusėje, komandinės eilutės pagalba pasižiūrime.
/ip ipsec statistics print
Jei iš gautos statistikos beveik visur matome „0“ reikšmes, tada reikia tikrinti ESP pirminės fazės (angl. Phase 1) susijungimus. Tikriname ar yra abipusis susijungimas, ar bent bandymas susijungti? Kokie IP adresai yra naudojami bandant susijungti. Ta galime pažiūrėti per ugniasienės sujungimų stebėjimą. Suvedame atitinkamą komandą su dominančios pusės IP adresu. Šiuo atveju kitos pusės IP adresas yra „2.2.2.2”.
/ip firewall connection print detail where dst-address~"2.2.2.2"
PASTABA: ESP nebuvimas gali būti, kad ugniasienėje nėra taisyklės įleidžiančios ESP paketus.
Kitas būdas pamatyti ESP pirminės fazės (angl. Phase1) susijungimus – panaudoti Mikrotik įrankį „Sniffer”. Pagavę ESP paketus su „Sniffer“ įrankiu, galime patikrinti ar yra abipusis ESP srautas, taip pat IP adresus kurie yra naudojami bandant užmegzti abipusį ryšį. Tuo pačiu sutikrinti ar jie yra tokie, kokie buvo aprašyti abiejuose pusėse.
/tool sniffer quick ip-protocol=ipsec-esp
Taip pat norit tiksliau, galima aprašyti filtrą, panaudojant mus dominantį IP adresą „2.2.2.2“.
/tool sniffer
set filter-ip-protocol=ipsec-esp
set filter-ip-address=2.2.2.2
start
Nepamirškite po to sustabdyti komandinės eilutės pagalba.
/tool sniffer stop
Pagautų paketų failą atsisiunčiame į savo kompiuterį. Pervadiname failo tipą į .pcap ir atidarome failą su „Wireshark” programa. Kaip ir prieš tai ieškome abiejų pusių apjungimo IP adresų. Jei jie yra iš abiejų pusių, tikriname, ar tie patys, kaip aprašyti „Peers” profiliuose.
Jei viskas gerai su ESP apjungimu (angl. Phase1), kitas žingsnis – tikriname SA tunelius (anlg. Phase2). Esant sėkmingai užmegztam ryšiui tarp abiejų pusių, turime turėti bent du, abiejų pusių SA apjungimus. Tą patikrinti galime komandinės eilutės pagalba.
/ip ipsec installed-sa print
Gauname tokį rezultatą, kuriame ieškome SA apjungimų, kurie mus yra aktualūs. Pavyzdys pateikiamas, kada SA yra ir veikia korektiškai.
0 HE spi=0x9544AAC src-address=2.2.2.2 dst-address=1.1.1.1 state=mature auth-algorithm=sha256
enc-algorithm=aes-cbc enc-key-size=256
auth-key="980d8253ebf905bf2638289e788ea87a1463b61c43ba0407034a57ba693f41dd"
enc-key="de4ef9bd9d6e491ee984871172ffac1d77a3541a7c02fc6fc1a5d80612239dcb" addtime=mar/14/2023 08:50:44
expires-in=1h36m32s add-lifetime=1h44m16s/2h10m21s current-bytes=1843144 current-packets=8410 replay=128
1 HE spi=0xC8BB498C src-address=1.1.1.1 dst-address=2.2.2.2 state=mature auth-algorithm=sha256
enc-algorithm=aes-cbc enc-key-size=256
auth-key="231283610d2dfbbc5f789e54f5cd4d3cc1079e7e4f50a9dba4d5eb864fc77aee"
enc-key="ba79f3be7a16b4e0ce1b977ac7e52bf7a904b42ca59fc0694766676c692f24f4" addtime=mar/14/2023 08:50:44
expires-in=1h36m32s add-lifetime=1h44m16s/2h10m21s current-bytes=254558 current-packets=5356 replay=128
Šiuo atveju turime SA apjungimus ir matome srautus. Kad patikrinti ar yra srauto iš/į tunelį ieškome reikšmių ties „current-bytes=X current-packets=X”. Jei srautas yra, vietoje „X” turi būti skaičiai. Jei reikšmių nematote, vadinasi tuneliai neveikia arba nėra duomenų srauto jose.
Išeinantys paketai užmaskuojami (angl. masquerade)
Kartais sutinkame situaciją, kada naujai sukurtas ir išeinantis ESP paketas gali būti užmaskuojamas (anlg. masquerade). Tuomet reikia surasti ar toks procesas vykstą bent vienoje pusėje iš sujungimų, pakoreguoti esamas NAT taisykles ir pašalinti esamus tokius susijungimus, kurie greičiausiai trukdo tvarkingam duomenų perdavimui.
Tikriname ar nėra užmaskuotų, dar kitaip angl. SRC-NAT prisijungimų, susijusių su ESP paketais. Juos galime surasti panaudojant komandinę eilutę.
/ip firewall connection print detail where srcnat and protocol=ipsec-esp
Jei yra gaunamas sąrašas tokių užmaskuotų vertimų, reikia juos pašalinti.
/ip firewall connection remove [find where srcnat and protocol=ipsec-esp]
Prevenciškai reikėtų sukurti/pakoreguoti taisykles išeinančiam srautui, kad ESP paketai nepakliūtų po maskavimo taisykle. Paprasčiausias būdas paredaguoti pagrindinę maskuojančią taisyklėje ir joje pridedant „protocol=!ipsec-esp”. Pateikiamas pavyzdys tokios taisyklės.
/ip firewall ant add chain=srcnat action=masquerade protocol=!ipsec-esp out-interface=ether1
Keli išoriniai viešieji IP adresai ant to paties tinklo prievado
Paskutinė situacija kurią norėtume aprašyti. Situacija, kada IPSEC apjungimas naudotų mūsų priskirtą išorinį IP adresą pvz. „1.1.1.2“. Tokiam poreikiui esant, reikia aprašyti SRN-NAT taisyklę. Ši taisyklė esant kreipimuisi į kliento IP adresą „2.2.2.2“, naudotų kitą, atgalinį IP adresą (angl. dst-reply). Kaip pavyzdį priskirsime IP adresą „1.1.1.2“.
Ši taisyklė turi būti naudojama prieš pagrindinę, maskuojančią (angl. masquerade) taisyklę.
/ip firewall nat
add chain=srcnat protocol=ipsec-esp dst-address=2.2.2.2 action=src-nat to-addresses=1.1.1.2
Tikriname ar IPSEC ESP susijungia su kliento IP adresu „2.2.2.2“ ir naudoja mūsų paskirtą IP „1.1.1.2“ grįžtamajam ryšiui. Jei matome eilutėje mūsų priskirtą IP adresą reply-dst-address=1.1.1.2, tada sistema veikia korektiškai.
/ip firewall connection print detail where dst-address~"2.2.2.2"
Flags: E - expected, S - seen-reply, A - assured, C - confirmed, D - dying, F - fasttrack, s - srcnat,
d - dstnat
0 SAC protocol=udp src-address=1.1.1.2:500 dst-address=2.2.2.2:500
reply-src-address=2.2.2.2:500 reply-dst-address=1.1.1.2:500 timeout=1m21s
orig-packets=155 orig-bytes=22 384 orig-fasttrack-packets=0 orig-fasttrack-bytes=0
repl-packets=150 repl-bytes=21 912 repl-fasttrack-packets=0 repl-fasttrack-bytes=0
orig-rate=0bps repl-rate=0bps