如何排除國內 IPsec VPN 故障。 第1部分

如何排除國內 IPsec VPN 故障。 第1部分

情況

休假。 我喝咖啡。 該學生在兩點之間建立了 VPN 連接,然後就消失了。 我查了一下:確實有隧道,但是隧道裡沒有車輛。 該學生不接電話。

我打開水壺,開始研究 S-Terra 閘道的故障排除。 我分享我的經驗和方法。

初始數據

兩個地理上分離的站點透過 GRE 隧道連接。 GRE需要加密:

如何排除國內 IPsec VPN 故障。 第1部分

我正在檢查 GRE 隧道的功能。 為此,我從裝置 R1 到裝置 R2 的 GRE 介面執行 ping。 這是加密的目標流量。 沒有答案:

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

我查看了 Gate1 和 Gate2 上的日誌。 日誌愉快地報告 IPsec 隧道已成功啟動,沒有任何問題:

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 隧道的統計中,我看到確實存在隧道,但 Rсvd 計數器重置為零:

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

我這樣困擾S-Terra:尋找從R1到R2的路徑上目標資料包遺失的位置。 在這個過程中(劇透)我會發現一個錯誤。

故障排除

步驟 1. Gate1 從 R1 接收的內容

我使用內建的資料包嗅探器 - tcpdump。 我在內部介面(類似 Cisco 的表示法中的 Gi0/1 或 Debian 作業系統表示法中的 eth1)介面上啟動嗅探器:

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

我看到 Gate1 收到來自 R1 的 GRE 封包。 我正在趕來。

步驟 2. Gate1 對 GRE 封包執行的操作

使用 klogview 實用程序,我可以看到 S-Terra VPN 驅動程式內的 GRE 封包發生了什麼情況:

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

我看到目標 GRE 流量 (proto 47) 172.16.0.1 -> 172.17.0.1 位於 CMAP 加密映射中的 LIST 加密規則下並被封裝。 接下來,資料包被路由(傳遞)。 klogview 輸出中沒有回應流量。

我正在檢查 Gate1 設備上的存取清單。 我看到一個存取清單LIST,它定義了加密的目標流量,這意味著沒有配置ME規則:

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

結論:問題不在於Gate1設備。

關於klogview的更多信息

VPN 驅動程式處理所有網路流量,而不僅僅是需要加密的流量。 如果 VPN 驅動程式處理網路流量並以未加密的方式傳輸,則這些是 klogview 中可見的訊息:

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

我看到 ICMP 流量(原型 1)172.16.0.1->172.17.0.1 未包含(不匹配)在 CMAP 加密卡加密規則中。 資料包以明文形式路由(傳遞)。

步驟 3. Gate2 從 Gate1 接收到什麼

我在 WAN (eth0) Gate2 介面上啟動嗅探器:

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

我看到 Gate2 收到來自 Gate1 的 ESP 封包。

步驟 4. Gate2 使用 ESP 套件做什麼

我在 Gate2 上啟動 klogview 實用程式:

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

我看到 ESP 封包(proto 50)被防火牆規則(L3VPN)丟棄(DROP)。 我確保 Gi0/0 實際上附加了一個 L3VPN 存取清單:

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

我發現了問題。

步驟 5. 存取清單有什麼問題

我看一下L3VPN訪問清單是什麼:

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

我看到允許 ISAKMP 封包,因此建立了 IPsec 隧道。 但 ESP 沒有啟用規則。 顯然,該學生混淆了 icmp 和 esp。

編輯訪問清單:

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

步驟 6. 檢查功能

首先,我確保L3VPN存取清單是正確的:

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

現在我從裝置 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

勝利。 GRE隧道已建立。 IPsec 統計資料中的傳入流量計數器不為零:

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 閘道上,在 klogview 輸出中,出現訊息表示目標流量 172.16.0.1->172.17.0.1 已被 CMAP 加密映射中的 LIST 規則成功解密 (PASS):

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

結果

一名學生毀了他的休息日。
請注意 ME 規則。

匿名工程師
t.me/anonymous_engineer


來源: www.habr.com

添加評論