Kā novērst vietējā IPsec VPN problēmas. 1. daļa

Kā novērst vietējā IPsec VPN problēmas. 1. daļa

Situācija

Brīvdiena. Es dzeru kafiju. Students izveidoja VPN savienojumu starp diviem punktiem un pazuda. Pārbaudu: tiešām ir tunelis, bet tunelī nav satiksmes. Skolēns uz zvaniem neatbild.

Es uzlieku tējkannu un iegrimu S-Terra Gateway problēmu novēršanā. Dalos pieredzē un metodoloģijā.

Neapstrādāti dati

Abas ģeogrāfiski atdalītās vietas ir savienotas ar GRE tuneli. GRE ir jāšifrē:

Kā novērst vietējā IPsec VPN problēmas. 1. daļa

Es pārbaudu GRE tuneļa funkcionalitāti. Lai to izdarītu, es palaižu ping no ierīces R1 uz ierīces R2 GRE interfeisu. Šī ir šifrēšanas mērķa trafika. Nav atbildes:

root@R1:~# ping 1.1.1.2 -c 4
PING 1.1.1.2 (1.1.1.2) 56(84) bytes of data.

--- 1.1.1.2 ping statistics ---
4 packets transmitted, 0 received, 100% packet loss, time 3057ms

Es skatos uz Gate1 un Gate2 žurnāliem. Žurnāls priecīgi ziņo, ka IPsec tunelis ir veiksmīgi palaists, bez problēmām:

root@Gate1:~# cat /var/log/cspvpngate.log
Aug  5 16:14:23 localhost  vpnsvc: 00100119 <4:1> IPSec connection 5 established, traffic selector 172.17.0.1->172.16.0.1, proto 47, peer 10.10.10.251, id "10.10.10.251", Filter 
IPsec:Protect:CMAP:1:LIST, IPsecAction IPsecAction:CMAP:1, IKERule IKERule:CMAP:1

Gate1 IPsec tuneļa statistikā redzu, ka tiešām ir tunelis, bet Rсvd skaitītājs tiek atiestatīts uz nulli:

root@Gate1:~# sa_mgr show
ISAKMP sessions: 0 initiated, 0 responded

ISAKMP connections:
Num Conn-id (Local Addr,Port)-(Remote Addr,Port) State Sent Rcvd
1 3 (10.10.10.251,500)-(10.10.10.252,500) active 1070 1014

IPsec connections:
Num Conn-id (Local Addr,Port)-(Remote Addr,Port) Protocol Action Type Sent Rcvd
1 3 (172.16.0.1,*)-(172.17.0.1,*) 47 ESP tunn 480 0

Es traucēju S-Terra šādi: es meklēju, kur mērķa paketes tiek pazaudētas ceļā no R1 uz R2. Procesā (spoileris) es atradīšu kļūdu.

Problēmu novēršana

1. solis. Ko Gate1 saņem no R1

Es izmantoju iebūvēto pakešu sniffer - tcpdump. Es palaižu sniffer iekšējā (Gi0/1 Cisco apzīmējumā vai eth1 Debian OS apzīmējumā) saskarnē:

root@Gate1:~# tcpdump -i eth1

tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on eth1, link-type EN10MB (Ethernet), capture size 262144 bytes
14:53:38.879525 IP 172.16.0.1 > 172.17.0.1: GREv0, key=0x1, length 92: IP 1.1.1.1 > 1.1.1.2: ICMP echo request, id 2083, seq 1, length 64
14:53:39.896869 IP 172.16.0.1 > 172.17.0.1: GREv0, key=0x1, length 92: IP 1.1.1.1 > 1.1.1.2: ICMP echo request, id 2083, seq 2, length 64
14:53:40.921121 IP 172.16.0.1 > 172.17.0.1: GREv0, key=0x1, length 92: IP 1.1.1.1 > 1.1.1.2: ICMP echo request, id 2083, seq 3, length 64
14:53:41.944958 IP 172.16.0.1 > 172.17.0.1: GREv0, key=0x1, length 92: IP 1.1.1.1 > 1.1.1.2: ICMP echo request, id 2083, seq 4, length 64

