Ipsec 隧道已建立,但无法进行流量或 ping

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 没有响应

如果我尝试发送数据包,服务器的设备不会捕获它们,并且我的 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)

如果有人能给我一点提示我将不胜感激。

答案1

故障排除步骤(从下到上):

  1. 运行 tcpdump。您应该会看到清晰和加密的数据包 (ESP)。

  2. 检查 ipsec 隧道两端之间的 ip 连接。

  3. 检查路由。默认情况下,strongswan 将附加路由安装到单独的路由表中。运行ip -4 r ls table 220。调查输出。要检查实际路由,请使用命令ip route get <dst>。不要使用该route -n命令 - 它会返回未完成的视图。

  4. ip -s -s xfrm state list检查和的输出ip -s -s -d xfrm policy list。它显示系统 SADB(安全关联数据库)和策略数据库。您的 vti 接口存在一些运营商错误。vti 接口上的运营商错误意味着:

    • 未找到合适的 ipsec 策略。请检查ip x p get ...命令。
    • 未找到合适的路由。请检查ip route get ...命令。
    • 未找到合适的 SA。请检查ip x s ls命令。
  5. 检查防火墙。iptables 命令默认与filter表配合使用,但还有其他表(raw、nat、mangle)。最好使用命令iptables-save -c列出完整规则集。更改 nat 规则后,使用命令清除 conntrack 表conntrack -F。ipsec 流量通过防火墙链两次:一次以加密形式通过,另一次以清除形式通过。因此,请调查规则。您还可以插入目标规则以使用命令NFLOG捕获流量。tcpdump -ni nflog...

相关内容