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:
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