Es redzu, ka Gate1 saņem GRE paketes no R1. Es dodos tālāk.

2. solis. Ko Gate1 dara ar GRE paketēm

Izmantojot klogview utilītu, es varu redzēt, kas notiek ar GRE paketēm S-Terra VPN draiverī:

root@Gate1:~# klogview -f 0xffffffff

filtration result for out packet 172.16.0.1->172.17.0.1, proto 47, len 112, if eth0: chain 4 "IPsecPolicy:CMAP", filter 8, event id IPsec:Protect:CMAP:1:LIST, status PASS
encapsulating with SA 31: 172.16.0.1->172.17.0.1, proto 47, len 112, if eth0
passed out packet 10.10.10.251->10.10.10.252, proto 50, len 160, if eth0: encapsulated

Redzu, ka mērķa GRE trafika (proto 47) 172.16.0.1 -> 172.17.0.1 CMAP kriptokartē tika pakļauta šifrēšanas noteikumam SARAKSTS un tika iekapsulēta. Pēc tam pakete tika maršrutēta (izdzēta). Klogview izvadē nav atbildes trafika.

Es pārbaudu Gate1 ierīces piekļuves sarakstus. Es redzu vienu piekļuves sarakstu LIST, kas nosaka šifrēšanas mērķa trafiku, kas nozīmē, ka ugunsmūra noteikumi nav konfigurēti:

Gate1#show access-lists
Extended IP access list LIST
    10 permit gre host 172.16.0.1 host 172.17.0.1

Secinājums: problēma nav Gate1 ierīcē.

Vairāk par klogview

VPN draiveris apstrādā visu tīkla trafiku, ne tikai trafiku, kas ir jāšifrē. Šie ir ziņojumi, kas ir redzami klogview, ja VPN draiveris apstrādāja tīkla trafiku un pārsūtīja to nešifrētu:

root@R1:~# ping 172.17.0.1 -c 4

root@Gate1:~# klogview -f 0xffffffff

filtration result for out packet 172.16.0.1->172.17.0.1, proto 1, len 84, if eth0: chain 4 "IPsecPolicy:CMAP": no match
passed out packet 172.16.0.1->172.17.0.1, proto 1, len 84, if eth0: filtered

Redzu, ka ICMP trafiks (proto 1) 172.16.0.1->172.17.0.1 netika iekļauts (nav atbilstības) CMAP kriptokartes šifrēšanas noteikumos. Pakete tika maršrutēta (izvadīta) skaidrā tekstā.

3. solis. Ko Gate2 saņem no Gate1

Es palaižu sniffer WAN (eth0) Gate2 saskarnē:

root@Gate2:~# tcpdump -i eth0
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on eth0, link-type EN10MB (Ethernet), capture size 262144 bytes
16:05:45.104195 IP 10.10.10.251 > 10.10.10.252: ESP(spi=0x30088112,seq=0x1), length 140
16:05:46.093918 IP 10.10.10.251 > 10.10.10.252: ESP(spi=0x30088112,seq=0x2), length 140
16:05:47.117078 IP 10.10.10.251 > 10.10.10.252: ESP(spi=0x30088112,seq=0x3), length 140
16:05:48.141785 IP 10.10.10.251 > 10.10.10.252: ESP(spi=0x30088112,seq=0x4), length 140

Es redzu, ka Gate2 saņem ESP paketes no Gate1.

4. darbība. Ko Gate2 dara ar ESP pakotnēm

Es palaižu klogview utilītu vietnē Gate2:

root@Gate2:~# klogview -f 0xffffffff
filtration result for in packet 10.10.10.251->10.10.10.252, proto 50, len 160, if eth0: chain 17 "FilterChain:L3VPN", filter 21, status DROP
dropped in packet 10.10.10.251->10.10.10.252, proto 50, len 160, if eth0: firewall

