Kiel solvi problemojn pri hejma IPsec VPN. Parto 1

Kiel solvi problemojn pri hejma IPsec VPN. Parto 1

La situacio

Tago libera. Mi trinkas kafon. La studento starigis VPN-konekton inter du punktoj kaj malaperis. Mi kontrolas: vere estas tunelo, sed ne estas trafiko en la tunelo. La studento ne respondas al vokoj.

Mi surŝmiris la kaldronon kaj plonĝas en la problemon pri S-Terra Gateway. Mi dividas mian sperton kaj metodikon.

Fontaj datumoj

La du geografie apartigitaj ejoj estas ligitaj per GRE-tunelo. GRE devas esti ĉifrita:

Kiel solvi problemojn pri hejma IPsec VPN. Parto 1

Mi kontrolas la funkciojn de la GRE-tunelo. Por fari tion, mi rulas ping de aparato R1 al la GRE-interfaco de aparato R2. Ĉi tio estas la cela trafiko por ĉifrado. Neniu Respondo:

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

Mi rigardas la protokolojn sur Gate1 kaj Gate2. La protokolo feliĉe raportas, ke la tunelo IPsec estis sukcese lanĉita, sen problemoj:

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

En la statistiko de la IPsec-tunelo ĉe Gate1 mi vidas, ke vere estas tunelo, sed la Rсvd-nombrilo estas rekomencigita al nulo:

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

Mi ĝenas S-Terra tiel: Mi serĉas kie la celpakaĵoj estas perditaj sur la vojo de R1 al R2. En la procezo (spoiler) mi trovos eraron.

Solvado de problemoj

Paŝo 1. Kion Gate1 ricevas de R1

Mi uzas la enkonstruitan pakaĵetoflaron - tcpdump. Mi lanĉas la sniffer sur la interna (Gi0/1 en Cisco-simila notacio aŭ eth1 en Debian OS-notacio) interfaco:

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

Mi vidas, ke Gate1 ricevas GRE-pakojn de R1. Mi pluiras.

Paŝo 2. Kion Gate1 faras kun GRE-pakoj

Uzante la ilon klogview mi povas vidi kio okazas kun GRE-pakoj ene de la S-Terra VPN-ŝoforo:

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

Mi vidas, ke la cela GRE-trafiko (proto 47) 172.16.0.1 -> 172.17.0.1 venis sub la LISTA ĉifrada regulo en la CMAP-kripto-mapo kaj estis enkapsuligita. Poste, la pakaĵeto estis sendita (forpasita). Ne estas respondtrafiko en la eligo de klogview.

Mi kontrolas la alirlistojn sur la Gate1-aparato. Mi vidas unu alirliston LIST, kiu difinas la celtrafikon por ĉifrado, kio signifas, ke fajroŝirmilaj reguloj ne estas agorditaj:

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

Konkludo: la problemo ne estas kun la Gate1-aparato.

Pli pri klogview

La VPN-ŝoforo pritraktas la tutan retan trafikon, ne nur la trafikon, kiu bezonas esti ĉifrita. Ĉi tiuj estas la mesaĝoj videblaj en klogview se la VPN-ŝoforo prilaboris la retan trafikon kaj transdonis ĝin neĉifrite:

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

Mi vidas, ke ICMP-trafiko (proto 1) 172.16.0.1->172.17.0.1 ne estis inkluzivita (neniu kongruo) en la ĉifradaj reguloj de la kripta karto CMAP. La pakaĵeto estis sendita (dissendita) en klara teksto.

Paŝo 3. Kion Gate2 ricevas de Gate1

Mi lanĉas la sniffer sur la WAN (eth0) Gate2-interfaco:

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

Mi vidas, ke Gate2 ricevas ESP-pakojn de Gate1.

Paŝo 4. Kion Gate2 faras kun ESP-pakaĵoj

Mi lanĉas la ilon klogview ĉe 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

Mi vidas, ke ESP-pakoj (proto 50) estis faligitaj (DROP) de la fajroŝirmila regulo (L3VPN). Mi certigas, ke Gi0/0 efektive havas L3VPN-alirliston ligita al ĝi:

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

Mi malkovris la problemon.

Paŝo 5. Kio malbonas kun la alirlisto

Mi rigardas kio estas la L3VPN-alirlisto:

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

Mi vidas, ke ISAKMP-pakoj estas permesitaj, do IPsec-tunelo estas establita. Sed ne ekzistas ebliga regulo por ESP. Ŝajne, la studento konfuzis icmp kaj esp.

Redaktante la alirliston:

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

Paŝo 6. Kontrolante funkciojn

Antaŭ ĉio, mi certigas, ke la alirlisto de L3VPN estas ĝusta:

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

Nun mi lanĉas celtrafikon de aparato 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

Venko. La GRE-tunelo estis establita. La envenanta trafika nombrilo en IPsec-statistiko ne estas nula:

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

Sur la Gate2-enirejo, en la klogview-eligo, mesaĝoj aperis, ke la cela trafiko 172.16.0.1->172.17.0.1 estis sukcese deĉifrita (PASS) per la LISTA regulo en la CMAP-kripto-mapo:

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

Rezultoj

Studento ruinigis sian liberan tagon.
Atentu pri la reguloj de ME.

Anonima inĝeniero
t.me/anonymous_engineer


fonto: www.habr.com

Aldoni komenton