已建立 Ipsec 隧道,但無法進行流量或 ping
我已經在這個網站和許多其他網站上搜尋了幾個小時,即使人們遇到了類似的問題,我也沒有找到一個可以解決我的問題的網站。
我正在嘗試使用 strongswan(通過 swanctl.conf)配置從我的電腦到伺服器上的虛擬機的 IPsec 隧道。我之前已經建立了 IPsec 連接,但來自另一台設備。我正在使用相同的配置(swanctl.conf),但其他東西似乎不適合。我的機器 (10.3.72.29) 獲得一個虛擬 ip (172.13.14.2) 並使用自己的虛擬 ip (192.168.122.2) 建立與伺服器設備 (10.3.218.62) 的連接
我目前的配置:
我的電腦(發起者)swanctl.conf:
connections { ch_vti0 { send_cert = always encap = yes vips = 0.0.0.0 remote_addrs = 10.3.218.62 local { round = 1 id = 10.3.72.29 auth = psk certs = } remote { auth = psk id = 10.3.218.62 certs = } children { ch_vti0 { mark_in = 42 mark_out = 42 remote_ts = 192.168.122.2/24 local_ts = dynamic inactivity = 300s mode = tunnel esp_proposals = 3des-sha1-modp2048 updown = /usr/local/etc/swanctl/updown.sh 0 } } version = 1 proposals = des-md5-modp768, des-md5-modp1024, des-md5-modp1536 } } secrets { eap-xauth { eap_id = test1 id = test1 secret = password } xauth-local { id = test1 secret = password } ike-sec { id = %any secret = test } ike-local { id = 10.3.72.29 secret = test } }
伺服器的虛擬機swanctl.conf:
connections { ch_vti0 { send_cert = always encap = yes pools = pools_users #aggressive = yes local { round = 1 id = 10.3.218.62 auth = psk certs = } remote { auth = psk id = %any certs = } children { ch_vti0 { local_ts = 192.168.122.2/24 inactivity = 120s mode = tunnel esp_proposals = 3des-sha1-modp2048 updown = /usr/local/libexec/ipsec/_updown iptables } } version = 0 proposals = des-md5-modp768, des-md5-modp1024, des-md5-modp1536 } } pools { pools_users { addrs = 172.13.14.2/24 } } secrets { eap-xauth { eap_id = test1 id = test1 secret = password } xauth-local { id = test1 secret = password } ike-sec { id = %any secret = test } ike-local { id = 10.3.218.62 secret = test } }
如果有人想知道 updown.sh 腳本創建 vti0 介面和路由
我的電腦上 ipsec statusall 的結果:
Listening IP addresses: 10.3.72.29 fdc8:c2cb:4586:cc11::8f00:5a9 172.13.14.2 Connections: ch_vti0: %any...10.3.218.62 IKEv1 ch_vti0: local: [10.3.72.29] uses pre-shared key authentication ch_vti0: remote: [10.3.218.62] uses pre-shared key authentication ch_vti0: child: dynamic === 192.168.122.0/24 TUNNEL Security Associations (1 up, 0 connecting): ch_vti0[1]: ESTABLISHED 13 minutes ago, 10.3.72.29[10.3.72.29]...10.3.218.62[10.3.218.62] ch_vti0[1]: IKEv1 SPIs: 7fa996a60f87e923_i* 4faa8dbdd74a5927_r, rekeying in 3 hours ch_vti0[1]: IKE proposal: DES_CBC/HMAC_MD5_96/PRF_HMAC_MD5/MODP_768 ch_vti0{1}: INSTALLED, TUNNEL, reqid 1, ESP in UDP SPIs: c393a4bb_i c392a387_o ch_vti0{1}: 3DES_CBC/HMAC_SHA1_96/MODP_2048, 65772 bytes_i (783 pkts, 0s ago), 0 bytes_o, rekeying in 42 minutes ch_vti0{1}: 172.13.14.2/32 === 192.168.122.0/24
伺服器的設備:
Listening IP addresses: 192.168.122.2 10.3.218.62 fdc8:c2cb:4586:cc12::e49c:faf8 Connections: ch_vti0: %any...%any IKEv1/2 ch_vti0: local: [10.3.218.62] uses pre-shared key authentication ch_vti0: remote: [%any] uses pre-shared key authentication ch_vti0: child: 192.168.122.0/24 === dynamic TUNNEL Security Associations (1 up, 0 connecting): ch_vti0[1]: ESTABLISHED 14 minutes ago, 10.3.218.62[10.3.218.62]...10.3.72.29[10.3.72.29] ch_vti0[1]: IKEv1 SPIs: 7fa996a60f87e923_i 4faa8dbdd74a5927_r*, rekeying in 3 hours ch_vti0[1]: IKE proposal: DES_CBC/HMAC_MD5_96/PRF_HMAC_MD5/MODP_768 ch_vti0{1}: INSTALLED, TUNNEL, reqid 1, ESP in UDP SPIs: c392a387_i c393a4bb_o ch_vti0{1}: 3DES_CBC/HMAC_SHA1_96/MODP_2048, 0 bytes_i, 68880 bytes_o (820 pkts, 0s ago), rekeying in 44 minutes ch_vti0{1}: 192.168.122.0/24 === 172.13.14.2/32
我的電腦上的路線:
root@malz:/usr/local/etc/swanctl# route -n Kernel IP routing table Destination Gateway Genmask Flags Metric Ref Use Iface 0.0.0.0 10.3.127.1 0.0.0.0 UG 100 0 0 enp2s0 10.3.0.0 0.0.0.0 255.255.0.0 U 100 0 0 enp2s0 192.168.122.0 0.0.0.0 255.255.255.0 U 0 0 0 vti0
伺服器設備上的路由:
root@server-automation-2:/etc/swanctl# route -n Kernel IP routing table Destination Gateway Genmask Flags Metric Ref Use Iface 0.0.0.0 10.3.127.1 0.0.0.0 UG 0 0 0 ens4 10.3.0.0 0.0.0.0 255.255.0.0 U 0 0 0 ens4 192.168.122.0 0.0.0.0 255.255.255.0 U 0 0 0 ens3
我已經允許 IPsec 使用的埠(500,4500,4500/udp,500/udp),嘗試禁用它們的防火牆,清除 iptables 並允許一切:
iptables -F iptables -I INPUT -j ACCEPT iptables -P INPUT ACCEPT iptables -P OUTPUT ACCEPT iptables -P FORWARD ACCEPT
我還檢查了丟棄數據包的 sysctl 參數(尤其是關於 icmp 請求的那些)
如果我嘗試使用 tcpdump 擷取數據包,我可以看到我確實從伺服器的設備接收到它們(ping icmp 數據包),但我的電腦沒有響應
如果我嘗試發送數據包,伺服器的設備不會擷取它們,並且我的 PC 的 IPsec 介面 TX 錯誤數據包會增加。從 ifconfig:
vti0: flags=209<UP,POINTOPOINT,RUNNING,NOARP> mtu 1480 inet 172.13.14.2 netmask 255.255.255.255 destination 172.13.14.2 inet6 fe80::5efe:a03:481d prefixlen 64 scopeid 0x20<link> tunnel txqueuelen 1000 (IPIP Tunnel) RX packets 1063 bytes 89292 (89.2 KB) RX errors 0 dropped 0 overruns 0 frame 0 TX packets 0 bytes 0 (0.0 B) TX errors 57 dropped 0 overruns 0 carrier 57 collisions 0
總之,我已經在兩台機器之間建立了 ipsec 連接,但我無法弄清楚為什麼其中一台無法傳輸包並且不響應其他 ping。我相當肯定這一切的原因不是 ipsec 配置,因為我之前已經提到過我之前已經測試過它並且它可以使用完全相同的 conf 文件(不包括更改 ips)
如果有人能給我一個提示,我將不勝感激。
故障排除步驟(從下到上):
- 執行 tcpdump。您應該會看到清晰和加密的數據包 (ESP)。
- 檢查 ipsec 隧道兩端之間的 ip 連接。
- 檢查路由。預設情況下,strongswan 會將附加路由安裝到單獨的路由表中。執行
ip -4 r ls table 220
。調查輸出。要檢查實際路線,請使用該ip route get <dst>
命令。不要使用該route -n
命令 - 它會返回未完成的視圖。- 檢查 和 的
ip -s -s xfrm state list
輸出ip -s -s -d xfrm policy list
。它顯示了系統 SADB(安全關聯數據庫)和策略 DB。您的 vti 介面有一些運營商錯誤。vti 介面上的運營商錯誤意味著:
- 沒有找到合適的 ipsec 策略。檢查
ip x p get ...
命令。- 沒有找到合適的路線。檢查
ip route get ...
命令。- 沒有找到合適的 SA。檢查
ip x s ls
命令。
- 檢查防火牆。iptables 命令預設使用該
filter
表,但還有其他表(raw、nat、mangle)。最好使用該iptables-save -c
命令列出完整的規則集。更改 nat 規則後,使用conntrack -F
命令清除 conntrack 表。ipsec 流量通過防火牆鏈兩次:一次以加密方式通過,另一次以明文方式通過。所以調查規則。您還可以插入NFLOG
目標規則以使用tcpdump -ni nflog...
命令擷取流量。