Es redzu, ka ugunsmūra noteikums (L50VPN) atteicās no ESP paketēm (proto 3) (DROP). Es pārliecinos, ka Gi0/0 patiešām ir pievienots L3VPN piekļuves saraksts:

Gate2#show ip interface gi0/0
GigabitEthernet0/0 is up, line protocol is up
  Internet address is 10.10.10.252/24
  MTU is 1500 bytes
  Outgoing access list is not set
  Inbound  access list is L3VPN

Es atklāju problēmu.

5. darbība. Kas vainas piekļuves sarakstam?

Es skatos, kas ir L3VPN piekļuves saraksts:

Gate2#show access-list L3VPN
Extended IP access list L3VPN
    10 permit udp host 10.10.10.251 any eq isakmp
    20 permit udp host 10.10.10.251 any eq non500-isakmp
    30 permit icmp host 10.10.10.251 any

Es redzu, ka ISAKMP paketes ir atļautas, tāpēc tiek izveidots IPsec tunelis. Taču ESP nav iespējošanas noteikuma. Acīmredzot students sajauca icmp un esp.

Piekļuves saraksta rediģēšana:

Gate2(config)#
ip access-list extended L3VPN
no 30
30 permit esp host 10.10.10.251 any

6. darbība. Funkcionalitātes pārbaude

Pirmkārt, es pārliecinos, ka L3VPN piekļuves saraksts ir pareizs:

Gate2#show access-list L3VPN
Extended IP access list L3VPN
    10 permit udp host 10.10.10.251 any eq isakmp
    20 permit udp host 10.10.10.251 any eq non500-isakmp
    30 permit esp host 10.10.10.251 any

Tagad es palaižu mērķa trafiku no ierīces R1:

root@R1:~# ping 1.1.1.2 -c 4
PING 1.1.1.2 (1.1.1.2) 56(84) bytes of data.
64 bytes from 1.1.1.2: icmp_seq=1 ttl=64 time=35.3 ms
64 bytes from 1.1.1.2: icmp_seq=2 ttl=64 time=3.01 ms
64 bytes from 1.1.1.2: icmp_seq=3 ttl=64 time=2.65 ms
64 bytes from 1.1.1.2: icmp_seq=4 ttl=64 time=2.87 ms

--- 1.1.1.2 ping statistics ---
4 packets transmitted, 4 received, 0% packet loss, time 3006ms
rtt min/avg/max/mdev = 2.650/10.970/35.338/14.069 ms

Uzvara. GRE tunelis ir izveidots. Ienākošās trafika skaitītājs IPsec statistikā nav nulle:

root@Gate1:~# sa_mgr show
ISAKMP sessions: 0 initiated, 0 responded

ISAKMP connections:
Num Conn-id (Local Addr,Port)-(Remote Addr,Port) State Sent Rcvd
1 3 (10.10.10.251,500)-(10.10.10.252,500) active 1474 1350

IPsec connections:
Num Conn-id (Local Addr,Port)-(Remote Addr,Port) Protocol Action Type Sent Rcvd
1 4 (172.16.0.1,*)-(172.17.0.1,*) 47 ESP tunn 1920 480

Gate2 vārtejā klogview izvadā parādījās ziņojumi, ka mērķa trafika 172.16.0.1->172.17.0.1 ir veiksmīgi atšifrēta (PASS), izmantojot LIST kārtulu CMAP kriptokartē:

root@Gate2:~# klogview -f 0xffffffff
filtration result for in packet 172.16.0.1->172.17.0.1, proto 47, len 112, if eth0: chain 18 "IPsecPolicy:CMAP", filter 25, event id IPsec:Protect:CMAP:1:LIST, status PASS
passed in packet 172.16.0.1->172.17.0.1, proto 47, len 112, if eth0: decapsulated

Rezultāti

Kāds students sabojāja savu brīvdienu.
Esiet uzmanīgi ar ME noteikumiem.

Anonīms inženieris
t.me/anonymous_engineer


Avots: www.habr.com

Pievieno komentāru