swanctl 一个 localts 使用多个网段

中文解释:swanctl 中关于多子网的使用

问:我可以在一个 CHILD_SA 中隧道多个子网吗?

答:

  • 使用 IKEv2: 如果你使用 IKEv2 协议,并且对端(peer)支持此功能,那么是可以在一个 CHILD_SA 中隧道多个子网的。然而,并非所有设备都支持此功能。例如,Checkpoint、Cisco 和 Fortinet 的设备可能不支持,因此你需要查阅互操作性部分以获取相关细节。

  • 使用 IKEv1: 如果你使用 IKEv1 协议,你需要处于"道路战士"(road warrior)模式,并且使用 UNITY 扩展。在 strongSwan 中,可以通过 unity 插件来实现这一点。

  • 其他情况: 在其他情况下,如果不满足上述条件,你需要为每对子网定义一个单独的 CHILD_SA。

总结

总之,利用 IKEv2 协议,在对端支持的情况下,可以在同一个 CHILD_SA 中配置多个子网。而在 IKEv1 中,若希望实现相同功能,需借助 UNITY 扩展,并且通常适用在特定模式下。如果都不符合,则需要为每个子网对单独设置一个 CHILD_SA。

而我自己测试下来发现没有得到预期结果,虽然我定义了两个网段,但是只有一条路由

bash 复制代码
      children {
         net-net {
            local_ts = 10.251.138.0/24,10.251.137.0/24
            remote_ts = 2.2.168.0/24
            
            
# ip route show table 220
2.2.168.0/24 via 10.251.174.254 dev bond0.2286 proto static src 10.251.138.32


/etc/swanctl# swanctl --initiate --child net-net  mars-moon
[IKE] establishing CHILD_SA net-net{5}
[ENC] generating CREATE_CHILD_SA request 4 [ SA No KE TSi TSr ]
[NET] sending packet: from 10.251.174.200[4500] to 10.22.255.89[4500] (432 bytes)
[NET] received packet: from 10.22.255.89[4500] to 10.251.174.200[4500] (432 bytes)
[ENC] parsed CREATE_CHILD_SA response 4 [ N(ESP_TFC_PAD_N) N(NON_FIRST_FRAG) SA No KE TSi TSr ]
[IKE] received ESP_TFC_PADDING_NOT_SUPPORTED, not using ESPv3 TFC padding
[CFG] selected proposal: ESP:AES_CBC_256/HMAC_SHA2_256_128/MODP_1536/NO_EXT_SEQ
[IKE] CHILD_SA net-net{5} established with SPIs cce1c71f_i 3062316c_o and TS 10.251.137.0/24 === 2.2.168.0/24
initiate completed successfully

# 在 SA init 阶段可以看到,只有一个 TS,但是路由又是另外一个

# ip route show table 220
2.2.168.0/24 via 10.251.174.254 dev bond0.2286 proto static src 10.251.138.32

创建多个 CHILD_SA

可以看到目前我有 2 个sa,但是依然只有一条路由

bash 复制代码
+ /usr/sbin/swanctl --list-sas
mars-moon2: #1, ESTABLISHED, IKEv2, 56839a77707bb663_i* 3db3e48a2ece5386_r
  local  '10.251.174.200' @ 10.251.174.200[4500]
  remote '10.22.255.89' @ 10.22.255.89[4500]
  AES_CBC-256/HMAC_SHA2_256_128/PRF_HMAC_SHA2_256/MODP_1536
  established 196s ago, rekeying in 83957s
  net-net: #1, reqid 1, INSTALLED, TUNNEL-in-UDP, ESP:AES_CBC-256/HMAC_SHA2_256_128
    installed 196s ago, rekeying in 84632s, expires in 86204s
    in  ca40d2fd,      0 bytes,     0 packets
    out 5e199c1c,      0 bytes,     0 packets
    local  10.251.138.0/24 # 1
    remote 2.2.168.0/24
  net-net: #2, reqid 2, INSTALLED, TUNNEL-in-UDP, ESP:AES_CBC-256/HMAC_SHA2_256_128/MODP_1536
    installed 196s ago, rekeying in 84746s, expires in 86204s
    in  c2aad78a,    788 bytes,     3 packets,     6s ago
    out 8247bfb9,    252 bytes,     3 packets,     6s ago
    local  10.251.137.0/24 # 2
    remote 2.2.168.0/24
    
bash 复制代码
# ip route show table 220
2.2.168.0/24 via 10.251.174.254 dev bond0.2286 proto static src 10.251.137.32
bash 复制代码
connections {

    mars-moon2 {
      version = 2
      local_addrs  = 10.251.174.200
      remote_addrs = 10.22.255.89
      dpd_delay = 60
      rekey_time = 84600
      over_time = 1800
      encap = yes
      mobike = yes

      local {
         auth = psk
         id = 10.251.174.200
      }
      remote {
         auth = psk
         id = 10.22.255.89
      }
      children {
         net-net {
            local_ts = 10.251.138.0/24
            remote_ts = 2.2.168.0/24
         }
      }
   }

    mars-moon1 {
      version = 2
      local_addrs  = 10.251.174.200
      remote_addrs = 10.22.255.89
      dpd_delay = 60
      rekey_time = 84600
      over_time = 1800
      encap = yes
      mobike = yes

      local {
         auth = psk
         id = 10.251.174.200
      }
      remote {
         auth = psk
         id = 10.22.255.89
      }
      children {
         net-net {
            local_ts = 10.251.137.0/24 # 10.251.137.32 按照配置的先后顺序
            remote_ts = 2.2.168.0/24
         }
      }
   }
}

某种意义上来说,即使 local ts 有多个,但本地 node 都有这两个网段的 ip 的情况下, 只有一条路由,应该也是不合理的,因为只要有一条路由可以回即可。

只要从对面,确认这两个段的 ip,都可以通即可

相关推荐
赵文宇几秒前
CNCF Dragonfly 毕业啦!基于P2P的镜像和文件分发系统快速入门,在线体验
后端
程序员爱钓鱼19 分钟前
Node.js 编程实战:即时聊天应用 —— WebSocket 实现实时通信
前端·后端·node.js
Libby博仙1 小时前
Spring Boot 条件化注解深度解析
java·spring boot·后端
源代码•宸1 小时前
Golang原理剖析(Map 源码梳理)
经验分享·后端·算法·leetcode·golang·map
小周在成长1 小时前
动态SQL与MyBatis动态SQL最佳实践
后端
瓦尔登湖懒羊羊2 小时前
TCP的自我介绍
后端
小周在成长2 小时前
MyBatis 动态SQL学习
后端
子非鱼9212 小时前
SpringBoot快速上手
java·spring boot·后端
我爱娃哈哈2 小时前
SpringBoot + XXL-JOB + Quartz:任务调度双引擎选型与高可用调度平台搭建
java·spring boot·后端
JavaGuide2 小时前
Maven 4 终于快来了,新特性很香!
后端·maven